// Copyright (c) 2006 Move Interactive // // //---------------------------------------------------------------------------- #ifndef _FLOWENGINE_CORE_SERIALIZATION_SERIALIZER_H_ #define _FLOWENGINE_CORE_SERIALIZATION_SERIALIZER_H_ #include "core/RTTIObject.h" #include #include "math/Vector.h" #include "math/Quaternion.h" #include "math/Matrix.h" #include "core/container/Vector.h" #include "core/serialization/IArchive.h" #define FE_SERIALIZATION_STD(A, B) virtual void Serialize(A) { *this & BOOST_SERIALIZATION_NVP(B); } #define FE_SERIALIZATION_VECTORS(A, B) virtual void Serialize(A) { *this & BOOST_SERIALIZATION_NVP(B.vl); } #define FE_SERIALIZATION_SERIALIZE FE_SERIALIZATION_STD(bool& t, t)\ FE_SERIALIZATION_STD(int32& t, t)\ FE_SERIALIZATION_STD(int16& t, t)\ FE_SERIALIZATION_STD(int8& t, t)\ FE_SERIALIZATION_STD(uint32& t, t)\ FE_SERIALIZATION_STD(uint16& t, t)\ FE_SERIALIZATION_STD(uint8& t, t)\ FE_SERIALIZATION_STD(float& t, t)\ FE_SERIALIZATION_STD(std::string& t, t)\ FE_SERIALIZATION_VECTORS(Vector2i& t, t)\ FE_SERIALIZATION_VECTORS(Vector2f& t, t)\ FE_SERIALIZATION_VECTORS(Vector3i& t, t)\ FE_SERIALIZATION_VECTORS(Vector3f& t, t)\ FE_SERIALIZATION_VECTORS(Vector4i& t, t)\ FE_SERIALIZATION_VECTORS(Vector4f& t, t)\ virtual void Serialize(Quaternion& t) { *this & BOOST_SERIALIZATION_NVP(t.q); }\ virtual void Serialize(Matrix33& t){ *this & BOOST_SERIALIZATION_NVP(t.m); } \ virtual void Serialize(Matrix44& t){ *this & BOOST_SERIALIZATION_NVP(t.m); } \ template void Serialize(Vector& t) {for(Vector::iterator it = t.begin(); it != t.end(); it++) *this & BOOST_SERIALIZATION_NVP((*it)); } namespace FlowEngine { class Serializer : public Object { //RTTI_DECLARE; typedef Object Parent; public: virtual void Serialize(IArchive& ar, const unsigned int version){ }; template void serialize(Archive & ar, const unsigned int version) { Serialize((IArchive&)ar, version); } }; } #endif