Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_memory_layer.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_memory_layer.hpp>
6 #include <ie_cnn_layer_builder.h>
7
8 #include <vector>
9 #include <string>
10
11 using namespace InferenceEngine;
12
13 Builder::MemoryLayer::MemoryLayer(const std::string& name): LayerDecorator("Memory", name) {
14     getLayer()->getOutputPorts().resize(1);
15     getLayer()->getInputPorts().resize(1);
16     setSize(2);
17 }
18
19 Builder::MemoryLayer::MemoryLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
20     checkType("Memory");
21 }
22
23 Builder::MemoryLayer::MemoryLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
24     checkType("Memory");
25 }
26
27 Builder::MemoryLayer& Builder::MemoryLayer::setName(const std::string& name) {
28     getLayer()->setName(name);
29     return *this;
30 }
31
32 const Port& Builder::MemoryLayer::getInputPort() const {
33     return getLayer()->getInputPorts()[0];
34 }
35
36 Builder::MemoryLayer& Builder::MemoryLayer::setInputPort(const Port &port) {
37     getLayer()->getInputPorts()[0] = port;
38     return *this;
39 }
40
41 const Port& Builder::MemoryLayer::getOutputPort() const {
42     return getLayer()->getOutputPorts()[0];
43 }
44
45 Builder::MemoryLayer& Builder::MemoryLayer::setOutputPort(const Port &port) {
46     getLayer()->getOutputPorts()[0] = port;
47     return *this;
48 }
49
50 const std::string Builder::MemoryLayer::getId() const {
51     return getLayer()->getParameters().at("id");
52 }
53 Builder::MemoryLayer& Builder::MemoryLayer::setId(const std::string& id) {
54     getLayer()->getParameters()["id"] = id;
55     return *this;
56 }
57 size_t Builder::MemoryLayer::getIndex() const {
58     return getLayer()->getParameters().at("index");
59 }
60 Builder::MemoryLayer& Builder::MemoryLayer::setIndex(size_t index) {
61     if (index > 1)
62         THROW_IE_EXCEPTION << "Index supports only 0 and 1 values.";
63     getLayer()->getParameters()["index"] = index;
64     return *this;
65 }
66 size_t Builder::MemoryLayer::getSize() const {
67     return getLayer()->getParameters().at("size");
68 }
69 Builder::MemoryLayer& Builder::MemoryLayer::setSize(size_t size) {
70     if (size != 2)
71         THROW_IE_EXCEPTION << "Only size equal 2 is supported.";
72     getLayer()->getParameters()["size"] = size;
73     return *this;
74 }
75 REG_VALIDATOR_FOR(Memory, [](const InferenceEngine::Builder::Layer::CPtr& layer, bool partial) {
76 });
77
78 REG_CONVERTER_FOR(Memory, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
79     layer.getParameters()["id"] = cnnLayer->GetParamAsString("id", 0);
80     layer.getParameters()["index"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("index", 0));
81     layer.getParameters()["size"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("size", 0));
82 });
83