29#ifndef Pt_SerializationContext_h
30#define Pt_SerializationContext_h
33#include <Pt/TypeInfo.h>
34#include <Pt/FixupInfo.h>
35#include <Pt/SerializationInfo.h>
36#include <Pt/SerializationSurrogate.h>
42class SerializationContextImpl;
49 SerializationContext();
51 virtual ~SerializationContext();
53 inline void enableReferencing(
bool enabled)
54 { _refsEnabled = enabled; }
56 inline bool isReferencing()
const
57 {
return _refsEnabled; }
59 SerializationInfo* get();
61 void push(SerializationInfo* si);
64 void registerSurrogate(
const std::string& typeName,
65 void (*compose)(
const Pt::SerializationInfo& si, T& type),
66 void (*decompose)(Pt::SerializationInfo& si,
const T& type) );
69 void registerSurrogate(
const char* typeName,
70 void (*compose)(
const Pt::SerializationInfo& si, T& type),
71 void (*decompose)(Pt::SerializationInfo& si,
const T& type) );
74 bool compose(
const SerializationInfo& si, T& type)
const;
77 bool decompose(SerializationInfo& si,
const T& type);
80 const BasicSerializationSurrogate<T>* getSurrogate()
const;
84 friend const BasicSerializationSurrogate<T>* getSurrogate(SerializationContext*);
86 const SerializationSurrogate* getSurrogate(
const std::type_info& ti)
const;
92 bool beginSave(
const void* p,
const char* name)
93 {
return onBeginSave(p, name); }
98 void prepareId(
const void* p)
101 const char* getId(
const void* p)
102 {
return onGetId(p); }
104 const char* makeId(
const void* p)
105 {
return onMakeId(p); }
108 void beginLoad(
void* obj,
const std::type_info& ti,
109 const char* name,
const char*
id)
110 { onBeginLoad(obj, ti, name,
id); }
115 void rebindTarget(
const char*
id,
void* obj)
116 { onRebindTarget(
id, obj); }
118 void rebindFixup(
const char*
id,
void* obj,
void* prev)
119 { onRebindFixup(
id, obj, prev); }
121 void prepareFixup(
void* obj,
const char*
id, FixupInfo::FixupHandler fh,
unsigned mid)
122 { onPrepareFixup(obj,
id, fh, mid); }
128 virtual void onClear();
130 virtual bool onBeginSave(
const void* p,
const char* name);
132 virtual void onFinishSave();
134 virtual void onPrepareId(
const void* p);
136 virtual const char* onGetId(
const void* p);
138 virtual const char* onMakeId(
const void* p);
140 virtual void onBeginLoad(
void* obj,
const std::type_info& fixupInfo,
141 const char* name,
const char*
id);
143 virtual void onFinishLoad();
145 virtual void onRebindTarget(
const char*
id,
void* obj);
147 virtual void onRebindFixup(
const char*
id,
void* obj,
void* prev);
149 virtual void onPrepareFixup(
void* obj,
const char*
id, FixupInfo::FixupHandler fh,
unsigned mid);
151 virtual void onFixup();
154 void registerSurrogate(
const std::type_info& ti, SerializationSurrogate* surrogate);
156 SerializationContext(
const SerializationContext& );
158 SerializationContext& operator=(
const SerializationContext& );
161 SerializationContextImpl* _cache;
174 surr->compose(si, type);
186 surr->decompose(si, type);
195 const SerializationSurrogate* surr = this->
getSurrogate(
typeid(T) );
199 return static_cast<const BasicSerializationSurrogate<T>*
>(surr);
208 SerializationSurrogate* surr =
new BasicSerializationSurrogate<T>(typeName,
compose,
decompose);
218 SerializationSurrogate* surr =
new BasicSerializationSurrogate<T>(typeName,
compose,
decompose);
Context for the serialization of types.
Definition Api-SerializationContext.h:26
const BasicSerializationSurrogate< T > * getSurrogate() const
Find a surrogate for a type.
Definition SerializationContext.h:193
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
bool compose(const SerializationInfo &si, T &type) const
Returns true if the type could be composed with a surrogate.
Definition SerializationContext.h:168
bool decompose(SerializationInfo &si, const T &type)
Returns true if the type could be decomposed with a surrogate.
Definition SerializationContext.h:180
Represents arbitrary types during serialization.
Definition SerializationInfo.h:59
void setTypeName(const std::string &type)
Sets the type name.
void fixup(const FixupInfo &fixup, T *&fixme)
Fixup references during serialization.
Definition FixupInfo.h:136
Core module.
Definition Allocator.h:33