1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
7 #include <builders/ie_layer_builder.hpp>
8 #include <ie_icnn_network.hpp>
9 #include <cpp/ie_cnn_network.h>
10 #include <ie_network.hpp>
11 #include <ie_context.hpp>
12 #include <ie_common.h>
20 namespace InferenceEngine {
24 * @brief This class implements a builder for IE Network
26 class INFERENCE_ENGINE_API_CLASS(Network): public INetwork {
29 * @brief A shared pointer to the Network builder
31 using Ptr = std::shared_ptr<Network>;
33 * @brief An iterator for Network builder definition
35 using iterator = details::INetworkIterator<Network, Layer>;
37 * @brief Begin network iterator
38 * @return Network iterator
42 * @brief Begin network iterator
43 * @return const INetwork iterator
45 const_iterator begin() const noexcept override;
48 * @brief End network iterator
49 * @return Network iterator
53 * @brief End network iterator
54 * @return const INetwork iterator
56 const_iterator end() const noexcept override;
59 * @brief Returns a number of layers in the network.
60 * @return Layers count
62 size_t size() const noexcept override;
65 * @brief The constructor creates a builder based on ICNNNetwork
67 * @param network constant reference to ICNNNetwork object
69 explicit Network(const ICNNNetwork& network);
71 * @brief The constructor creates a empty builder with network name
73 * @param name Network name
75 explicit Network(const std::string& name);
77 * @brief The constructor creates a builder based on INetwork
79 * @param network constant reference to INetwork object
81 explicit Network(const INetwork& network);
84 * @brief The constructor creates a builder based on ICNNNetwork with custom Context
86 * @param network constant reference to ICNNNetwork object
88 Network(const Context& ieContext, const ICNNNetwork& network);
90 * @brief The constructor creates a empty builder with network name and custom Context
92 * @param name Network name
94 Network(const Context& ieContext, const std::string& name);
96 * @brief The constructor creates a builder based on INetwork with custom Context
98 * @param network constant reference to INetwork object
100 Network(const Context& ieContext, const INetwork& network);
103 * @brief Adds new layer and connects it with previous layers
105 * @param inputs Vector with PortInfo objects from previous layers
106 * @param layer Layer builder for new layer
108 * @return Id of new builder for the current network
110 idx_t addLayer(const std::vector<PortInfo>& inputs, const Layer& layer);
112 * @brief Adds new layer
114 * @param layer Layer builder for new layer
116 * @return Id of new builder for the current network
118 idx_t addLayer(const Layer& layer);
120 * @brief Removes a layer by ID
122 * @param layerId Layer ID
124 void removeLayer(idx_t layerId);
127 * @brief Connects two layers
129 * @param input PortInfo object from previous layer
130 * @param output PortInfo object from next layer
132 void connect(const PortInfo& input, const PortInfo& output);
134 * @brief Removes connection from the network
136 * @param connection Connection
138 void disconnect(const Connection& connection);
141 * @brief Returns vector of layer builders
143 * @return Vector of layer builders
145 std::vector<Layer::Ptr>& getLayers();
147 * @brief Returns constant vector of layer builders
149 * @return constant vector of layer builders
151 const std::vector<Layer::Ptr>& getLayers() const;
154 * @brief Returns a constant smart pointer to a Layer interface.
155 * If the layer is missing, returns nullptr.
156 * @param id Id of the Layer
157 * @return Layer interface smart pointer
159 const ILayer::CPtr getLayer(idx_t id) const noexcept override;
160 Layer::Ptr getLayer(idx_t layerId);
163 * @brief Returns a constant vector of input layers.
164 * @return Vector of input layers
166 const std::vector<ILayer::CPtr> getInputs() const noexcept override;
168 * @brief Returns a vector of input layers.
169 * @return Vector of input layers
171 std::vector<Layer::Ptr> getInputs();
174 * @brief Returns a constant vector of output layers.
175 * @return Vector of output layers
177 const std::vector<ILayer::CPtr> getOutputs() const noexcept override;
179 * @brief Returns a vector of input layers.
180 * @return Vector of input layers
182 std::vector<Layer::Ptr> getOutputs();
185 * @brief Returns a constant vector of connections for specific layer.
186 * If the layer is missing, returns empty vector.
187 * @param layerId layer index
188 * @return Vector of connections
190 const std::vector<Connection> getLayerConnections(idx_t layerId) const noexcept override;
193 * @brief Returns a constant vector of all connections.
194 * @return Vector of connections
196 const std::vector<Connection>& getConnections() const;
199 * @brief Returns a network name.
200 * @return Network name
202 const std::string& getName() const noexcept override;
205 * @brief Returns a network context
206 * @return const reference to Context
208 const Context& getContext() const noexcept override;
210 * @brief Returns a network context
211 * @return reference to Context
213 Context& getContext() noexcept;
216 * @brief Builds and validate network
218 * @return const shared pointer to INetwork
220 const INetwork::CPtr build();
223 * @brief Validates network
229 * @brief The operator builds network
231 * @return const shared pointer to INetwork
233 explicit operator const INetwork::CPtr();
236 std::map<std::string, Parameter> parameters;
240 * @brief This function converts INetwork to ICNNNetwork
242 * @param network constant shared pointer to INetwork object
243 * @return constant shared pointer to ICNNNetwork
245 INFERENCE_ENGINE_API_CPP(const std::shared_ptr<ICNNNetwork>) convertToICNNNetwork(const INetwork::CPtr& network);
247 } // namespace Builder
249 } // namespace InferenceEngine