IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_category_node.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
10
12#include <peak/dll_interface/peak_dll_interface_util.hpp>
14
15#include <type_traits>
16#include <cstddef>
17#include <memory>
18#include <vector>
19
20
21namespace peak
22{
23namespace core
24{
25namespace nodes
26{
27
33class CategoryNode : public Node
34{
35public:
36 static constexpr auto NodeType = nodes::NodeType::Category;
37 using NodeDataType = void;
38 using NodeHasRange = std::false_type;
39
40 using NodeVector = std::vector<std::shared_ptr<Node>>;
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
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
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 NodeVector 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:36
std::false_type NodeHasRange
Definition peak_category_node.hpp:38
PEAK_COMMON_NO_DISCARD NodeVector SubNodes() const
Returns the sub nodes.
Definition peak_category_node.hpp:87
CategoryNode(CategoryNode &&other)=delete
std::vector< std::shared_ptr< Node > > NodeVector
Definition peak_category_node.hpp:40
CategoryNode & operator=(CategoryNode &&other)=delete
CategoryNode & operator=(const CategoryNode &other)=delete
~CategoryNode() override=default
void NodeDataType
Definition peak_category_node.hpp:37
PEAK_COMMON_NO_DISCARD std::shared_ptr< NodeMap > ParentNodeMap() const
Returns the parent node map.
Definition peak_node.hpp:969
@ Category
Definition peak_node.hpp:95
The "nodes" namespace contains all GenAPI node types.
Definition peak_utils.hpp:31
std::string GetNodeName(PEAK_NODE_HANDLE nodeHandle)
Definition peak_node.hpp:657
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:32
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_buffer.hpp:29
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:427
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:455
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_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13