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>
42 class SerializationContextImpl;
46 class PT_API SerializationContext :
public SerializationInfo
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,
69 void registerSurrogate(
const char* typeName,
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;
167 template <
typename T>
170 const BasicSerializationSurrogate<T>* surr = this->getSurrogate<T>();
174 surr->compose(si, type);
179 template <
typename T>
182 const BasicSerializationSurrogate<T>* surr = this->getSurrogate<T>();
186 surr->decompose(si, type);
192 template <
typename T>
195 const SerializationSurrogate* surr = this->
getSurrogate(
typeid(T) );
199 return static_cast<const BasicSerializationSurrogate<T>*
>(surr);
203 template <
typename T>
208 SerializationSurrogate* surr =
new BasicSerializationSurrogate<T>(typeName,
compose,
decompose);
213 template <
typename T>
218 SerializationSurrogate* surr =
new BasicSerializationSurrogate<T>(typeName,
compose,
decompose);
224 #endif // Pt_SerializationContext_h