IDS peak genericC++ v1.8.0
Loading...
Searching...
No Matches
peak_command_node.hpp
Go to the documentation of this file.
1
11#pragma once
12
13
16#include <peak/dll_interface/peak_dll_interface_util.hpp>
19
20
21namespace peak
22{
23namespace core
24{
25namespace nodes
26{
27
32class CommandNode : public Node
33{
34public:
35 CommandNode() = delete;
36 ~CommandNode() override = default;
37 CommandNode(const CommandNode& other) = delete;
38 CommandNode& operator=(const CommandNode& other) = delete;
39 CommandNode(CommandNode&& other) = delete;
40 CommandNode& operator=(CommandNode&& other) = delete;
41
53 bool IsDone() const;
54
63 void Execute();
64
75 void WaitUntilDone(Timeout waitTimeout_ms = 500);
76
77
78private:
79 friend ClassCreator<CommandNode>;
80 CommandNode(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap);
81 PEAK_COMMAND_NODE_HANDLE m_backendHandle;
82};
83
84} /* namespace nodes */
85} /* namespace core */
86} /* namespace peak */
87
88/* Implementation */
89namespace peak
90{
91namespace core
92{
93namespace nodes
94{
95
97 PEAK_COMMAND_NODE_HANDLE commandNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap)
98 : Node(QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](PEAK_NODE_HANDLE* nodeHandle) {
99 return PEAK_C_ABI_PREFIX PEAK_CommandNode_ToNode(commandNodeHandle, nodeHandle);
100 }),
101 parentNodeMap)
102 , m_backendHandle(commandNodeHandle)
103{}
104
105inline bool CommandNode::IsDone() const
106{
107 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isDone) {
108 return PEAK_C_ABI_PREFIX PEAK_CommandNode_GetIsDone(m_backendHandle, isDone);
109 }) > 0;
110}
112{
113 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_Execute(m_backendHandle); });
114}
115
116inline void CommandNode::WaitUntilDone(Timeout waitTimeout_ms /*= 500*/)
117{
118 CallAndCheckCInterfaceFunction(
119 [&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_WaitUntilDone(m_backendHandle, waitTimeout_ms); });
120}
121
122} /* namespace nodes */
123} /* namespace core */
124} /* namespace peak */
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:31
Represents a GenAPI command node.
Definition peak_command_node.hpp:33
CommandNode & operator=(CommandNode &&other)=delete
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:116
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:105
void Execute()
Executes the command associated with this node.
Definition peak_command_node.hpp:111
CommandNode & operator=(const CommandNode &other)=delete
Represents a GenAPI node.
Definition peak_node.hpp:122
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_dynamic_loader.h:32
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:424
struct PEAK_NODE * PEAK_NODE_HANDLE
Definition peak_backend.h:412
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:26
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