3#include "../../_cexports/c_gen_api.h"
5#include "../../global.hpp"
6#include "../../exception.hpp"
8#include "../_decl/decl_node.hpp"
9#include "../_decl/decl_node_map.hpp"
10#include "../boolean_node.hpp"
11#include "../category_node.hpp"
12#include "../command_node.hpp"
13#include "../enumeration_node.hpp"
14#include "../enum_entry_node.hpp"
15#include "../float_reg_node.hpp"
16#include "../float_node.hpp"
17#include "../int_reg_node.hpp"
18#include "../integer_node.hpp"
19#include "../string_reg_node.hpp"
20#include "../string_node.hpp"
21#include "../port_node.hpp"
22#include "../register_node.hpp"
35 CExports::NODEMAP handle =
nullptr;
36 auto resultGet = CExports::NMGetNodeTyped(nodeMap->Handle(), name.c_str(), handle);
38 std::rethrow_exception(CvbException::FromCvbResult(resultGet,
"failed to get node"));
40 HandleGuard<Node> guard(handle);
42 CExports::TNodeType nodeType = CExports::NT_Invalid;
43 auto resultType = CExports::NType(handle, nodeType);
45 std::rethrow_exception(CvbException::FromCvbResult(resultGet,
"failed to get node type"));
47 CExports::cvbint64_t value = 0;
49 CExports::NInfoAsInteger(guard.Handle(),
static_cast<CExports::TNodeInfo
>(NodeInfo::RegisterLength), value)
57 case CExports::NT_Invalid:
58 case CExports::NT_Unknown:
59 throw std::runtime_error(
"invalid node type");
61 case CExports::NT_Boolean:
62 node = std::make_shared<BooleanNode>(std::move(guard));
65 case CExports::NT_Category:
66 node = std::make_shared<CategoryNode>(std::move(guard));
69 case CExports::NT_Command:
70 node = std::make_shared<CommandNode>(std::move(guard));
73 case CExports::NT_Enumeration:
74 node = std::make_shared<EnumerationNode>(std::move(guard));
77 case CExports::NT_EnumEntry:
78 node = std::make_shared<EnumEntryNode>(std::move(guard));
81 case CExports::NT_Float:
83 node = std::make_shared<FloatRegNode>(std::move(guard));
85 node = std::make_shared<FloatNode>(std::move(guard));
88 case CExports::NT_Integer:
90 node = std::make_shared<IntRegNode>(std::move(guard));
92 node = std::make_shared<IntegerNode>(std::move(guard));
95 case CExports::NT_String:
97 node = std::make_shared<StringRegNode>(std::move(guard));
99 node = std::make_shared<StringNode>(std::move(guard));
102 case CExports::NT_Port:
103 node = std::make_shared<PortNode>(std::move(guard));
108 node = std::make_shared<RegisterNode>(std::move(guard));
110 node = std::shared_ptr<Node>(
new Node(std::move(guard)));
114 node->nodeMap_ = nodeMap;
116 int resultRegister = CExports::NRegisterUpdate(handle, Node::UpdatedCallback, node.get(), node->cbID_);
117 if (resultRegister < 0)
118 std::rethrow_exception(CvbException::FromCvbResult(resultRegister,
"failed to register updated handler"));
125 auto aliasName = GetInfoAsString(NodeInfo::AliasName);
126 if (aliasName.empty())
129 return nodeMap_->Node(aliasName);
134 auto holder = Internal::CbCarrier<void(Node &)>::Create(handler);
135 return updatedCarrierContainer_.Register(holder);
140 updatedCarrierContainer_.Unregister(eventCookie);
146 int numNodes = GetDependentNodeCount(type);
149 for (
int i = 0; i < numNodes; ++i)
151 auto nodeName = NativeCall<String>([&](
String &value) {
153 auto bufferSizeResult = CExports::NListTyped(
Handle(),
static_cast<CExports::TNodeList
>(type), i,
154 reinterpret_cast<Char *
>(0), bufferSize);
155 if (bufferSizeResult < 0)
156 return bufferSizeResult;
160 CExports::NListTyped(
Handle(),
static_cast<CExports::TNodeList
>(type), i, buffer.data(), bufferSize);
161 if (bufferResult < 0)
164 value =
String(buffer.data());
167 dependentNodes[i] = nodeMap_->Node<T>(nodeName);
169 return dependentNodes;
Cookie used to unregister event handlers.
Definition global.hpp:591
EventCookie RegisterEventUpdated(std::function< void(Node &)> handler)
Register a listener to node updated event.
Definition detail_node.hpp:132
void UnregisterEventUpdated(EventCookie eventCookie) noexcept
Manually unregister a listener to the node updated event.
Definition detail_node.hpp:138
NodePtr AliasNode() const
Gets the node, that is an alias value for this node.
Definition detail_node.hpp:123
void * Handle() const noexcept
Classic API node handle.
Definition decl_node.hpp:71
Namespace for GenApi based device configuration.
Definition decl_fw_updater.hpp:29
std::shared_ptr< Node > NodePtr
Convenience shared pointer for Node.
Definition genapi.hpp:71
std::shared_ptr< NodeMap > NodeMapPtr
Convenience shared pointer for NodeMap.
Definition genapi.hpp:27
Root namespace for the Image Manager interface.
Definition version.hpp:11
char Char
Character type for wide characters or unicode characters.
Definition string.hpp:63
std::string String
String for wide characters or unicode characters.
Definition string.hpp:49