12#include <peak/dll_interface/peak_dll_interface_util.hpp>
77 void SetCurrentEntry(
const std::shared_ptr<EnumerationEntryNode>& entry);
176 const std::string& symbolicValue)
const;
236 friend ClassCreator<EnumerationNode>;
259 , m_backendHandle(enumerationNodeHandle)
265 auto enumerationEntryNodeHandle = QueryNumericFromCInterfaceFunction<PEAK_ENUMERATION_ENTRY_NODE_HANDLE>(
271 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](
PEAK_NODE_HANDLE* _nodeHandle) {
277 return std::dynamic_pointer_cast<EnumerationEntryNode>(
ParentNodeMap()->FindNode(nodeName));
282 if (entry ==
nullptr)
287 CallAndCheckCInterfaceFunction([&] {
294 CallAndCheckCInterfaceFunction([&] {
296 m_backendHandle, symbolicValue.c_str(), symbolicValue.size() + 1);
302 CallAndCheckCInterfaceFunction(
308 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](
PEAK_BOOL8* hasEntry) {
310 m_backendHandle, symbolicValue.c_str(), symbolicValue.size() + 1, hasEntry);
316 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](
PEAK_BOOL8* hasEntry) {
323 auto enumerationEntryNodeHandle = QueryNumericFromCInterfaceFunction<PEAK_ENUMERATION_ENTRY_NODE_HANDLE>(
326 m_backendHandle, symbolicValue.c_str(), symbolicValue.size() + 1, _enumerationEntryNodeHandle);
329 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](
PEAK_NODE_HANDLE* _nodeHandle) {
335 return std::dynamic_pointer_cast<EnumerationEntryNode>(
ParentNodeMap()->FindNode(nodeName));
340 auto enumerationEntryNodeHandle = QueryNumericFromCInterfaceFunction<PEAK_ENUMERATION_ENTRY_NODE_HANDLE>(
343 m_backendHandle, value, _enumerationEntryNodeHandle);
346 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](
PEAK_NODE_HANDLE* _nodeHandle) {
352 return std::dynamic_pointer_cast<EnumerationEntryNode>(
ParentNodeMap()->FindNode(nodeName));
358 auto enumerationEntryNodeHandle = QueryNumericFromCInterfaceFunction<PEAK_ENUMERATION_ENTRY_NODE_HANDLE>(
361 m_backendHandle, symbolicValue.c_str(), symbolicValue.size() + 1, _enumerationEntryNodeHandle);
364 if (enumerationEntryNodeHandle ==
nullptr)
369 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](
PEAK_NODE_HANDLE* _nodeHandle) {
375 return std::dynamic_pointer_cast<EnumerationEntryNode>(
ParentNodeMap()->FindNode(nodeName));
380 auto enumerationEntryNodeHandle = QueryNumericFromCInterfaceFunction<PEAK_ENUMERATION_ENTRY_NODE_HANDLE>(
383 m_backendHandle, value, _enumerationEntryNodeHandle);
386 if (enumerationEntryNodeHandle ==
nullptr)
391 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](
PEAK_NODE_HANDLE* _nodeHandle) {
397 return std::dynamic_pointer_cast<EnumerationEntryNode>(
ParentNodeMap()->FindNode(nodeName));
402 auto numEntries = QueryNumericFromCInterfaceFunction<size_t>([&](
size_t* _numEntries) {
406 std::vector<std::shared_ptr<EnumerationEntryNode>> entries;
407 for (
size_t x = 0; x < numEntries; ++x)
409 auto enumerationEntryNodeHandle = QueryNumericFromCInterfaceFunction<PEAK_ENUMERATION_ENTRY_NODE_HANDLE>(
412 m_backendHandle, x, _enumerationEntryNodeHandle);
415 auto nodeHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>(
418 enumerationEntryNodeHandle, _nodeHandle);
423 entries.emplace_back(std::dynamic_pointer_cast<EnumerationEntryNode>(
ParentNodeMap()->FindNode(nodeName)));
431 std::vector<std::string> result;
432 const auto& entries =
Entries();
433 result.reserve(entries.size());
434 std::transform(entries.begin(), entries.end(), std::back_inserter(result),
435 [](
const auto& entry) { return entry->SymbolicValue(); });
441 const auto& entries =
Entries();
442 std::vector<std::shared_ptr<EnumerationEntryNode>> availableEntries{};
443 std::copy_if(entries.begin(), entries.end(), std::back_inserter(availableEntries),
444 [](
const std::shared_ptr<EnumerationEntryNode>& entry) { return entry->IsAvailable(); });
445 return availableEntries;
450 std::vector<std::string> result;
452 result.reserve(entries.size());
453 std::transform(entries.begin(), entries.end(), std::back_inserter(result),
454 [](
const auto& entry) { return entry->SymbolicValue(); });
The exception thrown for passing an invalid argument to a function.
Definition peak_exception.hpp:118
EnumerationNode & operator=(const EnumerationNode &other)=delete
PEAK_COMMON_NO_DISCARD std::vector< std::shared_ptr< EnumerationEntryNode > > AvailableEntries() const
Returns the currently selectable entries.
Definition peak_enumeration_node.hpp:439
PEAK_COMMON_NO_DISCARD std::vector< std::shared_ptr< EnumerationEntryNode > > Entries() const
Returns the entries.
Definition peak_enumeration_node.hpp:400
void SetCurrentEntry(const std::shared_ptr< EnumerationEntryNode > &entry)
Sets the current entry.
Definition peak_enumeration_node.hpp:280
PEAK_COMMON_NO_DISCARD std::shared_ptr< EnumerationEntryNode > CurrentEntry(NodeCacheUsePolicy cacheUsePolicy=NodeCacheUsePolicy::UseCache) const
Returns the current entry.
Definition peak_enumeration_node.hpp:262
~EnumerationNode() override=default
EnumerationNode & operator=(EnumerationNode &&other)=delete
PEAK_COMMON_NO_DISCARD std::shared_ptr< EnumerationEntryNode > FindEntry(const std::string &symbolicValue) const
Finds an entry with the given symbolic value.
Definition peak_enumeration_node.hpp:321
PEAK_COMMON_NO_DISCARD std::vector< std::string > AvailableSymbolicValues() const
Returns the symbolic values of currently selectable entries.
Definition peak_enumeration_node.hpp:448
PEAK_COMMON_NO_DISCARD bool HasEntry(const std::string &symbolicValue) const
Checks whether the enumeration node contains an entry with the given symbolic value.
Definition peak_enumeration_node.hpp:306
static constexpr auto NodeType
Definition peak_enumeration_node.hpp:39
EnumerationNode(EnumerationNode &&other)=delete
std::string NodeDataType
Definition peak_enumeration_node.hpp:40
EnumerationNode(const EnumerationNode &other)=delete
PEAK_COMMON_NO_DISCARD std::vector< std::string > SymbolicValues() const
Returns the symbolic values of all entries.
Definition peak_enumeration_node.hpp:429
PEAK_COMMON_NO_DISCARD std::shared_ptr< EnumerationEntryNode > TryFindEntry(const std::string &symbolicValue) const
Tries to find an entry with the given symbolic value.
Definition peak_enumeration_node.hpp:356
std::false_type NodeHasRange
Definition peak_enumeration_node.hpp:41
PEAK_COMMON_NO_DISCARD std::shared_ptr< NodeMap > ParentNodeMap() const
Returns the parent node map.
Definition peak_node.hpp:969
NodeCacheUsePolicy
Defines how node value access should interact with the internal cache.
Definition peak_common_node_enums.hpp:36
@ Enumeration
Definition peak_node.hpp:96
@ UseCache
Definition peak_common_node_enums.hpp:38
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_EnumerationNode_FindEntryByValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, int64_t value, PEAK_ENUMERATION_ENTRY_NODE_HANDLE *enumerationEntryNodeHandle)
Tells the given enumeration node to find an entry with the given value.
PEAK_C_API PEAK_EnumerationNode_GetHasEntryByValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, int64_t value, PEAK_BOOL8 *hasEntry)
Asks the given enumeration node whether it has an entry with the given value.
PEAK_C_API PEAK_EnumerationNode_SetCurrentEntryByValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, int64_t value)
Tells the given enumeration node to set its current entry by the given value.
PEAK_C_API PEAK_EnumerationNode_ToNode(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given enumeration node to a node.
struct PEAK_ENUMERATION_NODE * PEAK_ENUMERATION_NODE_HANDLE
Definition peak_backend.h:459
PEAK_C_API PEAK_EnumerationEntryNode_ToNode(PEAK_ENUMERATION_ENTRY_NODE_HANDLE enumerationEntryNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given enumeration entry node to a node.
struct PEAK_NODE * PEAK_NODE_HANDLE
Definition peak_backend.h:427
PEAK_C_API PEAK_EnumerationNode_GetCurrentEntry(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, PEAK_NODE_CACHE_USE_POLICY cacheUsePolicy, PEAK_ENUMERATION_ENTRY_NODE_HANDLE *enumerationEntryNodeHandle)
Asks the given enumeration node for its current entry.
int32_t PEAK_NODE_CACHE_USE_POLICY
Definition peak_backend.h:240
PEAK_C_API PEAK_EnumerationNode_TryFindEntryByValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, int64_t value, PEAK_ENUMERATION_ENTRY_NODE_HANDLE *enumerationEntryNodeHandle)
Tells the given enumeration node to try to find an entry with the given value.
PEAK_C_API PEAK_EnumerationNode_GetHasEntryBySymbolicValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, const char *symbolicValue, size_t symbolicValueSize, PEAK_BOOL8 *hasEntry)
Asks the given enumeration node whether it has an entry with the given symbolic value.
PEAK_C_API PEAK_EnumerationNode_SetCurrentEntry(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, PEAK_ENUMERATION_ENTRY_NODE_HANDLE enumerationEntryNodeHandle)
Tells the given enumeration node to set its current entry to the given entry.
int8_t PEAK_BOOL8
Definition peak_backend.h:41
PEAK_C_API PEAK_EnumerationNode_GetEntry(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, size_t index, PEAK_ENUMERATION_ENTRY_NODE_HANDLE *enumerationEntryNodeHandle)
Asks the given enumeration node for the entry with the given index.
struct PEAK_ENUMERATION_ENTRY_NODE * PEAK_ENUMERATION_ENTRY_NODE_HANDLE
Definition peak_backend.h:463
PEAK_C_API PEAK_EnumerationNode_FindEntryBySymbolicValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, const char *symbolicValue, size_t symbolicValueSize, PEAK_ENUMERATION_ENTRY_NODE_HANDLE *enumerationEntryNodeHandle)
Tells the given enumeration node to find an entry with the given symbolic value.
PEAK_C_API PEAK_EnumerationNode_GetNumEntries(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, size_t *numEntries)
Asks the given enumeration node for its number of entries.
PEAK_C_API PEAK_EnumerationNode_TryFindEntryBySymbolicValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, const char *symbolicValue, size_t symbolicValueSize, PEAK_ENUMERATION_ENTRY_NODE_HANDLE *enumerationEntryNodeHandle)
Tells the given enumeration node to try to find an entry with the given symbolic value.
PEAK_C_API PEAK_EnumerationNode_SetCurrentEntryBySymbolicValue(PEAK_ENUMERATION_NODE_HANDLE enumerationNodeHandle, const char *symbolicValue, size_t symbolicValueSize)
Tells the given enumeration node to set its current entry by the given symbolic value.
#define PEAK_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13