IDS peak genericC++ v1.16.0
Loading...
Searching...
No Matches
peak_command_node.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
13
16#include <peak/dll_interface/peak_dll_interface_util.hpp>
19#include <type_traits>
20
21
22namespace peak
23{
24namespace core
25{
26namespace nodes
27{
28
34class CommandNode : public Node
35{
36public:
37 static constexpr auto NodeType = nodes::NodeType::Command;
38 using NodeDataType = void;
39 using NodeHasRange = std::false_type;
40
41 CommandNode() = delete;
42 ~CommandNode() override = default;
43 CommandNode(const CommandNode& other) = delete;
44 CommandNode& operator=(const CommandNode& other) = delete;
45 CommandNode(CommandNode&& other) = delete;
46 CommandNode& operator=(CommandNode&& other) = delete;
47
59 bool IsDone() const;
60
69 void Execute();
70
81 void WaitUntilDone(Timeout waitTimeout_ms = 500);
82
83
84private:
85 friend ClassCreator<CommandNode>;
86 CommandNode(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap);
87 PEAK_COMMAND_NODE_HANDLE m_backendHandle;
88};
89
90} /* namespace nodes */
91} /* namespace core */
92} /* namespace peak */
93
94/* Implementation */
95namespace peak
96{
97namespace core
98{
99namespace nodes
100{
101
103 PEAK_COMMAND_NODE_HANDLE commandNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap)
104 : Node(QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](PEAK_NODE_HANDLE* nodeHandle) {
105 return PEAK_C_ABI_PREFIX PEAK_CommandNode_ToNode(commandNodeHandle, nodeHandle);
106 }),
107 parentNodeMap)
108 , m_backendHandle(commandNodeHandle)
109{}
110
111inline bool CommandNode::IsDone() const
112{
113 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isDone) {
114 return PEAK_C_ABI_PREFIX PEAK_CommandNode_GetIsDone(m_backendHandle, isDone);
115 }) > 0;
116}
118{
119 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_Execute(m_backendHandle); });
120}
121
122inline void CommandNode::WaitUntilDone(Timeout waitTimeout_ms /*= 500*/)
123{
124 CallAndCheckCInterfaceFunction(
125 [&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_WaitUntilDone(m_backendHandle, waitTimeout_ms); });
126}
127
128} /* namespace nodes */
129} /* namespace core */
130} /* namespace peak */
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:32
CommandNode & operator=(CommandNode &&other)=delete
std::false_type NodeHasRange
Definition peak_command_node.hpp:39
static constexpr auto NodeType
Definition peak_command_node.hpp:37
void NodeDataType
Definition peak_command_node.hpp:38
void WaitUntilDone(Timeout waitTimeout_ms=500)
(Blocking) Wait for the executed command to be finished, i.e. until IsDone() is true.
Definition peak_command_node.hpp:122
CommandNode(const CommandNode &other)=delete
CommandNode(CommandNode &&other)=delete
~CommandNode() override=default
bool IsDone() const
Checks whether the command is done.
Definition peak_command_node.hpp:111
void Execute()
Executes the command associated with this node.
Definition peak_command_node.hpp:117
CommandNode & operator=(const CommandNode &other)=delete
@ Command
Definition peak_node.hpp:94
The "nodes" namespace contains all GenAPI node types.
Definition peak_boolean_node.hpp:26
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:35
PEAK_C_API PEAK_CommandNode_ToNode(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given command node to a node.
struct PEAK_COMMAND_NODE * PEAK_COMMAND_NODE_HANDLE
Definition peak_backend.h:441
struct PEAK_NODE * PEAK_NODE_HANDLE
Definition peak_backend.h:429
PEAK_C_API PEAK_CommandNode_Execute(PEAK_COMMAND_NODE_HANDLE commandNodeHandle)
Tells the given command node to execute its associated command.
int8_t PEAK_BOOL8
Definition peak_backend.h:43
PEAK_C_API PEAK_CommandNode_WaitUntilDone(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, uint64_t waitTimeout_ms)
Waits (blocking) until the previously executed command is finished, i.e. PEAK_CommandNode_GetIsDone()...
PEAK_C_API PEAK_CommandNode_GetIsDone(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, PEAK_BOOL8 *isDone)
Asks the given command node whether its associated command is done.
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:16