Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / include / builders / ie_layer_decorator.hpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2018 Intel Corporation
+// Copyright (C) 2018-2019 Intel Corporation
 // SPDX-License-Identifier: Apache-2.0
 //
 
@@ -14,36 +14,41 @@ namespace Builder {
 /**
  * @brief This class defines the basic functional for layer builders
  */
-class INFERENCE_ENGINE_API_CLASS(LayerFragment) {
+class INFERENCE_ENGINE_API_CLASS(LayerDecorator) {
 public:
     /**
      * @brief The constructor creates layer builders with layer type and layer name
      * @param type Layer type
      * @param name Layer name
      */
-    LayerFragment(const std::string& type, const std::string& name);
+    LayerDecorator(const std::string& type, const std::string& name);
     /**
      * @brief The constructor creates layer builders from reference to generic layer builder
-     * @param genLayer Generic layer builder
+     * @param layer pointer to generic layer builder
      */
-    explicit LayerFragment(Layer& genLayer);
+    explicit LayerDecorator(const Layer::Ptr& layer);
+    /**
+     * @brief The constructor creates layer builders from reference to generic layer builder
+     * @param layer constant pointer to generic layer builder
+     */
+    explicit LayerDecorator(const Layer::CPtr& layer);
     /**
      * @brief The copy constructor
      * @param rval Source builder
      */
-    explicit LayerFragment(const LayerFragment& rval);
+    LayerDecorator(const LayerDecorator& rval);
 
     /**
-     * @brief Copy operator for LayerFragment
+     * @brief Copy operator for LayerDecorator
      * @param rval
      * @return Layer builder
      */
-    LayerFragment& operator=(const LayerFragment& rval);
+    LayerDecorator& operator=(const LayerDecorator& rval);
 
     /**
      * @brief Virtual destructor
      */
-    virtual ~LayerFragment() = default;
+    virtual ~LayerDecorator() = default;
 
     /**
      * @brief The operator creates generic builder
@@ -52,6 +57,18 @@ public:
     virtual operator Layer() const;
 
     /**
+     * @brief The operator creates generic builder
+     * @return Pointer to generic builder
+     */
+    virtual operator Layer::Ptr();
+
+    /**
+     * @brief The operator creates generic builder
+     * @return Constant pointer to generic builder
+     */
+    virtual operator Layer::CPtr() const;
+
+    /**
      * @brief Returns layer type
      * @return Layer type
      */
@@ -63,12 +80,14 @@ public:
     const std::string& getName() const;
 
 protected:
-    const std::vector<size_t> uInts2size_t(const std::vector<unsigned int>& vector) const;
-    Layer& getLayer() const;
+    Layer::Ptr& getLayer();
+    const Layer::CPtr getLayer() const;
+    void checkType(const std::string& type) const;
+
+    Layer::CPtr cLayer;
 
 private:
-    Layer layer;
-    Layer& refLayer;
+    Layer::Ptr layer;
 };
 
 }  // namespace Builder