IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_module.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
10
13
14#include <cstddef>
15#include <memory>
16#include <vector>
17
18
19namespace peak
20{
21namespace core
22{
23
24class NodeMap;
25class Port;
26
34class Module : public InitOnce
35{
36public:
37 Module() = default;
38 virtual ~Module() = default;
39 Module(const Module& other) = delete;
40 Module& operator=(const Module& other) = delete;
41 Module(Module&& other) = delete;
42 Module& operator=(Module&& other) = delete;
43
53 PEAK_COMMON_NO_DISCARD std::vector<std::shared_ptr<NodeMap>> NodeMaps() const;
54
64 PEAK_COMMON_NO_DISCARD std::shared_ptr<class Port> Port() const;
65
66protected:
67 virtual PEAK_MODULE_HANDLE ModuleHandle() const = 0;
68
70 void Initialize() const override;
72
73private:
74 mutable std::vector<std::shared_ptr<NodeMap>> m_nodeMaps;
75 mutable std::shared_ptr<class Port> m_port;
76};
77
78} /* namespace core */
79} /* namespace peak */
80
83
84
85/* Implementation */
86namespace peak
87{
88namespace core
89{
90
91inline std::vector<std::shared_ptr<NodeMap>> Module::NodeMaps() const
92{
93 InitializeIfNecessary();
94 return m_nodeMaps;
95}
96
97inline std::shared_ptr<class Port> Module::Port() const
98{
99 InitializeIfNecessary();
100 return m_port;
101}
102
104inline void Module::Initialize() const
105{
106 auto moduleHandle = ModuleHandle();
107
108 auto numNodeMaps = QueryNumericFromCInterfaceFunction<size_t>([&](size_t* _numNodeMaps) {
109 return PEAK_C_ABI_PREFIX PEAK_Module_GetNumNodeMaps(moduleHandle, _numNodeMaps);
110 });
111
112 std::vector<std::shared_ptr<NodeMap>> nodeMaps;
113 for (size_t x = 0; x < numNodeMaps; ++x)
114 {
115 auto nodeMapHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_MAP_HANDLE>(
116 [&](PEAK_NODE_MAP_HANDLE* _nodeMapHandle) {
117 return PEAK_C_ABI_PREFIX PEAK_Module_GetNodeMap(moduleHandle, x, _nodeMapHandle);
118 });
119
120 nodeMaps.emplace_back(std::make_shared<ClassCreator<NodeMap>>(nodeMapHandle));
121 }
122
123 m_nodeMaps = nodeMaps;
124
125 auto portHandle = QueryNumericFromCInterfaceFunction<PEAK_PORT_HANDLE>([&](PEAK_PORT_HANDLE* _portHandle) {
126 return PEAK_C_ABI_PREFIX PEAK_Module_GetPort(moduleHandle, _portHandle);
127 });
128
129 m_port = std::make_shared<ClassCreator<peak::core::Port>>(portHandle);
130}
132
133} /* namespace core */
134} /* namespace peak */
PEAK_COMMON_NO_DISCARD std::vector< std::shared_ptr< NodeMap > > NodeMaps() const
Returns the module's node maps.
Definition peak_module.hpp:91
PEAK_COMMON_NO_DISCARD std::shared_ptr< class Port > Port() const
Returns the module's port.
Definition peak_module.hpp:97
Module(const Module &other)=delete
Module & operator=(const Module &other)=delete
virtual ~Module()=default
Module & operator=(Module &&other)=delete
Module(Module &&other)=delete
virtual PEAK_MODULE_HANDLE ModuleHandle() const =0
Represents a GenAPI node map.
Definition peak_node_map.hpp:60
Represents a GenTL port.
Definition peak_port.hpp:41
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
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition peak_backend.h:419
struct PEAK_PORT * PEAK_PORT_HANDLE
Definition peak_backend.h:467
PEAK_C_API PEAK_Module_GetNodeMap(PEAK_MODULE_HANDLE moduleHandle, size_t index, PEAK_NODE_MAP_HANDLE *nodeMapHandle)
Asks the given module for the node map with the given index.
struct PEAK_NODE_MAP * PEAK_NODE_MAP_HANDLE
Definition peak_backend.h:423
PEAK_C_API PEAK_Module_GetPort(PEAK_MODULE_HANDLE moduleHandle, PEAK_PORT_HANDLE *portHandle)
Asks the given module for its port.
PEAK_C_API PEAK_Module_GetNumNodeMaps(PEAK_MODULE_HANDLE moduleHandle, size_t *numNodeMaps)
Asks the given module for its number of node maps.
#define PEAK_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13