IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_data_stream_descriptor.hpp
Go to the documentation of this file.
1
7
8#pragma once
9
11
15#include <peak/dll_interface/peak_dll_interface_util.hpp>
16
17#include <memory>
18#include <string>
19
20
21namespace peak
22{
23namespace core
24{
25
26class Device;
27
37{
38public:
40 ~DataStreamDescriptor() override = default;
45
47 PEAK_COMMON_NO_DISCARD std::string Key() const;
48
58 PEAK_COMMON_NO_DISCARD std::shared_ptr<Device> ParentDevice() const;
59
70 PEAK_COMMON_NO_DISCARD std::shared_ptr<DataStream> OpenDataStream();
71
81 PEAK_COMMON_NO_DISCARD std::shared_ptr<DataStream> OpenedDataStream() const;
82
93 PEAK_COMMON_NO_DISCARD std::shared_ptr<DataStream> EnsureOpenedDataStream();
94
102 PEAK_COMMON_NO_DISCARD bool IsOpened() const;
103
104private:
106
107 friend ClassCreator<DataStreamDescriptor>;
109 PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, const std::weak_ptr<Device>& parentDevice);
111
112 std::weak_ptr<Device> m_parentDevice;
113 std::weak_ptr<DataStream> m_openedDataStream;
114
115 std::string m_key;
116};
117
118} /* namespace core */
119} /* namespace peak */
120
121/* Implementation */
122namespace peak
123{
124namespace core
125{
126
128 PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, const std::weak_ptr<Device>& parentDevice)
129 : m_backendHandle(dataStreamDescriptorHandle)
130 , m_parentDevice(parentDevice)
131 , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
132 return PEAK_C_ABI_PREFIX PEAK_DataStreamDescriptor_GetKey(dataStreamDescriptorHandle, key, keySize);
133 }))
134{}
135
136inline std::string DataStreamDescriptor::Key() const
137{
138 return m_key;
139}
140
141inline std::shared_ptr<Device> DataStreamDescriptor::ParentDevice() const
142{
143 return LockOrThrow(m_parentDevice);
144}
145
146inline std::shared_ptr<DataStream> DataStreamDescriptor::OpenDataStream()
147{
148 auto dataStreamHandle = QueryNumericFromCInterfaceFunction<PEAK_DATA_STREAM_HANDLE>(
149 [&](PEAK_DATA_STREAM_HANDLE* _dataStreamHandle) {
150 return PEAK_C_ABI_PREFIX PEAK_DataStreamDescriptor_OpenDataStream(m_backendHandle, _dataStreamHandle);
151 });
152
153 auto dataStream = std::make_shared<ClassCreator<DataStream>>(dataStreamHandle, m_parentDevice);
154 m_openedDataStream = dataStream;
155 return dataStream;
156}
157
158inline std::shared_ptr<DataStream> DataStreamDescriptor::OpenedDataStream() const
159{
160 return LockOrThrowOpenedModule(m_openedDataStream);
161}
162
163inline std::shared_ptr<DataStream> DataStreamDescriptor::EnsureOpenedDataStream()
164{
166}
167
169{
170 return !m_openedDataStream.expired();
171}
172
174{
175 auto moduleDescriptorHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_DESCRIPTOR_HANDLE>(
176 [&](PEAK_MODULE_DESCRIPTOR_HANDLE* _moduleDescriptorHandle) {
178 m_backendHandle, _moduleDescriptorHandle);
179 });
180
181 return moduleDescriptorHandle;
182}
183
184} /* namespace core */
185} /* namespace peak */
PEAK_COMMON_NO_DISCARD std::shared_ptr< DataStream > OpenedDataStream() const
Returns the DataStream that was opened with this DataStreamDescriptor.
Definition peak_data_stream_descriptor.hpp:158
DataStreamDescriptor & operator=(DataStreamDescriptor &&other)=delete
DataStreamDescriptor(DataStreamDescriptor &&other)=delete
DataStreamDescriptor(const DataStreamDescriptor &other)=delete
PEAK_COMMON_NO_DISCARD bool IsOpened() const
Returns whether the data stream is open.
Definition peak_data_stream_descriptor.hpp:168
~DataStreamDescriptor() override=default
PEAK_COMMON_NO_DISCARD std::shared_ptr< DataStream > OpenDataStream()
Opens the data stream.
Definition peak_data_stream_descriptor.hpp:146
PEAK_COMMON_NO_DISCARD std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition peak_data_stream_descriptor.hpp:141
PEAK_COMMON_NO_DISCARD std::string Key() const
Returns the unique key.
Definition peak_data_stream_descriptor.hpp:136
DataStreamDescriptor & operator=(const DataStreamDescriptor &other)=delete
PEAK_COMMON_NO_DISCARD std::shared_ptr< DataStream > EnsureOpenedDataStream()
Returns the opened data stream or opens it if it is not already open.
Definition peak_data_stream_descriptor.hpp:163
Represents a GenTL Device module, i.e. a local virtual Device proxy for the actual hardware RemoteDev...
Definition peak_device.hpp:53
virtual PEAK_MODULE_DESCRIPTOR_HANDLE ModuleDescriptorHandle() const =0
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_DATA_STREAM * PEAK_DATA_STREAM_HANDLE
Definition peak_backend.h:399
struct PEAK_MODULE_DESCRIPTOR * PEAK_MODULE_DESCRIPTOR_HANDLE
Definition peak_backend.h:415
struct PEAK_DATA_STREAM_DESCRIPTOR * PEAK_DATA_STREAM_DESCRIPTOR_HANDLE
Definition peak_backend.h:395
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_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13