Node.cpp
Go to the documentation of this file.
2 
4 #include "spdlog/fmt/fmt.h"
5 
6 namespace dai {
7 
8 Node::Node(const std::shared_ptr<PipelineImpl>& p, Id nodeId, std::unique_ptr<Properties> props)
9  : parent(p), id(nodeId), propertiesHolder(std::move(props)), properties(*propertiesHolder) {}
10 
12  return tl::nullopt;
13 }
14 
16  Pipeline pipeline(std::shared_ptr<PipelineImpl>{parent});
17  return pipeline;
18 }
19 
21  Pipeline pipeline(std::shared_ptr<PipelineImpl>{parent});
22  return pipeline;
23 }
24 
26  return properties;
27 }
28 
30  outputId = out.getParent().id;
31  outputName = out.name;
32  outputGroup = out.group;
33  inputId = in.getParent().id;
34  inputName = in.name;
35  inputGroup = in.group;
36 }
37 
39  return (outputId == rhs.outputId && outputName == rhs.outputName && outputGroup == rhs.outputGroup && inputId == rhs.inputId && inputName == rhs.inputName
40  && inputGroup == rhs.inputGroup);
41 }
42 
43 std::string Node::Output::toString() const {
44  if(group == "") {
45  return fmt::format("{}", name);
46  } else {
47  return fmt::format("{}[\"{}\"]", group, name);
48  }
49 }
50 
51 std::string Node::Input::toString() const {
52  if(group == "") {
53  return fmt::format("{}", name);
54  } else {
55  return fmt::format("{}[\"{}\"]", group, name);
56  }
57 }
58 
59 std::vector<Node::Connection> Node::Output::getConnections() {
60  std::vector<Node::Connection> myConnections;
61  auto allConnections = parent.getParentPipeline().getConnections();
62  for(const auto& conn : allConnections) {
63  if(conn.outputId == parent.id && conn.outputName == name && conn.outputGroup == group) {
64  myConnections.push_back(conn);
65  }
66  }
67  return myConnections;
68 }
69 
71  // Check whether current output and 'in' are on same pipeline.
72  // By checking parent of node
73  auto outputPipeline = parent.parent.lock();
74  if(outputPipeline != nullptr) {
75  return (outputPipeline == in.parent.parent.lock());
76  }
77  return false;
78 }
79 
81  return PipelineImpl::canConnect(*this, in);
82 }
83 
84 void Node::Output::link(const Input& in) {
85  // Call link of pipeline
86  parent.getParentPipeline().link(*this, in);
87 }
88 
89 void Node::Output::unlink(const Input& in) {
90  // Call unlink of pipeline parents pipeline
91  parent.getParentPipeline().unlink(*this, in);
92 }
93 
94 void Node::Input::setBlocking(bool newBlocking) {
95  blocking = newBlocking;
96 }
97 
99  if(blocking) {
100  return *blocking;
101  }
102  return defaultBlocking;
103 }
104 
106  queueSize = size;
107 }
108 
110  if(queueSize) {
111  return *queueSize;
112  }
113  return defaultQueueSize;
114 }
115 
116 void Node::Input::setWaitForMessage(bool newWaitForMessage) {
117  waitForMessage = newWaitForMessage;
118 }
119 
121  return waitForMessage.value_or(defaultWaitForMessage);
122 }
123 
124 void Node::Input::setReusePreviousMessage(bool reusePreviousMessage) {
125  waitForMessage = !reusePreviousMessage;
126 }
127 
129  return !waitForMessage.value_or(defaultWaitForMessage);
130 }
131 
133  return assetManager;
134 }
135 
137  return assetManager;
138 }
139 
140 Node::OutputMap::OutputMap(std::string name, Node::Output defaultOutput) : defaultOutput(defaultOutput), name(std::move(name)) {}
141 Node::OutputMap::OutputMap(Node::Output defaultOutput) : defaultOutput(defaultOutput) {}
142 Node::Output& Node::OutputMap::operator[](const std::string& key) {
143  if(count(key) == 0) {
144  // Create using default and rename with group and key
145  Output output(defaultOutput);
146  output.group = name;
147  output.name = key;
148  insert(std::make_pair(key, output));
149  }
150  // otherwise just return reference to existing
151  return at(key);
152 }
153 
154 Node::InputMap::InputMap(std::string name, Node::Input defaultInput) : defaultInput(defaultInput), name(std::move(name)) {}
155 Node::InputMap::InputMap(Node::Input defaultInput) : defaultInput(defaultInput) {}
156 Node::Input& Node::InputMap::operator[](const std::string& key) {
157  if(count(key) == 0) {
158  // Create using default and rename with group and key
159  Input input(defaultInput);
160  input.group = name;
161  input.name = key;
162  insert(std::make_pair(key, input));
163  }
164  // otherwise just return reference to existing
165  return at(key);
166 }
167 
169 std::vector<Node::Output> Node::getOutputs() {
170  std::vector<Node::Output> result;
171  for(auto* x : getOutputRefs()) {
172  result.push_back(*x);
173  }
174  return result;
175 }
176 
178 std::vector<Node::Input> Node::getInputs() {
179  std::vector<Node::Input> result;
180  for(auto* x : getInputRefs()) {
181  result.push_back(*x);
182  }
183  return result;
184 }
185 
187 std::vector<Node::Output*> Node::getOutputRefs() {
188  std::vector<Node::Output*> tmpOutputRefs;
189  // Approximate reservation
190  tmpOutputRefs.reserve(outputRefs.size() + outputMapRefs.size() * 5);
191  // Add outputRefs
192  for(auto& kv : outputRefs) {
193  tmpOutputRefs.push_back(kv.second);
194  }
195  // Add outputs from Maps
196  for(auto& kvMap : outputMapRefs) {
197  auto*& map = kvMap.second;
198  for(auto& kv : *map) {
199  tmpOutputRefs.push_back(&kv.second);
200  }
201  }
202  return tmpOutputRefs;
203 }
204 
206 std::vector<const Node::Output*> Node::getOutputRefs() const {
207  std::vector<const Node::Output*> tmpOutputRefs;
208  // Approximate reservation
209  tmpOutputRefs.reserve(outputRefs.size() + outputMapRefs.size() * 5);
210  // Add outputRefs
211  for(const auto& kv : outputRefs) {
212  tmpOutputRefs.push_back(kv.second);
213  }
214  // Add outputs from Maps
215  for(const auto& kvMap : outputMapRefs) {
216  const auto* const& map = kvMap.second;
217  for(const auto& kv : *map) {
218  tmpOutputRefs.push_back(&kv.second);
219  }
220  }
221  return tmpOutputRefs;
222 }
224 std::vector<Node::Input*> Node::getInputRefs() {
225  std::vector<Node::Input*> tmpInputRefs;
226  // Approximate reservation
227  tmpInputRefs.reserve(inputRefs.size() + inputMapRefs.size() * 5);
228  // Add inputRefs
229  for(auto& kv : inputRefs) {
230  tmpInputRefs.push_back(kv.second);
231  }
232  // Add inputs from Maps
233  for(auto& kvMap : inputMapRefs) {
234  auto*& map = kvMap.second;
235  for(auto& kv : *map) {
236  tmpInputRefs.push_back(&kv.second);
237  }
238  }
239  return tmpInputRefs;
240 }
241 
243 std::vector<const Node::Input*> Node::getInputRefs() const {
244  std::vector<const Node::Input*> tmpInputRefs;
245  // Approximate reservation
246  tmpInputRefs.reserve(inputRefs.size() + inputMapRefs.size() * 5);
247  // Add inputRefs
248  for(const auto& kv : inputRefs) {
249  tmpInputRefs.push_back(kv.second);
250  }
251  // Add inputs from Maps
252  for(const auto& kvMap : inputMapRefs) {
253  const auto* const& map = kvMap.second;
254  for(const auto& kv : *map) {
255  tmpInputRefs.push_back(&kv.second);
256  }
257  }
258  return tmpInputRefs;
259 }
260 
261 void Node::setOutputRefs(std::initializer_list<Node::Output*> l) {
262  for(auto& outRef : l) {
263  outputRefs[outRef->name] = outRef;
264  }
265 }
267  outputRefs[outRef->name] = outRef;
268 }
269 void Node::setInputRefs(std::initializer_list<Node::Input*> l) {
270  for(auto& inRef : l) {
271  inputRefs[inRef->name] = inRef;
272  }
273 }
275  inputRefs[inRef->name] = inRef;
276 }
277 void Node::setOutputMapRefs(std::initializer_list<Node::OutputMap*> l) {
278  for(auto& outMapRef : l) {
279  outputMapRefs[outMapRef->name] = outMapRef;
280  }
281 }
283  outputMapRefs[outMapRef->name] = outMapRef;
284 }
285 void Node::setInputMapRefs(std::initializer_list<Node::InputMap*> l) {
286  for(auto& inMapRef : l) {
287  inputMapRefs[inMapRef->name] = inMapRef;
288  }
289 }
291  inputMapRefs[inMapRef->name] = inMapRef;
292 }
293 
294 } // namespace dai
dai::Node::OutputMap::name
std::string name
Definition: Node.hpp:140
dai::Node::getParentPipeline
Pipeline getParentPipeline()
Definition: Node.cpp:15
dai::Node::id
const Id id
Id of node.
Definition: Node.hpp:288
dai::Node::Input::getBlocking
bool getBlocking() const
Definition: Node.cpp:98
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
Pipeline.hpp
dai::Node::Id
std::int64_t Id
Node identificator. Unique for every node on a single Pipeline.
Definition: Node.hpp:35
dai::Node::getProperties
virtual Properties & getProperties()
Definition: Node.cpp:25
dai::Node::Input::getReusePreviousMessage
bool getReusePreviousMessage() const
Definition: Node.cpp:128
dai::Node::Output::isSamePipeline
bool isSamePipeline(const Input &in)
Definition: Node.cpp:70
dai::Node::setInputRefs
void setInputRefs(std::initializer_list< Input * > l)
dai::utility::map
static std::unordered_map< std::string, std::string > map
Definition: Environment.cpp:16
dai::Node::Output::getParent
Node & getParent()
Definition: Node.hpp:82
dai::Node::Input::group
std::string group
Definition: Node.hpp:152
dai::Node::setOutputMapRefs
void setOutputMapRefs(std::initializer_list< OutputMap * > l)
dai::Node::Connection::inputGroup
std::string inputGroup
Definition: Node.hpp:278
dai::Node::Input::setWaitForMessage
void setWaitForMessage(bool waitForMessage)
Definition: Node.cpp:116
dai::Node::assetManager
AssetManager assetManager
Definition: Node.hpp:291
dai::Node::Output
Definition: Node.hpp:67
tl::nullopt
static constexpr nullopt_t nullopt
Represents an empty optional.
Definition: 3rdparty/tl/optional.hpp:663
dai::PipelineImpl::canConnect
static bool canConnect(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:370
dai::AssetManager
AssetManager can store assets and serialize.
Definition: AssetManager.hpp:33
dai::Node::InputMap::name
std::string name
Definition: Node.hpp:262
dai::Node::setInputMapRefs
void setInputMapRefs(std::initializer_list< InputMap * > l)
dai::Node::properties
Properties & properties
Definition: Node.hpp:299
dai::Node::InputMap::InputMap
InputMap(Input defaultInput)
Definition: Node.cpp:155
dai::Node::Output::canConnect
bool canConnect(const Input &in)
Definition: Node.cpp:80
dai::Node::Output::unlink
void unlink(const Input &in)
Definition: Node.cpp:89
dai::Node::OutputMap::operator[]
Output & operator[](const std::string &key)
Create or modify an input.
Definition: Node.cpp:142
dai::Node::Output::name
std::string name
Definition: Node.hpp:73
dai::Node::Input::setReusePreviousMessage
void setReusePreviousMessage(bool reusePreviousMessage)
Definition: Node.cpp:124
dai::Node::getInputRefs
std::vector< Input * > getInputRefs()
Retrieves reference to node inputs.
Definition: Node.cpp:224
dai::Node::getAssetManager
const AssetManager & getAssetManager() const
Get node AssetManager as a const reference.
Definition: Node.cpp:132
DAI_SPAN_NAMESPACE_NAME::detail::size
constexpr auto size(const C &c) -> decltype(c.size())
Definition: span.hpp:167
dai::Node::getOutputs
std::vector< Output > getOutputs()
Retrieves all nodes outputs.
Definition: Node.cpp:169
dai::Node::Input::getParent
Node & getParent()
Definition: Node.hpp:194
dai::Node::OutputMap::OutputMap
OutputMap(std::string name, Output defaultOutput)
Definition: Node.cpp:140
dai::Node::Output::group
std::string group
Definition: Node.hpp:72
dai::Node::Input
Definition: Node.hpp:147
dai::Node::Connection
Connection between an Input and Output.
Definition: Node.hpp:270
dai::Node::Output::getConnections
std::vector< Connection > getConnections()
Definition: Node.cpp:59
nanorpc::core::type::id
std::uint64_t id
Definition: type.h:27
dai::Node::Output::toString
std::string toString() const
Output to string representation.
Definition: Node.cpp:43
dai::Node::InputMap::operator[]
Input & operator[](const std::string &key)
Create or modify an input.
Definition: Node.cpp:156
dai::Node::Node
Node(const std::shared_ptr< PipelineImpl > &p, Id nodeId, std::unique_ptr< Properties > props)
Constructs Node.
Definition: Node.cpp:8
dai::Node::Connection::outputName
std::string outputName
Definition: Node.hpp:274
dai::Node::getOutputRefs
std::vector< Output * > getOutputRefs()
Retrieves reference to node outputs.
Definition: Node.cpp:187
dai::Node::Input::parent
Node & parent
Definition: Node.hpp:148
dai::Properties
Base Properties structure.
Definition: Properties.hpp:8
dai::Node::outputRefs
std::unordered_map< std::string, Output * > outputRefs
Definition: Node.hpp:41
dai::Node::Input::toString
std::string toString() const
Input to string representation.
Definition: Node.cpp:51
dai::Node::Connection::outputId
Id outputId
Definition: Node.hpp:273
dai::Node::Input::setBlocking
void setBlocking(bool blocking)
Definition: Node.cpp:94
dai::Node::setOutputRefs
void setOutputRefs(std::initializer_list< Output * > l)
dai::Node::getRequiredOpenVINOVersion
virtual tl::optional< OpenVINO::Version > getRequiredOpenVINOVersion()
Definition: Node.cpp:11
dai::Node::Connection::operator==
bool operator==(const Connection &rhs) const
Definition: Node.cpp:38
dai::Node::outputMapRefs
std::unordered_map< std::string, OutputMap * > outputMapRefs
Definition: Node.hpp:47
tl::optional< OpenVINO::Version >
std
Definition: Node.hpp:366
dai::Node::inputMapRefs
std::unordered_map< std::string, InputMap * > inputMapRefs
Definition: Node.hpp:48
dai::Node::parent
std::weak_ptr< PipelineImpl > parent
Definition: Node.hpp:284
dai::Node::Connection::outputGroup
std::string outputGroup
Definition: Node.hpp:275
dai::Node::OutputMap
Definition: Node.hpp:136
dai::Node::Connection::Connection
Connection(Output out, Input in)
Definition: Node.cpp:29
dai::Node::Output::link
void link(const Input &in)
Definition: Node.cpp:84
dai::Node::Connection::inputId
Id inputId
Definition: Node.hpp:276
dai::Node::InputMap
Definition: Node.hpp:258
dai::Node::inputRefs
std::unordered_map< std::string, Input * > inputRefs
Definition: Node.hpp:45
dai::Node::Input::setQueueSize
void setQueueSize(int size)
Definition: Node.cpp:105
dai
Definition: CameraExposureOffset.hpp:6
Node.hpp
dai::Node::getInputs
std::vector< Input > getInputs()
Retrieves all nodes inputs.
Definition: Node.cpp:178
dai::Node::Input::getQueueSize
int getQueueSize() const
Definition: Node.cpp:109
dai::Node::Input::getWaitForMessage
bool getWaitForMessage() const
Definition: Node.cpp:120
dai::Node::Connection::inputName
std::string inputName
Definition: Node.hpp:277
dai::Node::Input::name
std::string name
Definition: Node.hpp:153


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19