46 inline static const std::string SUPPORTED_URI_SCHEME =
"cii.oldb.legacy";
77 const std::shared_ptr<elt::oldb::CiiOldb>& oldb);
95 using RepositoryIf::CreateDataPoint;
114 void CreateDataPoint(
const DataPointPath& path,
const std::type_info& type)
override;
131 void DeleteDataPointLegacy(
const DataPointPath& path)
override;
149 const std::type_info& GetDataPointTypeLegacy(
const DataPointPath& path)
const override;
171 std::size_t GetDataPointSizeLegacy(
const DataPointPath& path)
const override;
173 bool DataPointExistsLegacy(
const DataPointPath& path)
const override;
174 std::pair<PathList, PathList> GetChildrenLegacy(
const DataPointPath& path)
const override;
179 Response SendSubscribeRequest(
const SubscribeRequest& request)
const override;
200 static void InitMetadata();
212 void SetMetadataInstanceMap(
const std::map<std::type_index, std::string>& map);
223 void SetTypeInfoMap(
const std::map<std::string, const std::type_info&>& map);
232 elt::oldb::CiiOldbDpCreateContext GetDataPointCreateContext()
const;
241 void SetDataPointCreateContext(elt::oldb::CiiOldbDpCreateContext& context);
260 template <
typename R,
typename F>
261 Response ProcessRequest(
const R& request, F selector)
const;
269 template <
typename T>
278 template <
typename T>
279 void WriteData(
const DataPointPath& path,
const T& buffer)
const;
286 template <
typename T>
287 void RegisterSubscription(
const SubscribeRequest::Parameters& params)
const;
290 struct IoFunctionMapEntry {
293 using WriteFunction =
295 using RegisterFunction =
296 std::function<void(
const OldbAdapterLegacy*,
const SubscribeRequest::Parameters&)>;
298 ReadFunction m_read_function;
299 WriteFunction m_write_function;
300 RegisterFunction m_register_function;
304 using IoFunctionMap = std::map<std::type_index, IoFunctionMapEntry>;
311 template <
typename T>
312 static auto MakeMapEntry();
315 struct SubscriptionEntry {
316 std::shared_ptr<elt::oldb::CiiOldbTypedDataBase> m_datapoint;
317 std::shared_ptr<elt::oldb::CiiOldbDpSubscriptionBase> m_subscription;
326 std::function<bool(
const SubscriptionEntry&,
const UnsubscribeRequest::Parameters&)>
327 m_unregister_callback;
330 using SubsciptionMap = std::list<SubscriptionEntry>;
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;
349 mutable std::shared_ptr<elt::oldb::CiiOldb> m_client;
355 const elt::mal::Uri m_baseuri;
358 mutable std::list<SubscriptionEntry> m_subscriptions;
361 mutable std::mutex m_mutex;
364 const std::map<std::type_index, std::string>* m_metadata_instance_map =
nullptr;
367 static const std::map<std::type_index, std::string> S_METADATA_INSTANCE_MAP;
370 const std::map<std::string, const std::type_info&>* m_type_info_map =
nullptr;
373 static const std::map<std::string, const std::type_info&> S_TYPE_INFO_MAP;
376 static const IoFunctionMap S_IO_FUNCTIONS;
380 template <
typename T>
381 void CreateImpl(detail::CreateRequest<T>& req);
383 template <
typename T>
384 void ReadImpl(detail::ReadRequest<T>& req);
386 template <
typename T>
387 void WriteImpl(detail::WriteRequest<T>& req);
389 template <
typename T>
390 void PartialReadImpl(detail::PartialReadRequest<T>& req);
392 template <
typename T>
393 void PartialWriteImpl(detail::PartialWriteRequest<T>& req);
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);
406 BatchResponse ProcessRequests(
const RequestList& requests)
override;
408 template <
typename T>
409 static RequestDispatcher<OldbAdapterLegacy>::TableEntries BindTypeHandlers();
411 static const RequestDispatcher<OldbAdapterLegacy> S_REQUEST_DISPATCHER;