1 // Copyright (C) 2018 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
7 #include <ie_inetwork.hpp>
14 namespace InferenceEngine {
19 class Parameters: public IParameters {
21 using Ptr = std::shared_ptr<Parameters>;
23 const std::map<std::string, Parameter>& getParameters() const noexcept override {
26 const std::map<std::string, Blob::CPtr>& getConstantData() const noexcept override {
30 std::map<std::string, Parameter>& getParameters() {
33 std::map<std::string, Blob::CPtr>& getConstantData() noexcept {
37 std::map<std::string, Parameter> params;
38 std::map<std::string, InferenceEngine::Blob::CPtr> constData;
41 class Layer: public ILayer {
43 using Ptr = std::shared_ptr<Layer>;
45 explicit Layer(size_t id): id(id), params(new Parameters()) {}
46 Layer(const Layer& layer) {
47 this->outputs = layer.getOutputPorts();
48 this->inputs = layer.getInputPorts();
49 this->params = layer.getParameters();
50 this->subGraph = layer.getGraph();
51 this->name = layer.getName();
52 this->type = layer.getType();
53 this->id = layer.getId();
55 explicit Layer(const ILayer& layer) {
56 this->outputs = layer.getOutputPorts();
57 this->inputs = layer.getInputPorts();
58 this->params = layer.getParameters();
59 this->subGraph = layer.getGraph();
60 this->name = layer.getName();
61 this->type = layer.getType();
62 this->id = layer.getId();
65 size_t getId() const noexcept override {
68 const std::string& getName() const noexcept override {
71 const std::string& getType() const noexcept override {
74 const INetwork::Ptr& getGraph() const noexcept override {
77 const IParameters::Ptr& getParameters() const noexcept override {
80 const std::vector<Port>& getInputPorts() const noexcept override {
83 const std::vector<Port>& getOutputPorts() const noexcept override {
87 std::string& getName() noexcept {
91 std::string& getType() noexcept {
94 std::shared_ptr<Network> getGraph() noexcept {
95 return std::dynamic_pointer_cast<Network>(subGraph);
97 void setGraph(const INetwork::Ptr& graph) noexcept {
100 Parameters::Ptr getParameters() noexcept {
101 return std::dynamic_pointer_cast<Parameters>(params);
103 std::vector<Port>& getInputPorts() noexcept {
106 std::vector<Port>& getOutputPorts() noexcept {
114 INetwork::Ptr subGraph;
115 IParameters::Ptr params;
116 std::vector<Port> inputs;
117 std::vector<Port> outputs;
120 class Network: public INetwork {
122 using Ptr = std::shared_ptr<Network>;
123 using iterator = details::INetworkIterator<Network, Layer>;
125 explicit Network(const Context& context, const std::string& name = "");
126 Network(const Context& context, const INetwork& network);
127 Network(const Context& context, const Network& network);
129 Network& operator=(const Network& network);
130 Network& operator=(const INetwork& network);
132 const_iterator begin() const noexcept override;
133 const_iterator end() const noexcept override;
134 iterator begin() noexcept;
135 iterator end() noexcept;
137 const ILayer::Ptr getLayer(size_t id) const noexcept override;
138 const std::vector<ILayer::Ptr> getInputs() const noexcept override;
139 const std::vector<ILayer::Ptr> getOutputs() const noexcept override;
140 const std::vector<Connection> getLayerConnections(idx_t layerId) const noexcept override;
141 size_t size() const noexcept override;
142 const std::string& getName() const noexcept override;
143 const Context& getContext() const noexcept override;
145 const std::vector<Connection>& getConnections() const noexcept;
146 Layer::Ptr getLayer(size_t id) noexcept;
147 std::string& getName() noexcept;
149 void addLayer(const ILayer::Ptr& layer) noexcept;
150 void addConnection(const Connection& connection) noexcept;
155 std::vector<Layer::Ptr> layers;
156 std::vector<Connection> connections;
159 } // namespace details
160 } // namespace InferenceEngine