IDS peak genericC++ v1.11.1
Loading...
Searching...
No Matches
peak_module.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
13
16
17#include <cstddef>
18#include <memory>
19#include <vector>
20
21
22namespace peak
23{
24namespace core
25{
26
27class NodeMap;
28class Port;
29
37class Module : public InitOnce
38{
39public:
40 Module() = default;
41 virtual ~Module() = default;
42 Module(const Module& other) = delete;
43 Module& operator=(const Module& other) = delete;
44 Module(Module&& other) = delete;
45 Module& operator=(Module&& other) = delete;
46
56 std::vector<std::shared_ptr<NodeMap>> NodeMaps() const;
57
67 std::shared_ptr<class Port> Port() const;
68
69protected:
70 virtual PEAK_MODULE_HANDLE ModuleHandle() const = 0;
71
73 void Initialize() const override;
75
76private:
77 mutable std::vector<std::shared_ptr<NodeMap>> m_nodeMaps;
78 mutable std::shared_ptr<class Port> m_port;
79};
80
81} /* namespace core */
82} /* namespace peak */
83
86
87
88/* Implementation */
89namespace peak
90{
91namespace core
92{
93
94inline std::vector<std::shared_ptr<NodeMap>> Module::NodeMaps() const
95{
96 InitializeIfNecessary();
97 return m_nodeMaps;
98}
99
100inline std::shared_ptr<class Port> Module::Port() const
101{
102 InitializeIfNecessary();
103 return m_port;
104}
105
107inline void Module::Initialize() const
108{
109 auto moduleHandle = ModuleHandle();
110
111 auto numNodeMaps = QueryNumericFromCInterfaceFunction<size_t>([&](size_t* _numNodeMaps) {
112 return PEAK_C_ABI_PREFIX PEAK_Module_GetNumNodeMaps(moduleHandle, _numNodeMaps);
113 });
114
115 std::vector<std::shared_ptr<NodeMap>> nodeMaps;
116 for (size_t x = 0; x < numNodeMaps; ++x)
117 {
118 auto nodeMapHandle = QueryNumericFromCInterfaceFunction<PEAK_NODE_MAP_HANDLE>(
119 [&](PEAK_NODE_MAP_HANDLE* _nodeMapHandle) {
120 return PEAK_C_ABI_PREFIX PEAK_Module_GetNodeMap(moduleHandle, x, _nodeMapHandle);
121 });
122
123 nodeMaps.emplace_back(std::make_shared<ClassCreator<NodeMap>>(nodeMapHandle));
124 }
125
126 m_nodeMaps = nodeMaps;
127
128 auto portHandle = QueryNumericFromCInterfaceFunction<PEAK_PORT_HANDLE>([&](PEAK_PORT_HANDLE* _portHandle) {
129 return PEAK_C_ABI_PREFIX PEAK_Module_GetPort(moduleHandle, _portHandle);
130 });
131
132 m_port = std::make_shared<ClassCreator<peak::core::Port>>(portHandle);
133}
135
136} /* namespace core */
137} /* namespace peak */
std::vector< std::shared_ptr< NodeMap > > NodeMaps() const
Returns the module's node maps.
Definition peak_module.hpp:94
std::shared_ptr< class Port > Port() const
Returns the module's port.
Definition peak_module.hpp:100
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:62
Represents a GenTL port.
Definition peak_port.hpp:44
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:31
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_dynamic_loader.h:33
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition peak_backend.h:421
struct PEAK_PORT * PEAK_PORT_HANDLE
Definition peak_backend.h:469
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:425
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_C_ABI_PREFIX
Definition peak_dll_defines.h:16