nndeploy C++ API  0.2.0
nndeploy C++ API
util.h
Go to the documentation of this file.
1 #ifndef _NNDEPLOY_DAG_UTIL_H_
2 #define _NNDEPLOY_DAG_UTIL_H_
3 
4 #include "nndeploy/base/common.h"
6 #include "nndeploy/base/log.h"
7 #include "nndeploy/base/macro.h"
8 #include "nndeploy/base/object.h"
9 #include "nndeploy/base/status.h"
10 #include "nndeploy/base/string.h"
11 #include "nndeploy/dag/edge.h"
12 #include "nndeploy/dag/node.h"
13 
14 namespace nndeploy {
15 namespace dag {
16 
18  public:
21  std::string name_;
22  std::vector<NodeWrapper *> predecessors_;
23  std::vector<NodeWrapper *> successors_;
25 };
26 
28  public:
31  std::string name_;
32  std::vector<NodeWrapper *> producers_;
33  std::vector<NodeWrapper *> consumers_;
34 };
35 
37  std::vector<EdgeWrapper *> &edge_repository, const std::string &edge_name);
39  std::vector<EdgeWrapper *> &edge_repository, const std::string &edge_name);
41  std::vector<EdgeWrapper *> &edge_repository, Edge *edge);
42 extern NNDEPLOY_CC_API std::vector<EdgeWrapper *> findStartEdges(
43  std::vector<EdgeWrapper *> &edge_repository);
44 extern NNDEPLOY_CC_API std::vector<EdgeWrapper *> findEndEdges(
45  std::vector<EdgeWrapper *> &edge_repository);
46 
48  std::vector<NodeWrapper *> &node_repository, const std::string &node_name);
50  std::vector<NodeWrapper *> &node_repository, const std::string &node_name);
52  std::vector<NodeWrapper *> &node_repository, Node *node);
53 extern NNDEPLOY_CC_API std::vector<NodeWrapper *> findStartNodes(
54  std::vector<NodeWrapper *> &node_repository);
55 extern NNDEPLOY_CC_API std::vector<NodeWrapper *> findEndNodes(
56  std::vector<NodeWrapper *> &node_repository);
57 
59  std::vector<NodeWrapper *> &node_repository, base::NodeColorType color);
60 
62  std::vector<EdgeWrapper *> &edge_repository,
63  std::vector<NodeWrapper *> &node_repository,
64  std::vector<Edge *> &graph_inputs, std::vector<Edge *> &graph_outputs,
65  const std::string &name, std::ostream &oss);
66 
67 extern NNDEPLOY_CC_API std::vector<NodeWrapper *> checkUnuseNode(
68  std::vector<NodeWrapper *> &node_repository);
69 extern NNDEPLOY_CC_API std::vector<EdgeWrapper *> checkUnuseEdge(
70  std::vector<NodeWrapper *> &node_repository,
71  std::vector<EdgeWrapper *> &edge_repository);
72 
74  std::vector<NodeWrapper *> &node_repository,
75  std::vector<NodeWrapper *> &topo_sort_node);
76 
78  std::vector<NodeWrapper *> &node_repository,
79  std::vector<NodeWrapper *> &topo_sort_node);
80 
82  std::vector<NodeWrapper *> &node_repository,
83  base::TopoSortType topo_sort_type,
84  std::vector<NodeWrapper *> &topo_sort_node);
85 
86 extern NNDEPLOY_CC_API bool checkEdge(const std::vector<Edge *> &src_edges,
87  const std::vector<Edge *> &dst_edges);
88 
95 template <typename T>
96 void insertUnique(std::vector<T> &vec, const T &val) {
97  if (std::find(vec.begin(), vec.end(), val) == vec.end()) {
98  vec.emplace_back(val);
99  }
100 }
101 
102 extern NNDEPLOY_CC_API void findConsumerNode(EdgeWrapper *edge_wrapper,
103  std::vector<Node *> &consumers);
104 
105 extern NNDEPLOY_CC_API void findProducerNode(EdgeWrapper *edge_wrapper,
106  std::vector<Node *> &producers);
107 
108 // base::Status getValueFromParamVec(const std::vector<base::Param *>
109 // &param_vec,
110 // const std::string &key, base::Value
111 // &value);
112 
114  std::map<std::string, std::map<std::string, std::string>> node_value_map,
115  const std::string &json_str);
117  std::map<std::string, std::map<std::string, std::string>> node_value_map,
118  rapidjson::Value &json,
119  rapidjson::Document::AllocatorType &allocator);
120 
121 } // namespace dag
122 } // namespace nndeploy
123 
124 #endif /* _NNDEPLOY_DAG_UTIL_H_ */
std::vector< NodeWrapper * > producers_
Definition: util.h:32
std::vector< NodeWrapper * > consumers_
Definition: util.h:33
std::string name_
Definition: util.h:31
Edge class in DAG graph for connecting nodes and transferring data.
Definition: edge.h:35
std::vector< NodeWrapper * > predecessors_
Definition: util.h:22
std::string name_
Definition: util.h:21
std::vector< NodeWrapper * > successors_
Definition: util.h:23
Node base class.
Definition: node.h:171
#define NNDEPLOY_CC_API
api
Definition: macro.h:29
@ kNodeColorWhite
Definition: common.h:372
base::Status setColor(std::vector< NodeWrapper * > &node_repository, base::NodeColorType color)
base::Status topoSortBFS(std::vector< NodeWrapper * > &node_repository, std::vector< NodeWrapper * > &topo_sort_node)
std::vector< EdgeWrapper * > findStartEdges(std::vector< EdgeWrapper * > &edge_repository)
std::string replaceGraphJsonStr(std::map< std::string, std::map< std::string, std::string >> node_value_map, const std::string &json_str)
Node * getNode(std::vector< NodeWrapper * > &node_repository, const std::string &node_name)
std::vector< NodeWrapper * > findEndNodes(std::vector< NodeWrapper * > &node_repository)
base::Status topoSort(std::vector< NodeWrapper * > &node_repository, base::TopoSortType topo_sort_type, std::vector< NodeWrapper * > &topo_sort_node)
std::vector< NodeWrapper * > findStartNodes(std::vector< NodeWrapper * > &node_repository)
void insertUnique(std::vector< T > &vec, const T &val)
对vector插入不在vector中的元素,即类似集合的作用
Definition: util.h:96
void replaceGraphJsonObj(std::map< std::string, std::map< std::string, std::string >> node_value_map, rapidjson::Value &json, rapidjson::Document::AllocatorType &allocator)
std::vector< NodeWrapper * > checkUnuseNode(std::vector< NodeWrapper * > &node_repository)
EdgeWrapper * findEdgeWrapper(std::vector< EdgeWrapper * > &edge_repository, const std::string &edge_name)
bool checkEdge(const std::vector< Edge * > &src_edges, const std::vector< Edge * > &dst_edges)
base::Status topoSortDFS(std::vector< NodeWrapper * > &node_repository, std::vector< NodeWrapper * > &topo_sort_node)
void findProducerNode(EdgeWrapper *edge_wrapper, std::vector< Node * > &producers)
NodeWrapper * findNodeWrapper(std::vector< NodeWrapper * > &node_repository, const std::string &node_name)
void findConsumerNode(EdgeWrapper *edge_wrapper, std::vector< Node * > &consumers)
std::vector< EdgeWrapper * > checkUnuseEdge(std::vector< NodeWrapper * > &node_repository, std::vector< EdgeWrapper * > &edge_repository)
Edge * getEdge(std::vector< EdgeWrapper * > &edge_repository, const std::string &edge_name)
base::Status dumpDag(std::vector< EdgeWrapper * > &edge_repository, std::vector< NodeWrapper * > &node_repository, std::vector< Edge * > &graph_inputs, std::vector< Edge * > &graph_outputs, const std::string &name, std::ostream &oss)
std::vector< EdgeWrapper * > findEndEdges(std::vector< EdgeWrapper * > &edge_repository)