19 #ifndef INCLUDE_SF_SERIALIZESMARTPTR_HPP 20 #define INCLUDE_SF_SERIALIZESMARTPTR_HPP 22 #include <SF/Archive.hpp> 23 #include <SF/Stream.hpp> 29 template<
typename T,
typename SmartPtrT>
30 inline void serializeSimpleSmartPtr(SmartPtrT **ppt,
SF::Archive &ar)
34 if (ar.isFlagSet(Archive::POINTER))
36 *ppt =
new SmartPtrT();
45 if (*ppt && (**ppt).get())
47 pt = (**ppt).operator->();
54 #define SF_SERIALIZE_SIMPLE_SMARTPTR( SmartPtr ) \ 55 template<typename T> \ 56 inline bool invokeCustomSerializer(SmartPtr<T> **ppt, Archive &ar, int) \ 58 serializeSimpleSmartPtr<T>(ppt, ar); \ 64 template<
typename T,
typename SmartPtrT>
65 inline void serializeRefCountedSmartPtr(SmartPtrT **ppt,
SF::Archive &ar)
69 if (ar.isFlagSet(Archive::POINTER))
76 ContextRead &ctx = ar.getIstream()->getTrackingContext();
77 if (!ctx.getEnabled())
80 **ppt = SmartPtrT(pt);
86 if (pt && ctx.getEnabled() && ctx.query((
void *)pt,
typeid(SmartPtrT), pv))
88 SmartPtrT *ps_prev =
reinterpret_cast<SmartPtrT *
>(pv);
95 ctx.add((
void *)pt,
typeid(SmartPtrT), *ppt);
97 **ppt = SmartPtrT(pt);
112 #define SF_SERIALIZE_REFCOUNTED_SMARTPTR( SmartPtr ) \ 113 template<typename T> \ 114 inline bool invokeCustomSerializer(SmartPtr<T> **ppt, Archive &ar, int) \ 116 serializeRefCountedSmartPtr<T>(ppt, ar); \ 122 #endif // ! INCLUDE_SF_SERIALIZERSMARTPTR_HPP Represents an archive, in which serialized objects are stored.
Definition: Archive.hpp:32
Definition: ByteBuffer.hpp:189
bool isWrite() const
Returns true if this archive is being written to.
bool isRead() const
Returns true if this archive is being read from.