CTL  0.6.1
Computed Tomography Library
abstractserializer.h
1 #ifndef CTL_ABSTRACTSERIALIZER_H
2 #define CTL_ABSTRACTSERIALIZER_H
3 
4 #include "acquisition/abstractpreparestep.h"
5 #include "acquisition/acquisitionsetup.h"
6 #include "acquisition/ctsystem.h"
12 
13 namespace CTL {
14 
16 {
17 public:
18  virtual ~AbstractSerializer() = default;
19 
20  // convenience declarations (helps with IDE suggestions)
21  void serialize(const AbstractDataModel& model, const QString& fileName) const;
22  void serialize(const AbstractDataModel2D& model, const QString& fileName) const;
23  void serialize(const AbstractPrepareStep& prepStep, const QString& fileName) const;
24  void serialize(const AbstractProjector& projector, const QString& fileName) const;
25  void serialize(const AbstractReconstructor& reconstructor, const QString& fileName) const;
26  void serialize(const AcquisitionSetup& setup, const QString& fileName) const;
27  void serialize(const CTSystem& system, const QString& fileName) const;
28  void serialize(const SystemComponent& component, const QString& fileName) const;
29 
30  // ABSTRACT INTERFACE
31  // serialization interface
32  public:virtual void serialize(const SerializationInterface& serializableObject,
33  const QString& fileName) const = 0;
34 
35  // deserialization interface
36  public:virtual std::unique_ptr<SystemComponent> deserializeComponent(const QString& fileName) const = 0;
37  public:virtual std::unique_ptr<AbstractDataModel> deserializeDataModel(const QString& fileName) const = 0;
38  public:virtual std::unique_ptr<AbstractDataModel2D> deserializeDataModel2D(const QString& fileName) const = 0;
39  public:virtual std::unique_ptr<AbstractPrepareStep> deserializePrepareStep(const QString& fileName) const = 0;
40  public:virtual std::unique_ptr<AbstractProjector> deserializeProjector(const QString& fileName) const = 0;
41  public:virtual std::unique_ptr<AbstractReconstructor> deserializeReconstructor(const QString& fileName) const = 0;
42  public:virtual std::unique_ptr<CTSystem> deserializeSystem(const QString& fileName) const = 0;
43  public:virtual std::unique_ptr<AcquisitionSetup> deserializeAcquisitionSetup(const QString& fileName) const = 0;
44  public:virtual std::unique_ptr<SerializationInterface> deserializeMiscObject(const QString& fileName) const = 0;
45 
46  // convenience deserialization interface for concrete derived types
47 public:
48  template<class DerivedType>
49  std::unique_ptr<DerivedType> deserialize(const QString& fileName);
50 
51 private:
52  template<class DerivedType>
53  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, SystemComponent*);
54  template<class DerivedType>
55  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, AbstractDataModel*);
56  template<class DerivedType>
57  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, AbstractDataModel2D*);
58  template<class DerivedType>
59  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, AbstractPrepareStep*);
60  template<class DerivedType>
61  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, AbstractProjector*);
62  template<class DerivedType>
63  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, AbstractReconstructor*);
64  template<class DerivedType>
65  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, CTSystem*);
66  template<class DerivedType>
67  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, AcquisitionSetup*);
68  template<class DerivedType>
69  std::unique_ptr<DerivedType> deserializeDerived(const QString& fileName, SerializationInterface*);
70 
71 protected:
72  AbstractSerializer() = default;
73  AbstractSerializer(const AbstractSerializer&) = default;
75  AbstractSerializer& operator=(const AbstractSerializer&) = default;
76  AbstractSerializer& operator=(AbstractSerializer&&) = default;
77 };
78 
79 inline void AbstractSerializer::serialize(const AbstractDataModel& model, const QString& fileName) const
80 {
81  serialize(static_cast<const SerializationInterface&>(model), fileName);
82 }
83 
84 inline void AbstractSerializer::serialize(const AbstractDataModel2D& model, const QString& fileName) const
85 {
86  serialize(static_cast<const SerializationInterface&>(model), fileName);
87 }
88 
89 inline void AbstractSerializer::serialize(const AbstractPrepareStep& prepStep,
90  const QString& fileName) const
91 {
92  serialize(static_cast<const SerializationInterface&>(prepStep), fileName);
93 }
94 
95 inline void AbstractSerializer::serialize(const AbstractProjector& projector,
96  const QString& fileName) const
97 {
98  serialize(static_cast<const SerializationInterface&>(projector), fileName);
99 }
100 
101 inline void AbstractSerializer::serialize(const AbstractReconstructor& reconstructor,
102  const QString& fileName) const
103 {
104  serialize(static_cast<const SerializationInterface&>(reconstructor), fileName);
105 }
106 
107 inline void AbstractSerializer::serialize(const AcquisitionSetup& setup, const QString& fileName) const
108 {
109  serialize(static_cast<const SerializationInterface&>(setup), fileName);
110 }
111 
112 inline void AbstractSerializer::serialize(const CTSystem& system, const QString& fileName) const
113 {
114  serialize(static_cast<const SerializationInterface&>(system), fileName);
115 }
116 
117 inline void AbstractSerializer::serialize(const SystemComponent& component, const QString& fileName) const
118 {
119  serialize(static_cast<const SerializationInterface&>(component), fileName);
120 }
121 
122 template<class DerivedType>
123 std::unique_ptr<DerivedType> AbstractSerializer::deserialize(const QString& fileName)
124 {
125  DerivedType* d = nullptr;
126  return deserializeDerived<DerivedType>(fileName, d);
127 }
128 
129 template<class DerivedType>
130 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, SystemComponent*)
131 {
132  auto uPtr = deserializeComponent(fileName);
133  if(dynamic_cast<DerivedType*>(uPtr.get()))
134  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
135  else
136  return nullptr;
137 }
138 template<class DerivedType>
139 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, AbstractDataModel*)
140 {
141  auto uPtr = deserializeDataModel(fileName);
142  if(dynamic_cast<DerivedType*>(uPtr.get()))
143  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
144  else
145  return nullptr;
146 }
147 template<class DerivedType>
148 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, AbstractDataModel2D*)
149 {
150  auto uPtr = deserializeDataModel2D(fileName);
151  if(dynamic_cast<DerivedType*>(uPtr.get()))
152  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
153  else
154  return nullptr;
155 }
156 template<class DerivedType>
157 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, AbstractPrepareStep*)
158 {
159  auto uPtr = deserializePrepareStep(fileName);
160  if(dynamic_cast<DerivedType*>(uPtr.get()))
161  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
162  else
163  return nullptr;
164 }
165 template<class DerivedType>
166 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, AbstractProjector*)
167 {
168  auto uPtr = deserializeProjector(fileName);
169  if(dynamic_cast<DerivedType*>(uPtr.get()))
170  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
171  else
172  return nullptr;
173 }
174 template<class DerivedType>
175 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, AbstractReconstructor*)
176 {
177  auto uPtr = deserializeReconstructor(fileName);
178  if(dynamic_cast<DerivedType*>(uPtr.get()))
179  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
180  else
181  return nullptr;
182 }
183 template<class DerivedType>
184 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, CTSystem*)
185 {
186  auto uPtr = deserializeSystem(fileName);
187  if(dynamic_cast<DerivedType*>(uPtr.get()))
188  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
189  else
190  return nullptr;
191 }
192 template<class DerivedType>
193 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, AcquisitionSetup*)
194 {
195  auto uPtr = deserializeAcquisitionSetup(fileName);
196  if(dynamic_cast<DerivedType*>(uPtr.get()))
197  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
198  else
199  return nullptr;
200 }
201 template<class DerivedType>
202 std::unique_ptr<DerivedType> AbstractSerializer::deserializeDerived(const QString& fileName, SerializationInterface*)
203 {
204  auto uPtr = deserializeMiscObject(fileName);
205  if(dynamic_cast<DerivedType*>(uPtr.get()))
206  return std::unique_ptr<DerivedType>(static_cast<DerivedType*>(uPtr.release()));
207  else
208  return nullptr;
209 }
210 
211 } // namespace CTL
212 
213 #endif // CTL_ABSTRACTSERIALIZER_H
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
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
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
The CTSystem class manages the list of all components of a system.
Definition: ctsystem.h:84
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
Definition: abstractserializer.h:15