RTC Toolkit 5.1.0
Loading...
Searching...
No Matches
oldbAdapterLegacy.hpp
Go to the documentation of this file.
1
13#ifndef RTCTK_COMPONENTFRAMEWORK_OLDBADAPTERLEGACY_HPP
14#define RTCTK_COMPONENTFRAMEWORK_OLDBADAPTERLEGACY_HPP
15
16#pragma GCC diagnostic push
17#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
18
21
22#include <ciiOldb.hpp>
23#include <ciiOldbSubscription.hpp>
24#include <ciiOldbTypedDataBase.hpp>
25
26#include <functional>
27#include <typeindex>
28
30
44class [[deprecated]] OldbAdapterLegacy : public OldbIf {
45public:
46 inline static const std::string SUPPORTED_URI_SCHEME = "cii.oldb.legacy";
47
50
53
56
59
62
68 explicit OldbAdapterLegacy(const elt::mal::Uri& baseuri);
69
76 explicit OldbAdapterLegacy(const elt::mal::Uri& baseuri,
77 const std::shared_ptr<elt::oldb::CiiOldb>& oldb);
78
82 virtual ~OldbAdapterLegacy();
83
91 elt::mal::Uri GetBaseUri() const {
92 return m_baseuri;
93 }
94
95 using RepositoryIf::CreateDataPoint;
96
114 void CreateDataPoint(const DataPointPath& path, const std::type_info& type) override;
115
116protected:
131 void DeleteDataPointLegacy(const DataPointPath& path) override;
132
149 const std::type_info& GetDataPointTypeLegacy(const DataPointPath& path) const override;
150
171 std::size_t GetDataPointSizeLegacy(const DataPointPath& path) const override;
172
173 bool DataPointExistsLegacy(const DataPointPath& path) const override;
174 std::pair<PathList, PathList> GetChildrenLegacy(const DataPointPath& path) const override;
175
176public:
177 Response SendReadRequest(const ReadRequest& request) const override;
178 Response SendWriteRequest(const WriteRequest& request) override;
179 Response SendSubscribeRequest(const SubscribeRequest& request) const override;
180 Response SendUnsubscribeRequest(const UnsubscribeRequest& request) const override;
181
200 static void InitMetadata();
201
202protected:
212 void SetMetadataInstanceMap(const std::map<std::type_index, std::string>& map);
213
223 void SetTypeInfoMap(const std::map<std::string, const std::type_info&>& map);
224
232 elt::oldb::CiiOldbDpCreateContext GetDataPointCreateContext() const;
233
241 void SetDataPointCreateContext(elt::oldb::CiiOldbDpCreateContext& context);
242
243private:
260 template <typename R, typename F>
261 Response ProcessRequest(const R& request, F selector) const;
262
269 template <typename T>
270 void ReadData(const DataPointPath& path, T& buffer) const;
271
278 template <typename T>
279 void WriteData(const DataPointPath& path, const T& buffer) const;
280
286 template <typename T>
287 void RegisterSubscription(const SubscribeRequest::Parameters& params) const;
288
290 struct IoFunctionMapEntry {
291 using ReadFunction =
292 std::function<void(const OldbAdapterLegacy*, const DataPointPath&, void*)>;
293 using WriteFunction =
294 std::function<void(const OldbAdapterLegacy*, const DataPointPath&, const void*)>;
295 using RegisterFunction =
296 std::function<void(const OldbAdapterLegacy*, const SubscribeRequest::Parameters&)>;
297
298 ReadFunction m_read_function;
299 WriteFunction m_write_function;
300 RegisterFunction m_register_function;
301 };
302
304 using IoFunctionMap = std::map<std::type_index, IoFunctionMapEntry>;
305
311 template <typename T>
312 static auto MakeMapEntry();
313
315 struct SubscriptionEntry {
316 std::shared_ptr<elt::oldb::CiiOldbTypedDataBase> m_datapoint;
317 std::shared_ptr<elt::oldb::CiiOldbDpSubscriptionBase> m_subscription;
318
326 std::function<bool(const SubscriptionEntry&, const UnsubscribeRequest::Parameters&)>
327 m_unregister_callback;
328 };
329
330 using SubsciptionMap = std::list<SubscriptionEntry>;
331
341 template <typename T, typename U>
342 void CastAndRegisterSubscription(
343 const SubscribeRequest::Parameters& params,
344 const std::shared_ptr<elt::oldb::CiiOldbTypedDataBase>& datapoint,
345 std::function<void(T*, const std::shared_ptr<elt::oldb::CiiOldbDpValue<U>>&)>
346 write_function) const;
347
349 mutable std::shared_ptr<elt::oldb::CiiOldb> m_client;
350
355 const elt::mal::Uri m_baseuri;
356
358 mutable std::list<SubscriptionEntry> m_subscriptions;
359
361 mutable std::mutex m_mutex;
362
364 const std::map<std::type_index, std::string>* m_metadata_instance_map = nullptr;
365
367 static const std::map<std::type_index, std::string> S_METADATA_INSTANCE_MAP;
368
370 const std::map<std::string, const std::type_info&>* m_type_info_map = nullptr;
371
373 static const std::map<std::string, const std::type_info&> S_TYPE_INFO_MAP;
374
376 static const IoFunctionMap S_IO_FUNCTIONS;
377
378 // The following helper methods and mappings redirect calls from the new API to the legacy
379 // implementation methods.
380 template <typename T>
381 void CreateImpl(detail::CreateRequest<T>& req);
382
383 template <typename T>
384 void ReadImpl(detail::ReadRequest<T>& req);
385
386 template <typename T>
387 void WriteImpl(detail::WriteRequest<T>& req);
388
389 template <typename T>
390 void PartialReadImpl(detail::PartialReadRequest<T>& req);
391
392 template <typename T>
393 void PartialWriteImpl(detail::PartialWriteRequest<T>& req);
394
395 void ReadMetaDataImpl(detail::ReadMetaDataRequest& req);
396 void WriteMetaDataImpl(detail::WriteMetaDataRequest& req);
397 void DeleteImpl(detail::DeleteRequest& req);
398 void ExistsImpl(detail::ExistsRequest& req);
399 void GetChildrenImpl(detail::GetChildrenRequest& req);
400 void CreateLinkImpl(detail::CreateSymlinkRequest& req);
401 void UpdateLinkImpl(detail::UpdateSymlinkRequest& req);
402 void SubscribeImpl(detail::ValueSubscribeRequest& req);
403 void CreateDeleteSubscribeImpl(detail::CreateDeleteSubscribeRequest& req);
404 void UnsubscribeImpl(detail::UnsubscribeRequest& req);
405
406 BatchResponse ProcessRequests(const RequestList& requests) override;
407
408 template <typename T>
409 static RequestDispatcher<OldbAdapterLegacy>::TableEntries BindTypeHandlers();
410
411 static const RequestDispatcher<OldbAdapterLegacy> S_REQUEST_DISPATCHER;
412};
413
414} // namespace rtctk::componentFramework
415
416#pragma GCC diagnostic pop
417
418#endif // RTCTK_COMPONENTFRAMEWORK_OLDBADAPTERLEGACY_HPP
This class provides a wrapper for a data point path.
Definition dataPointPath.hpp:74
Provides access to the OLDB to read and write datapoints.
Definition oldbAdapterLegacy.hpp:44
OldbAdapterLegacy & operator=(const OldbAdapterLegacy &)=delete
This class cannot be copy assigned.
elt::mal::Uri GetBaseUri() const
Get the base URI used when creating this adapter object.
Definition oldbAdapterLegacy.hpp:91
OldbAdapterLegacy(const OldbAdapterLegacy &)=delete
This class cannot be copy constructed.
OldbAdapterLegacy(OldbAdapterLegacy &&)=default
Objects of this class can be moved.
OldbAdapterLegacy & operator=(OldbAdapterLegacy &&)=default
Objects of this class can be moved with the move assignment operator.
OldbAdapterLegacy()=delete
Do not allow construction with no arguments.
Base interface for all OLDB adapters.
Definition oldbIf.hpp:25
An object used to wait for a request to complete.
Definition repositoryIf.hpp:1370
Definition commandReplier.cpp:22
Header file for OldbIf, which defines the API for OldbAdapters.
Header file for the RequestDispatcher utility class.
Definition repositorySubscriberIf.ipp:41