31 : _id(id), _name(std::move(
name)), _nodes(), _edges(), _tensors(), _tagged_nodes(), _mtx()
37 if (nid >= _nodes.size())
42 std::unique_ptr<INode> &
node = _nodes[nid];
47 for (
auto &input_eid :
node->_input_edges)
54 for (
auto &output_eid : output_edges_copy)
60 std::vector<NodeID> &tnodes = _tagged_nodes.at(
node->
type());
61 tnodes.erase(std::remove(tnodes.begin(), tnodes.end(), nid), tnodes.end());
75 (source_idx >= _nodes[source]->num_outputs()));
77 (sink_idx >= _nodes[sink]->num_inputs()));
80 std::unique_ptr<INode> &source_node = _nodes[source];
81 std::unique_ptr<INode> &sink_node = _nodes[sink];
84 Edge *sink_node_edge = sink_node->input_edge(sink_idx);
85 if ((sink_node_edge !=
nullptr) && (sink_node_edge->
producer_id() == source) &&
89 return sink_node_edge->
id();
93 TensorID tid = source_node->output_id(source_idx);
96 tid = create_tensor();
98 std::unique_ptr<Tensor> &
tensor = _tensors[tid];
101 EdgeID eid = _edges.size();
103 std::make_unique<Edge>(eid, source_node.get(), source_idx, sink_node.get(), sink_idx,
tensor.get());
104 _edges.push_back(std::move(connection));
107 source_node->_output_edges.insert(eid);
108 sink_node->_input_edges[sink_idx] = eid;
111 source_node->_outputs[source_idx] = tid;
117 sink_node->forward_descriptors();
124 if (eid >= _edges.size())
129 std::unique_ptr<Edge> &
edge = _edges[eid];
162 auto tensor = std::make_unique<Tensor>(tid, desc);
163 _tensors.push_back(std::move(
tensor));
180 return _tagged_nodes[
type];
188 const std::vector<std::unique_ptr<INode>> &
Graph::nodes()
const
203 const std::vector<std::unique_ptr<Tensor>> &
Graph::tensors()
const
210 return (
id >= _nodes.size()) ? nullptr : _nodes[
id].get();
215 return (
id >= _nodes.size()) ? nullptr : _nodes[
id].get();
220 return (
id >= _edges.size()) ? nullptr : _edges[
id].get();
225 return (
id >= _edges.size()) ? nullptr : _edges[
id].get();
230 return (
id >= _tensors.size()) ? nullptr : _tensors[
id].get();
235 return (
id >= _tensors.size()) ? nullptr : _tensors[
id].get();