6#ifndef ACTIVE_SERIALISE_DOC_HANDLER
7#define ACTIVE_SERIALISE_DOC_HANDLER
9#include "Active/Serialise/Document/Transportable.h"
25 return new T(incoming);
43 using Shared = std::shared_ptr<Handler>;
46 using Reconstruction = std::function<
void*(
const Object& object)>;
64 if (
auto maker = reconstruction.find(incoming.docType); (maker != reconstruction.end()) && (maker->second.first == &
typeid(T)))
65 return reinterpret_cast<T*
>(maker->second.second(incoming));
76 void add(std::initializer_list<active::utility::String>
const& tags) {
77 for (
const auto& tag : tags) {
88 reconstruction[tag] = std::make_pair( &
typeid(T), reconstructFunc<T>);
93 std::unordered_map<active::utility::String, std::pair<const std::type_info*, Reconstruction>> reconstruction;
std::shared_ptr< Handler > Shared
Shared pointer.
Definition Handler.h:43
Handler()
Definition Handler.h:53
T * reconstruct(const Obj &incoming) const
Definition Handler.h:63
void add(const active::utility::String &tag)
Definition Handler.h:87
void add(std::initializer_list< active::utility::String > const &tags)
Definition Handler.h:76
A Unicode-aware string class.
Definition String.h:51
Concept for classes that can reconstruct an instance from a serialised document object.
Definition Transportable.h:31
Concept for classes that can be transported in a serialised document.
Definition Transportable.h:35
Concept for classes that specify a document type name to reconstruct objects from serialised data.
Definition Transportable.h:39
void * reconstructFunc(const Object &incoming)
Definition Handler.h:23