18 #ifndef INCLUDE_SF_SERIALIZESMARTPTR_HPP 19 #define INCLUDE_SF_SERIALIZESMARTPTR_HPP 21 #include <SF/Archive.hpp> 22 #include <SF/Stream.hpp> 28 template<
typename T,
typename SmartPtrT>
29 inline void serializeSimpleSmartPtr(SmartPtrT **ppt,
SF::Archive &ar)
33 if (ar.isFlagSet(Archive::POINTER))
35 *ppt =
new SmartPtrT();
44 if (*ppt && (**ppt).get())
46 pt = (**ppt).operator->();
53 #define SF_SERIALIZE_SIMPLE_SMARTPTR( SmartPtr ) \ 54 template<typename T> \ 55 inline bool invokeCustomSerializer(SmartPtr<T> **ppt, Archive &ar, int) \ 57 serializeSimpleSmartPtr<T>(ppt, ar); \ 63 template<
typename T,
typename SmartPtrT>
64 inline void serializeRefCountedSmartPtr(SmartPtrT **ppt,
SF::Archive &ar)
68 if (ar.isFlagSet(Archive::POINTER))
75 ContextRead &ctx = ar.getIstream()->getTrackingContext();
76 if (!ctx.getEnabled())
79 **ppt = SmartPtrT(pt);
85 if (pt && ctx.getEnabled() && ctx.query((
void *)pt,
typeid(SmartPtrT), pv))
87 SmartPtrT *ps_prev =
reinterpret_cast<SmartPtrT *
>(pv);
94 ctx.add((
void *)pt,
typeid(SmartPtrT), *ppt);
96 **ppt = SmartPtrT(pt);
111 #define SF_SERIALIZE_REFCOUNTED_SMARTPTR( SmartPtr ) \ 112 template<typename T> \ 113 inline bool invokeCustomSerializer(SmartPtr<T> **ppt, Archive &ar, int) \ 115 serializeRefCountedSmartPtr<T>(ppt, ar); \ 121 #endif // ! INCLUDE_SF_SERIALIZERSMARTPTR_HPP Represents an archive, in which serialized objects are stored.
Definition: Archive.hpp:31
Definition: ByteBuffer.hpp:188
bool isWrite() const
Returns true if this archive is being written to.
bool isRead() const
Returns true if this archive is being read from.