IDS peak genericC++ v1.10.0
Loading...
Searching...
No Matches
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
23namespace peak
24{
25namespace core
26{
27namespace nodes
28{
29
34class CategoryNode : public Node
35{
36public:
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;
43
53 std::vector<std::shared_ptr<Node>> SubNodes() const;
54
55private:
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 */
66namespace peak
67{
68namespace core
69{
70namespace 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
82inline 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 */
Represents a GenAPI category node.
Definition peak_category_node.hpp:35
CategoryNode(const CategoryNode &other)=delete
std::vector< std::shared_ptr< Node > > SubNodes() const
Returns the sub nodes.
Definition peak_category_node.hpp:82
CategoryNode(CategoryNode &&other)=delete
CategoryNode & operator=(CategoryNode &&other)=delete
CategoryNode & operator=(const CategoryNode &other)=delete
~CategoryNode() override=default
Represents a GenAPI node.
Definition peak_node.hpp:122
std::shared_ptr< NodeMap > ParentNodeMap() const
Returns the parent node map.
Definition peak_node.hpp:933
std::string GetNodeName(PEAK_NODE_HANDLE nodeHandle)
Definition peak_node.hpp:620
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_dynamic_loader.h:33
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:429
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.
struct PEAK_CATEGORY_NODE * PEAK_CATEGORY_NODE_HANDLE
Definition peak_backend.h:457
PEAK_C_API PEAK_CategoryNode_ToNode(PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given category node to a node.
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:16