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