SerializeTraitsBase.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // SerializeTraitsBase.h
  3. // cocos2d_libs
  4. //
  5. // Created by 徐俊杰 on 2020/6/22.
  6. //
  7. #ifndef SerializeTraitsBase_h
  8. #define SerializeTraitsBase_h
  9. #include "rparticle/Macros/RParticleMacros.h"
  10. NS_RRP_BEGIN
  11. template<class T>
  12. class SerializeTraitsBase
  13. {
  14. public:
  15. typedef T value_type;
  16. static int GetByteSize () {return sizeof (value_type);}
  17. static size_t GetAlignOf() {return ALIGN_OF(value_type);}
  18. static void resource_image_assign_external (value_type& /*data*/, void* /*begin*/, void* /*end*/)
  19. {
  20. // AssertString("Unsupported");
  21. }
  22. };
  23. template<class T>
  24. class SerializeTraitsBaseForBasicType : public SerializeTraitsBase<T>
  25. {
  26. public:
  27. typedef T value_type;
  28. template<class TransferFunction> inline
  29. static void Transfer (value_type& data, TransferFunction& transfer)
  30. {
  31. transfer.TransferBasicData (data);
  32. }
  33. };
  34. template<class T>
  35. class SerializeTraits : public SerializeTraitsBase<T>
  36. {
  37. public:
  38. typedef T value_type;
  39. inline static const char* GetTypeString (void* /*ptr*/) { return value_type::GetTypeString (); }
  40. inline static bool MightContainPPtr () { return value_type::MightContainPPtr (); }
  41. /// Returns whether or not a this type is to be treated as a seperate channel in the animation system
  42. static bool IsAnimationChannel () { return T::IsAnimationChannel (); }
  43. /// AllowTransferOptimization can be used for type that have the same memory format as serialized format.
  44. /// Eg. a float or a Vector3f.
  45. /// StreamedBinaryRead will collapse the read into a direct read when reading an array with values that have AllowTransferOptimization.
  46. static bool AllowTransferOptimization () { return T::AllowTransferOptimization (); }
  47. template<class TransferFunction> inline
  48. static void Transfer (value_type& data, TransferFunction& transfer)
  49. {
  50. // data.Transfer (transfer);
  51. transfer.TransferDeepData(data);
  52. }
  53. };
  54. NS_RRP_END
  55. #define DEFINE_GET_TYPESTRING_CONTAINER(x) \
  56. inline static const char* GetTypeString (void*) { return #x; } \
  57. inline static bool IsAnimationChannel () { return false; } \
  58. inline static bool MightContainPPtr () { return SerializeTraits<T>::MightContainPPtr(); } \
  59. inline static bool AllowTransferOptimization () { return false; }
  60. #endif /* SerializeTraitsBase_h */