IDS peak genericC++  v1.7.0
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 
21 namespace peak
22 {
23 namespace core
24 {
25 namespace nodes
26 {
27 
32 class CommandNode : public Node
33 {
34 public:
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 
78 private:
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 */
89 namespace peak
90 {
91 namespace core
92 {
93 namespace 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 
105 inline 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 }
111 inline void CommandNode::Execute()
112 {
113  CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_Execute(m_backendHandle); });
114 }
115 
116 inline 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 */
CommandNode & operator=(const CommandNode &other)=delete
int8_t PEAK_BOOL8
Definition: peak_backend.h:26
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_WaitUntilDone(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, uint64_t waitTimeout_ms)
Waits (blocking) until the previously executed command is finished, i.e. PEAK_CommandNode_GetIsDone()...
struct PEAK_NODE * PEAK_NODE_HANDLE
Definition: peak_backend.h:411
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
void Execute()
Executes the command associated with this node.
Definition: peak_command_node.hpp:111
~CommandNode() override=default
Represents a timeout value in milliseconds.
Definition: peak_timeout.hpp:30
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
bool IsDone() const
Checks whether the command is done.
Definition: peak_command_node.hpp:105
Represents a GenAPI command node.
Definition: peak_command_node.hpp:32
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.
struct PEAK_COMMAND_NODE * PEAK_COMMAND_NODE_HANDLE
Definition: peak_backend.h:423
Represents a GenAPI node.
Definition: peak_node.hpp:121
PEAK_C_API PEAK_CommandNode_Execute(PEAK_COMMAND_NODE_HANDLE commandNodeHandle)
Tells the given command node to execute its associated command.
PEAK_C_API PEAK_CommandNode_ToNode(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given command node to a node.