IDS peak genericC++  v1.6.1
peak_category_node.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
13 
15 #include <peak/dll_interface/peak_dll_interface_util.hpp>
17 
18 #include <cstddef>
19 #include <memory>
20 #include <vector>
21 
22 
23 namespace peak
24 {
25 namespace core
26 {
27 namespace nodes
28 {
29 
34 class CategoryNode : public Node
35 {
36 public:
37  CategoryNode() = delete;
38  ~CategoryNode() override = default;
39  CategoryNode(const CategoryNode& other) = delete;
40  CategoryNode& operator=(const CategoryNode& other) = delete;
41  CategoryNode(CategoryNode&& other) = delete;
42  CategoryNode& operator=(CategoryNode&& other) = delete;
43 
53  std::vector<std::shared_ptr<Node>> SubNodes() const;
54 
55 private:
56  friend ClassCreator<CategoryNode>;
57  CategoryNode(PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap);
58  PEAK_CATEGORY_NODE_HANDLE m_backendHandle;
59 };
60 
61 } /* namespace nodes */
62 } /* namespace core */
63 } /* namespace peak */
64 
65 /* Implementation */
66 namespace peak
67 {
68 namespace core
69 {
70 namespace nodes
71 {
72 
74  PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap)
75  : Node(QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](PEAK_NODE_HANDLE* nodeHandle) {
76  return PEAK_C_ABI_PREFIX PEAK_CategoryNode_ToNode(categoryNodeHandle, nodeHandle);
77  }),
78  parentNodeMap)
79  , m_backendHandle(categoryNodeHandle)
80 {}
81 
82 inline std::vector<std::shared_ptr<Node>> CategoryNode::SubNodes() const
83 {
84  auto numSubNodes = QueryNumericFromCInterfaceFunction<size_t>([&](size_t* _numSubNodes) {
85  return PEAK_C_ABI_PREFIX PEAK_CategoryNode_GetNumSubNodes(m_backendHandle, _numSubNodes);
86  });
87 
88  std::vector<std::shared_ptr<Node>> subNodes;
89  for (size_t x = 0; x < numSubNodes; ++x)
90  {
91  auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>(
92  [&](PEAK_NODE_HANDLE* _nodeHandle) {
93  return PEAK_C_ABI_PREFIX PEAK_CategoryNode_GetSubNode(m_backendHandle, x, _nodeHandle);
94  });
95 
96  auto nodeName = GetNodeName(nodeHandle);
97 
98  subNodes.emplace_back(ParentNodeMap()->FindNode(nodeName));
99  }
100 
101  return subNodes;
102 }
103 
104 } /* namespace nodes */
105 } /* namespace core */
106 } /* namespace peak */
PEAK_C_API PEAK_CategoryNode_GetSubNode(PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, size_t index, PEAK_NODE_HANDLE *nodeHandle)
Asks the given category node for the sub node with the given index.
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition: peak_dynamic_loader.h:32
struct PEAK_CATEGORY_NODE * PEAK_CATEGORY_NODE_HANDLE
Definition: peak_backend.h:437
CategoryNode & operator=(const CategoryNode &other)=delete
PEAK_C_API PEAK_CategoryNode_GetNumSubNodes(PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, size_t *numSubNodes)
Asks the given category node for its number of sub nodes.
struct PEAK_NODE * PEAK_NODE_HANDLE
Definition: peak_backend.h:409
~CategoryNode() override=default
std::shared_ptr< NodeMap > ParentNodeMap() const
Returns the parent node map.
Definition: peak_node.hpp:839
std::vector< std::shared_ptr< Node > > SubNodes() const
Returns the sub nodes.
Definition: peak_category_node.hpp:82
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
PEAK_C_API PEAK_CategoryNode_ToNode(PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given category node to a node.
Represents a GenAPI node.
Definition: peak_node.hpp:121
std::string GetNodeName(PEAK_NODE_HANDLE nodeHandle)
Definition: peak_node.hpp:552
Represents a GenAPI category node.
Definition: peak_category_node.hpp:34