1 #ifndef CTL_SERIALIZATIONHELPER_H 2 #define CTL_SERIALIZATIONHELPER_H 10 class AbstractDataModel;
11 class AbstractDataModel2D;
12 class AbstractPrepareStep;
13 class AbstractProjector;
14 class AbstractReconstructor;
15 class SystemComponent;
16 class SerializationInterface;
27 template<
class SerializableType>
35 typedef QMap<int, SerializableFactoryFunction> FactoryMap;
40 const FactoryMap& componentFactories()
const;
41 const FactoryMap& modelFactories()
const;
42 const FactoryMap& model2DFactories()
const;
43 const FactoryMap& prepareStepFactories()
const;
44 const FactoryMap& projectorFactories()
const;
45 const FactoryMap& reconstructorFactories()
const;
46 const FactoryMap& miscFactories()
const;
68 FactoryMap _componentFactories;
69 FactoryMap _modelFactories;
70 FactoryMap _model2DFactories;
71 FactoryMap _prepareStepFactories;
72 FactoryMap _miscFactories;
73 FactoryMap _projectorFactories;
74 FactoryMap _reconstructorFactories;
77 template<
class SerializableType>
82 auto a =
new SerializableType();
83 a->fromVariant(variant);
87 constexpr
bool sysComponent = std::is_convertible<SerializableType*, SystemComponent*>::value;
88 constexpr
bool dataModel = std::is_convertible<SerializableType*, AbstractDataModel*>::value;
89 constexpr
bool dataModel2D = std::is_convertible<SerializableType*, AbstractDataModel2D*>::value;
90 constexpr
bool prepStep = std::is_convertible<SerializableType*, AbstractPrepareStep*>::value;
91 constexpr
bool projector = std::is_convertible<SerializableType*, AbstractProjector*>::value;
92 constexpr
bool reconstructor = std::is_convertible<SerializableType*, AbstractReconstructor*>::value;
93 constexpr
bool misc = std::is_convertible<SerializableType*, SerializationInterface*>::value;
95 static_assert(sysComponent || dataModel || dataModel2D ||prepStep || projector || reconstructor || misc,
96 "RegisterWithSerializationHelper fails: tried a registration of an unknown type");
98 auto& serializer = SerializationHelper::instance();
101 Q_ASSERT(!serializer._componentFactories.contains(SerializableType::Type));
102 serializer._componentFactories.insert(SerializableType::Type, factoryFunction);
106 Q_ASSERT(!serializer._modelFactories.contains(SerializableType::Type));
107 serializer._modelFactories.insert(SerializableType::Type, factoryFunction);
111 Q_ASSERT(!serializer._model2DFactories.contains(SerializableType::Type));
112 serializer._model2DFactories.insert(SerializableType::Type, factoryFunction);
116 Q_ASSERT(!serializer._prepareStepFactories.contains(SerializableType::Type));
117 serializer._prepareStepFactories.insert(SerializableType::Type, factoryFunction);
121 Q_ASSERT(!serializer._projectorFactories.contains(SerializableType::Type));
122 serializer._projectorFactories.insert(SerializableType::Type, factoryFunction);
124 else if(reconstructor)
126 Q_ASSERT(!serializer._reconstructorFactories.contains(SerializableType::Type));
127 serializer._reconstructorFactories.insert(SerializableType::Type, factoryFunction);
131 Q_ASSERT(!serializer._miscFactories.contains(SerializableType::Type));
132 serializer._miscFactories.insert(SerializableType::Type, factoryFunction);
170 #define DECLARE_SERIALIZABLE_TYPE(className_woNamespace) \ 171 ::CTL::SerializationHelper::RegisterWithSerializationHelper<className_woNamespace> \ 172 SERIALIZATION_HELPER_KNOWS_ ## className_woNamespace; 175 #endif // CTL_SERIALIZATIONHELPER_H Definition: serializationhelper.h:28
The AbstractDataModel2D class is the base class for two-dimensional data models.
Definition: abstractdatamodel2d.h:47
Base class for preparation steps used within an AcquisitionSetup.
Definition: abstractpreparestep.h:46
The AbstractProjector class is the abstract base class defining the interfaces for forward projectors...
Definition: abstractprojector.h:68
Specify an interface for de-/serialization from/to QVariants.
Definition: serializationinterface.h:17
The AbstractReconstructor class defined the interface for reconstruction types.
Definition: abstractreconstructor.h:163
Base class for all system components.
Definition: systemcomponent.h:53
The AbstractDataModel class is the base class for basic data models.
Definition: abstractdatamodel.h:55
Singleton that manages factory functions for parsing QVariant(Maps) to CTL types.
Definition: serializationhelper.h:24