// // SerializeTraits.h // cocos2d_libs // // Created by 徐俊杰 on 2020/6/22. // #ifndef SerializeTraits_h #define SerializeTraits_h #include "rparticle/Macros/RParticleMacros.h" #include "rparticle/Serialize/SerializeTraitsBase.h" NS_RRP_BEGIN #define DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS(x) \ inline static const char* GetTypeString (void* p = 0) { return #x; } \ inline static bool IsAnimationChannel () { return true; } \ inline static bool MightContainPPtr () { return false; } \ inline static bool AllowTransferOptimization () { return true; } template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (float) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (double) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { // We use "int" rather than "SInt32" here for backwards-compatibility reasons. // "SInt32" and "int" used to be two different types (as were "UInt32" and "unsigned int") // that we now serialize through same path. We use "int" instead of "SInt32" as the common // identifier as it was more common. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (int) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (int) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (unsigned int) // See definition of "int" above. }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (unsigned int) // See definition of "int" above. }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (SInt64) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (UInt64) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (SInt16) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (UInt16) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (SInt8) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (UInt8) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (char) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (bool) }; template<> struct SerializeTraits : public SerializeTraitsBaseForBasicType { DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (std::string) }; template class SerializeTraits > : public SerializeTraitsBase > { public: typedef dynamic_array value_type; DEFINE_GET_TYPESTRING_CONTAINER (vector) template inline static void Transfer (value_type& data, TransferFunction& transfer) { transfer.TransferSTLStyleArray (data); } static bool IsContinousMemoryArray () { return true; } static void ResizeSTLStyleArray (value_type& data, int rs) { data.resize_initialized(rs); } static void resource_image_assign_external (value_type& data, void* begin, void* end) { data.assign_external(reinterpret_cast (begin), reinterpret_cast (end)); } }; NS_RRP_END #endif /* SerializeTraits_h */