IDS peak genericC++ v1.9.0
Loading...
Searching...
No Matches
peak_data_stream_descriptor.hpp
Go to the documentation of this file.
1
11#pragma once
12
13
17#include <peak/dll_interface/peak_dll_interface_util.hpp>
18
19#include <memory>
20#include <string>
21
22
23namespace peak
24{
25namespace core
26{
27
28class Device;
29
38{
39public:
41 ~DataStreamDescriptor() override = default;
46
48 std::string Key() const;
49
59 std::shared_ptr<Device> ParentDevice() const;
60
71 std::shared_ptr<DataStream> OpenDataStream();
72
82 std::shared_ptr<DataStream> OpenedDataStream() const;
83
84private:
85 PEAK_MODULE_DESCRIPTOR_HANDLE ModuleDescriptorHandle() const override;
86
87 friend ClassCreator<DataStreamDescriptor>;
89 PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, const std::weak_ptr<Device>& parentDevice);
91
92 std::weak_ptr<Device> m_parentDevice;
93 std::weak_ptr<DataStream> m_openedDataStream;
94
95 std::string m_key;
96};
97
98} /* namespace core */
99} /* namespace peak */
100
101/* Implementation */
102namespace peak
103{
104namespace core
105{
106
108 PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, const std::weak_ptr<Device>& parentDevice)
109 : m_backendHandle(dataStreamDescriptorHandle)
110 , m_parentDevice(parentDevice)
111 , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
112 return PEAK_C_ABI_PREFIX PEAK_DataStreamDescriptor_GetKey(dataStreamDescriptorHandle, key, keySize);
113 }))
114{}
115
116inline std::string DataStreamDescriptor::Key() const
117{
118 return m_key;
119}
120
121inline std::shared_ptr<Device> DataStreamDescriptor::ParentDevice() const
122{
123 return LockOrThrow(m_parentDevice);
124}
125
126inline std::shared_ptr<DataStream> DataStreamDescriptor::OpenDataStream()
127{
128 auto dataStreamHandle = QueryNumericFromCInterfaceFunction<PEAK_DATA_STREAM_HANDLE>(
129 [&](PEAK_DATA_STREAM_HANDLE* _dataStreamHandle) {
130 return PEAK_C_ABI_PREFIX PEAK_DataStreamDescriptor_OpenDataStream(m_backendHandle, _dataStreamHandle);
131 });
132
133 auto dataStream = std::make_shared<ClassCreator<DataStream>>(dataStreamHandle, m_parentDevice);
134 m_openedDataStream = dataStream;
135 return dataStream;
136}
137
138inline std::shared_ptr<DataStream> DataStreamDescriptor::OpenedDataStream() const
139{
140 return LockOrThrowOpenedModule(m_openedDataStream);
141}
142
143inline PEAK_MODULE_DESCRIPTOR_HANDLE DataStreamDescriptor::ModuleDescriptorHandle() const
144{
145 auto moduleDescriptorHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_DESCRIPTOR_HANDLE>(
146 [&](PEAK_MODULE_DESCRIPTOR_HANDLE* _moduleDescriptorHandle) {
148 m_backendHandle, _moduleDescriptorHandle);
149 });
150
151 return moduleDescriptorHandle;
152}
153
154} /* namespace core */
155} /* namespace peak */
Encapsulates the GenTL functions associated with a GenTL DataStream module's ID.
Definition peak_data_stream_descriptor.hpp:38
std::shared_ptr< DataStream > OpenedDataStream() const
Returns the DataStream that was opened with this DataStreamDescriptor.
Definition peak_data_stream_descriptor.hpp:138
DataStreamDescriptor & operator=(DataStreamDescriptor &&other)=delete
DataStreamDescriptor(DataStreamDescriptor &&other)=delete
DataStreamDescriptor(const DataStreamDescriptor &other)=delete
~DataStreamDescriptor() override=default
std::shared_ptr< DataStream > OpenDataStream()
Opens the data stream.
Definition peak_data_stream_descriptor.hpp:126
std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition peak_data_stream_descriptor.hpp:121
std::string Key() const
Returns the unique key.
Definition peak_data_stream_descriptor.hpp:116
DataStreamDescriptor & operator=(const DataStreamDescriptor &other)=delete
The base class for all openable modules.
Definition peak_module_descriptor.hpp:31
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_dynamic_loader.h:33
struct PEAK_DATA_STREAM * PEAK_DATA_STREAM_HANDLE
Definition peak_backend.h:384
struct PEAK_MODULE_DESCRIPTOR * PEAK_MODULE_DESCRIPTOR_HANDLE
Definition peak_backend.h:400
struct PEAK_DATA_STREAM_DESCRIPTOR * PEAK_DATA_STREAM_DESCRIPTOR_HANDLE
Definition peak_backend.h:380
PEAK_C_API PEAK_DataStreamDescriptor_ToModuleDescriptor(PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, PEAK_MODULE_DESCRIPTOR_HANDLE *moduleDescriptorHandle)
Casts the given data stream descriptor to a module descriptor.
PEAK_C_API PEAK_DataStreamDescriptor_GetKey(PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, char *key, size_t *keySize)
Asks the given data stream descriptor for its key.
PEAK_C_API PEAK_DataStreamDescriptor_OpenDataStream(PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, PEAK_DATA_STREAM_HANDLE *dataStreamHandle)
Opens the data stream being associated with the given data stream descriptor.
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:16