IDS peak genericC++  v1.4.2
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 
23 namespace peak
24 {
25 namespace core
26 {
27 
28 class Device;
29 
38 {
39 public:
40  DataStreamDescriptor() = delete;
41  ~DataStreamDescriptor() override = default;
42  DataStreamDescriptor(const DataStreamDescriptor& other) = delete;
43  DataStreamDescriptor& operator=(const DataStreamDescriptor& other) = delete;
46 
48  std::string Key() const;
49 
59  std::shared_ptr<Device> ParentDevice() const;
70  std::shared_ptr<DataStream> OpenDataStream();
80  std::shared_ptr<DataStream> OpenedDataStream() const;
81 
82 private:
83  PEAK_MODULE_DESCRIPTOR_HANDLE ModuleDescriptorHandle() const override;
84 
85  friend ClassCreator<DataStreamDescriptor>;
87  PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, const std::weak_ptr<Device>& parentDevice);
88  PEAK_DATA_STREAM_DESCRIPTOR_HANDLE m_backendHandle;
89 
90  std::weak_ptr<Device> m_parentDevice;
91  std::weak_ptr<DataStream> m_openedDataStream;
92 
93  std::string m_key;
94 };
95 
96 } /* namespace core */
97 } /* namespace peak */
98 
99 /* Implementation */
100 namespace peak
101 {
102 namespace core
103 {
104 
106  PEAK_DATA_STREAM_DESCRIPTOR_HANDLE dataStreamDescriptorHandle, const std::weak_ptr<Device>& parentDevice)
107  : m_backendHandle(dataStreamDescriptorHandle)
108  , m_parentDevice(parentDevice)
109  , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
110  return PEAK_C_ABI_PREFIX PEAK_DataStreamDescriptor_GetKey(dataStreamDescriptorHandle, key, keySize);
111  }))
112 {}
113 
114 inline std::string DataStreamDescriptor::Key() const
115 {
116  return m_key;
117 }
118 
119 inline std::shared_ptr<Device> DataStreamDescriptor::ParentDevice() const
120 {
121  return LockOrThrow(m_parentDevice);
122 }
123 
124 inline std::shared_ptr<DataStream> DataStreamDescriptor::OpenDataStream()
125 {
126  auto dataStreamHandle = QueryNumericFromCInterfaceFunction<PEAK_DATA_STREAM_HANDLE>(
127  [&](PEAK_DATA_STREAM_HANDLE* _dataStreamHandle) {
128  return PEAK_C_ABI_PREFIX PEAK_DataStreamDescriptor_OpenDataStream(m_backendHandle, _dataStreamHandle);
129  });
130 
131  auto dataStream = std::make_shared<ClassCreator<DataStream>>(dataStreamHandle, m_parentDevice);
132  m_openedDataStream = dataStream;
133  return dataStream;
134 }
135 
136 inline std::shared_ptr<DataStream> DataStreamDescriptor::OpenedDataStream() const
137 {
138  return LockOrThrowOpenedModule(m_openedDataStream);
139 }
140 
141 inline PEAK_MODULE_DESCRIPTOR_HANDLE DataStreamDescriptor::ModuleDescriptorHandle() const
142 {
143  auto moduleDescriptorHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_DESCRIPTOR_HANDLE>(
144  [&](PEAK_MODULE_DESCRIPTOR_HANDLE* _moduleDescriptorHandle) {
146  m_backendHandle, _moduleDescriptorHandle);
147  });
148 
149  return moduleDescriptorHandle;
150 }
151 
152 } /* namespace core */
153 } /* namespace peak */
DataStreamDescriptor & operator=(const DataStreamDescriptor &other)=delete
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition: peak_dynamic_loader.h:32
std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition: peak_data_stream_descriptor.hpp:119
std::string Key() const
Returns the unique key.
Definition: peak_data_stream_descriptor.hpp:114
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.
struct PEAK_MODULE_DESCRIPTOR * PEAK_MODULE_DESCRIPTOR_HANDLE
Definition: peak_backend.h:397
std::shared_ptr< DataStream > OpenedDataStream() const
Returns the DataStream that was opened with this DataStreamDescriptor.
Definition: peak_data_stream_descriptor.hpp:136
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.
std::shared_ptr< DataStream > OpenDataStream()
Opens the data stream.
Definition: peak_data_stream_descriptor.hpp:124
The base class for all openable modules.
Definition: peak_module_descriptor.hpp:30
struct PEAK_DATA_STREAM * PEAK_DATA_STREAM_HANDLE
Definition: peak_backend.h:381
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
~DataStreamDescriptor() override=default
struct PEAK_DATA_STREAM_DESCRIPTOR * PEAK_DATA_STREAM_DESCRIPTOR_HANDLE
Definition: peak_backend.h:377
Encapsulates the GenTL functions associated with a GenTL DataStream module&#39;s ID.
Definition: peak_data_stream_descriptor.hpp:37
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.