IDS peak genericC++ v1.11.0
Loading...
Searching...
No Matches
peak_category_node.hpp
Go to the documentation of this file.
1
10
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#include <type_traits>
22
23
24namespace peak
25{
26namespace core
27{
28namespace nodes
29{
30
35class CategoryNode : public Node
36{
37public:
38 static constexpr auto NodeType = nodes::NodeType::Category;
39 using NodeDataType = void;
40 using NodeHasRange = std::false_type;
41
42 CategoryNode() = delete;
43 ~CategoryNode() override = default;
44 CategoryNode(const CategoryNode& other) = delete;
45 CategoryNode& operator=(const CategoryNode& other) = delete;
46 CategoryNode(CategoryNode&& other) = delete;
48
58 std::vector<std::shared_ptr<Node>> SubNodes() const;
59
60private:
61 friend ClassCreator<CategoryNode>;
62 CategoryNode(PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap);
63 PEAK_CATEGORY_NODE_HANDLE m_backendHandle;
64};
65
66} /* namespace nodes */
67} /* namespace core */
68} /* namespace peak */
69
70/* Implementation */
71namespace peak
72{
73namespace core
74{
75namespace nodes
76{
77
79 PEAK_CATEGORY_NODE_HANDLE categoryNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap)
80 : Node(QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](PEAK_NODE_HANDLE* nodeHandle) {
81 return PEAK_C_ABI_PREFIX PEAK_CategoryNode_ToNode(categoryNodeHandle, nodeHandle);
82 }),
83 parentNodeMap)
84 , m_backendHandle(categoryNodeHandle)
85{}
86
87inline std::vector<std::shared_ptr<Node> > CategoryNode::SubNodes() const
88{
89 auto numSubNodes = QueryNumericFromCInterfaceFunction<size_t>([&](size_t* _numSubNodes) {
90 return PEAK_C_ABI_PREFIX PEAK_CategoryNode_GetNumSubNodes(m_backendHandle, _numSubNodes);
91 });
92
93 std::vector<std::shared_ptr<Node>> subNodes;
94 for (size_t x = 0; x < numSubNodes; ++x)
95 {
96 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>(
97 [&](PEAK_NODE_HANDLE* _nodeHandle) {
98 return PEAK_C_ABI_PREFIX PEAK_CategoryNode_GetSubNode(m_backendHandle, x, _nodeHandle);
99 });
100
101 auto nodeName = GetNodeName(nodeHandle);
102
103 subNodes.emplace_back(ParentNodeMap()->FindNode(nodeName));
104 }
105
106 return subNodes;
107}
108
109} /* namespace nodes */
110} /* namespace core */
111} /* namespace peak */
CategoryNode(const CategoryNode &other)=delete
static constexpr auto NodeType
Definition peak_category_node.hpp:38
std::false_type NodeHasRange
Definition peak_category_node.hpp:40
std::vector< std::shared_ptr< Node > > SubNodes() const
Returns the sub nodes.
Definition peak_category_node.hpp:87
CategoryNode(CategoryNode &&other)=delete
CategoryNode & operator=(CategoryNode &&other)=delete
CategoryNode & operator=(const CategoryNode &other)=delete
~CategoryNode() override=default
void NodeDataType
Definition peak_category_node.hpp:39
std::shared_ptr< NodeMap > ParentNodeMap() const
Returns the parent node map.
Definition peak_node.hpp:933
The "nodes" namespace contains all GenAPI node types.
Definition peak_boolean_node.hpp:26
@ Category
Definition peak_node.hpp:94
std::string GetNodeName(PEAK_NODE_HANDLE nodeHandle)
Definition peak_node.hpp:620
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:31
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