Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_layer_decorator.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_layer_decorator.hpp>
6 #include <details/caseless.hpp>
7 #include <memory>
8 #include <vector>
9 #include <string>
10
11 using namespace InferenceEngine;
12 using namespace details;
13
14 Builder::LayerDecorator::LayerDecorator(const std::string& type, const std::string& name) {
15     layer = std::make_shared<Layer>(type, name);
16 }
17
18 Builder::LayerDecorator::LayerDecorator(const Layer::Ptr& layer): layer(layer) {}
19 Builder::LayerDecorator::LayerDecorator(const Layer::CPtr& layer): cLayer(layer) {}
20
21 Builder::LayerDecorator::LayerDecorator(const Builder::LayerDecorator & rval) {
22     *this = rval;
23 }
24
25 Builder::LayerDecorator &Builder::LayerDecorator::operator=(const Builder::LayerDecorator &rval) {
26     layer = rval.layer;
27     cLayer = rval.cLayer;
28     return *this;
29 }
30
31 Builder::LayerDecorator::operator Builder::Layer() const {
32     getLayer()->validate(true);
33     return *getLayer();
34 }
35
36 Builder::LayerDecorator::operator Builder::Layer::Ptr() {
37     getLayer()->validate(true);
38     return getLayer();
39 }
40
41 Builder::LayerDecorator::operator Builder::Layer::CPtr() const {
42     getLayer()->validate(true);
43     return getLayer();
44 }
45
46 const std::string& Builder::LayerDecorator::getType() const {
47     return getLayer()->getType();
48 }
49 const std::string& Builder::LayerDecorator::getName() const {
50     return getLayer()->getName();
51 }
52
53 Builder::Layer::Ptr& Builder::LayerDecorator::getLayer() {
54     if (!layer)
55         THROW_IE_EXCEPTION << "Cannot get Layer::Ptr!";
56     return layer;
57 }
58
59 const Builder::Layer::CPtr Builder::LayerDecorator::getLayer() const {
60     if (!cLayer) {
61         if (!layer)
62             THROW_IE_EXCEPTION << "Cannot get Layer::CPtr!";
63         return std::static_pointer_cast<const Layer>(layer);
64     }
65     return cLayer;
66 }
67
68 void Builder::LayerDecorator::checkType(const std::string& type) const {
69     if (!details::CaselessEq<std::string>()(getLayer()->getType(), type))
70         THROW_IE_EXCEPTION << "Cannot create " << type << " decorator for layer " << getLayer()->getType();
71 }