SerializeTraits.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //
  2. // SerializeTraits.h
  3. // cocos2d_libs
  4. //
  5. // Created by 徐俊杰 on 2020/6/22.
  6. //
  7. #ifndef SerializeTraits_h
  8. #define SerializeTraits_h
  9. #include "rparticle/Macros/RParticleMacros.h"
  10. #include "rparticle/Serialize/SerializeTraitsBase.h"
  11. NS_RRP_BEGIN
  12. #define DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS(x) \
  13. inline static const char* GetTypeString (void* p = 0) { return #x; } \
  14. inline static bool IsAnimationChannel () { return true; } \
  15. inline static bool MightContainPPtr () { return false; } \
  16. inline static bool AllowTransferOptimization () { return true; }
  17. template<>
  18. struct SerializeTraits<float> : public SerializeTraitsBaseForBasicType<float>
  19. {
  20. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (float)
  21. };
  22. template<>
  23. struct SerializeTraits<double> : public SerializeTraitsBaseForBasicType<double>
  24. {
  25. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (double)
  26. };
  27. template<>
  28. struct SerializeTraits<int> : public SerializeTraitsBaseForBasicType<int>
  29. {
  30. // We use "int" rather than "SInt32" here for backwards-compatibility reasons.
  31. // "SInt32" and "int" used to be two different types (as were "UInt32" and "unsigned int")
  32. // that we now serialize through same path. We use "int" instead of "SInt32" as the common
  33. // identifier as it was more common.
  34. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (int)
  35. };
  36. template<>
  37. struct SerializeTraits<long> : public SerializeTraitsBaseForBasicType<long>
  38. {
  39. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (int)
  40. };
  41. template<>
  42. struct SerializeTraits<unsigned int> : public SerializeTraitsBaseForBasicType<unsigned int>
  43. {
  44. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (unsigned int) // See definition of "int" above.
  45. };
  46. template<>
  47. struct SerializeTraits<unsigned long> : public SerializeTraitsBaseForBasicType<unsigned long>
  48. {
  49. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (unsigned int) // See definition of "int" above.
  50. };
  51. template<>
  52. struct SerializeTraits<SInt64> : public SerializeTraitsBaseForBasicType<SInt64>
  53. {
  54. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (SInt64)
  55. };
  56. template<>
  57. struct SerializeTraits<UInt64> : public SerializeTraitsBaseForBasicType<UInt64>
  58. {
  59. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (UInt64)
  60. };
  61. template<>
  62. struct SerializeTraits<SInt16> : public SerializeTraitsBaseForBasicType<SInt16>
  63. {
  64. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (SInt16)
  65. };
  66. template<>
  67. struct SerializeTraits<UInt16> : public SerializeTraitsBaseForBasicType<UInt16>
  68. {
  69. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (UInt16)
  70. };
  71. template<>
  72. struct SerializeTraits<SInt8> : public SerializeTraitsBaseForBasicType<SInt8>
  73. {
  74. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (SInt8)
  75. };
  76. template<>
  77. struct SerializeTraits<UInt8> : public SerializeTraitsBaseForBasicType<UInt8>
  78. {
  79. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (UInt8)
  80. };
  81. template<>
  82. struct SerializeTraits<char> : public SerializeTraitsBaseForBasicType<char>
  83. {
  84. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (char)
  85. };
  86. template<>
  87. struct SerializeTraits<bool> : public SerializeTraitsBaseForBasicType<bool>
  88. {
  89. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (bool)
  90. };
  91. template<>
  92. struct SerializeTraits<std::string> : public SerializeTraitsBaseForBasicType<std::string>
  93. {
  94. DEFINE_GET_TYPESTRING_IS_ANIMATION_CHANNEL_TRAITS (std::string)
  95. };
  96. template<class T, size_t align>
  97. class SerializeTraits<dynamic_array<T, align> > : public SerializeTraitsBase<dynamic_array<T, align> >
  98. {
  99. public:
  100. typedef dynamic_array<T, align> value_type;
  101. DEFINE_GET_TYPESTRING_CONTAINER (vector)
  102. template<class TransferFunction> inline
  103. static void Transfer (value_type& data, TransferFunction& transfer)
  104. {
  105. transfer.TransferSTLStyleArray (data);
  106. }
  107. static bool IsContinousMemoryArray () { return true; }
  108. static void ResizeSTLStyleArray (value_type& data, int rs) { data.resize_initialized(rs); }
  109. static void resource_image_assign_external (value_type& data, void* begin, void* end)
  110. {
  111. data.assign_external(reinterpret_cast<T*> (begin), reinterpret_cast<T*> (end));
  112. }
  113. };
  114. NS_RRP_END
  115. #endif /* SerializeTraits_h */