Api-SerializationContext.h
1/* Copyright (C) 2008 Marc Boris Duerner
2 SPDX-License-Identifier: LGPL-2.1-or-later WITH mif-exception
3*/
4
5#ifndef PT_API_SERIALIZATIONCONTEXT_H
6#define PT_API_SERIALIZATIONCONTEXT_H
7
8#include <Pt/Api.h>
9#include <Pt/TypeInfo.h>
10#include <Pt/FixupInfo.h>
11#include <Pt/SerializationInfo.h>
12#include <Pt/SerializationSurrogate.h>
13#include <typeinfo>
14#include <string>
15
16namespace Pt {
17
18class SerializationContextImpl;
19
26{
27 public:
30
34
36 inline void enableReferencing(bool enabled)
37 { _refsEnabled = enabled; }
38
40 inline bool isReferencing() const
41 { return _refsEnabled; }
42
45
48
50 template <typename T>
51 void registerSurrogate( const std::string& typeName,
52 void (*compose)(const Pt::SerializationInfo& si, T& type),
53 void (*decompose)(Pt::SerializationInfo& si, const T& type) );
54
56 template <typename T>
57 void registerSurrogate( const char* typeName,
58 void (*compose)(const Pt::SerializationInfo& si, T& type),
59 void (*decompose)(Pt::SerializationInfo& si, const T& type) );
60
62 template <typename T>
63 bool compose(const SerializationInfo& si, T& type) const;
64
66 template <typename T>
67 bool decompose(SerializationInfo& si, const T& type);
68
70 template <typename T>
71 const BasicSerializationSurrogate<T>* getSurrogate() const;
72
73 public:
76 void clear()
77 { onClear(); }
78
81 bool beginSave(const void* p, const char* name)
82 { return onBeginSave(p, name); }
83
87 { onFinishSave(); }
88
91 void prepareId(const void* p)
92 { onPrepareId(p); }
93
96 const char* getId(const void* p)
97 { return onGetId(p); }
98
101 const char* makeId(const void* p)
102 { return onMakeId(p); }
103
104 public:
107 void beginLoad(void* obj, const std::type_info& ti,
108 const char* name, const char* id)
109 { onBeginLoad(obj, ti, name, id); }
110
114 { onFinishLoad(); }
115
118 void rebindTarget(const char* id, void* obj)
119 { onRebindTarget(id, obj); }
120
123 void rebindFixup(const char* id, void* obj, void* prev)
124 { onRebindFixup(id, obj, prev); }
125
128 void prepareFixup(void* obj, const char* id, FixupInfo::FixupHandler fh, unsigned mid)
129 { onPrepareFixup(obj, id, fh, mid); }
130
133 void fixup()
134 { onFixup(); }
135
136 protected:
139 virtual void onClear();
140
143 virtual bool onBeginSave(const void* p, const char* name);
144
147 virtual void onFinishSave();
148
151 virtual void onPrepareId(const void* p);
152
155 virtual const char* onGetId(const void* p);
156
159 virtual const char* onMakeId(const void* p);
160
163 virtual void onBeginLoad(void* obj, const std::type_info& fixupInfo,
164 const char* name, const char* id);
165
168 virtual void onFinishLoad();
169
172 virtual void onRebindTarget(const char* id, void* obj);
173
176 virtual void onRebindFixup(const char* id, void* obj, void* prev);
177
180 virtual void onPrepareFixup(void* obj, const char* id, FixupInfo::FixupHandler fh, unsigned mid);
181
184 virtual void onFixup();
185
186 private:
188 void registerSurrogate(const std::type_info& ti, SerializationSurrogate* surrogate);
189
192 {}
193
195 SerializationContext& operator=(const SerializationContext& si)
196 { return *this; }
197
198 private:
199 SerializationContextImpl* _cache;
200 bool _refsEnabled;
201};
202
203} // namespace Pt
204
205#endif
Context for the serialization of types.
Definition Api-SerializationContext.h:26
virtual const char * onMakeId(const void *p)
Create an ID for a type, if referenced.
const char * makeId(const void *p)
Create an ID for a type, if referenced.
Definition Api-SerializationContext.h:101
virtual bool onBeginSave(const void *p, const char *name)
Begin saving a type.
virtual void onBeginLoad(void *obj, const std::type_info &fixupInfo, const char *name, const char *id)
Begin loading a type.
virtual void onRebindFixup(const char *id, void *obj, void *prev)
Rebind reference to fixup for a ID.
SerializationInfo * get()
Gets a SerializationInfo object from the pool.
virtual void onPrepareId(const void *p)
Mark a type as being referenced.
virtual void onFixup()
Fixup all prepared references to their targets.
void enableReferencing(bool enabled)
Enables recording of references.
Definition Api-SerializationContext.h:36
const char * getId(const void *p)
Get the ID for a reference.
Definition Api-SerializationContext.h:96
void push(SerializationInfo *si)
Pushes a SerializationInfo object back on the pool.
virtual void onFinishLoad()
Finish loading a type.
virtual void onRebindTarget(const char *id, void *obj)
Rebind a ID to a referenced type.
void rebindTarget(const char *id, void *obj)
Rebind a ID to a referenced type.
Definition Api-SerializationContext.h:118
const BasicSerializationSurrogate< T > * getSurrogate() const
Find a surrogate for a type.
Definition SerializationContext.h:193
virtual const char * onGetId(const void *p)
Get the ID for a reference.
void registerSurrogate(const std::string &typeName, void(*compose)(const Pt::SerializationInfo &si, T &type), void(*decompose)(Pt::SerializationInfo &si, const T &type))
Register a serialization surrogate function pair.
Definition SerializationContext.h:204
virtual void onPrepareFixup(void *obj, const char *id, FixupInfo::FixupHandler fh, unsigned mid)
Prepare a reference to fixup for an ID.
void finishLoad()
Finish loading a type.
Definition Api-SerializationContext.h:113
void fixup()
Fixup all prepared references to their targets.
Definition Api-SerializationContext.h:133
virtual void onFinishSave()
Finish saving a type.
void beginLoad(void *obj, const std::type_info &ti, const char *name, const char *id)
Begin loading a type.
Definition Api-SerializationContext.h:107
bool beginSave(const void *p, const char *name)
Begin saving a type.
Definition Api-SerializationContext.h:81
SerializationContext()
Default Constructor.
void finishSave()
Finish saving a type.
Definition Api-SerializationContext.h:86
bool isReferencing() const
Returns true if references are recorded.
Definition Api-SerializationContext.h:40
virtual ~SerializationContext()
Destructor.
bool compose(const SerializationInfo &si, T &type) const
Returns true if the type could be composed with a surrogate.
Definition SerializationContext.h:168
void clear()
Clears all content.
Definition Api-SerializationContext.h:76
bool decompose(SerializationInfo &si, const T &type)
Returns true if the type could be decomposed with a surrogate.
Definition SerializationContext.h:180
void rebindFixup(const char *id, void *obj, void *prev)
Rebind reference to fixup for a ID.
Definition Api-SerializationContext.h:123
void prepareId(const void *p)
Mark a type as being referenced.
Definition Api-SerializationContext.h:91
virtual void onClear()
Clears all content.
void prepareFixup(void *obj, const char *id, FixupInfo::FixupHandler fh, unsigned mid)
Prepare a reference to fixup for an ID.
Definition Api-SerializationContext.h:128
Represents arbitrary types during serialization.
Definition SerializationInfo.h:59
Core module.
Definition Allocator.h:33