StreamedBinaryWrite.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. //
  2. // StreamedBinaryWrite.h
  3. // cocos2d_libs
  4. //
  5. // Created by 徐俊杰 on 2021/5/7.
  6. //
  7. #ifndef StreamedBinaryWrite_h
  8. #define StreamedBinaryWrite_h
  9. #include "rparticle/Macros/RParticleMacros.h"
  10. #include "rparticle/Serialize/TransferFunctions/TransferBase.h"
  11. #include "rparticle/Serialize/TransferFunctions/JsonSerializeTraits.h"
  12. NS_RRP_BEGIN
  13. class StreamedBinaryWrite : public TransferBase
  14. {
  15. public:
  16. StreamedBinaryWrite() {}
  17. template<class T>
  18. void Transfer (T& data, const char* name, int metaFlag = 0);
  19. template<class T>
  20. void TransferDeepData (T& data);
  21. template<class T>
  22. void TransferBasicData (T& data);
  23. template<class T>
  24. void TransferSTLStyleArray (T& data, int metaFlag = 0);
  25. //private:
  26. std::vector<unsigned char> _data;
  27. };
  28. template<class T>
  29. void StreamedBinaryWrite::Transfer (T& data, const char* _name, int metaFlag)
  30. {
  31. SerializeTraits<T>::Transfer (data, *this);
  32. }
  33. template<class T>
  34. inline void StreamedBinaryWrite::TransferDeepData (T& data)
  35. {
  36. data.Transfer (*this);
  37. }
  38. //template<class T>
  39. //inline void StreamedBinaryWrite::TransferBasicData (T& data)
  40. //{
  41. // jsonObj["a"] = json11::Json(data);
  42. // jsonWriter.Int(1);
  43. //}
  44. template<class T>
  45. inline void StreamedBinaryWrite::TransferBasicData (T& data)
  46. {
  47. union {
  48. T data;
  49. unsigned char c[sizeof(T)];
  50. } u;
  51. u.data = data;
  52. #if RRP_LITTLE_ENDIAN
  53. for (int i = 0; i < sizeof(T); i++)
  54. #else
  55. for (int i = sizeof(T) - 1; i >= 0; i--)
  56. #endif
  57. {
  58. _data.push_back(u.c[i]);
  59. }
  60. }
  61. /*
  62. template<>
  63. inline void StreamedBinaryWrite::TransferBasicData<SInt64> (SInt64& data)
  64. {
  65. }
  66. template<>
  67. inline void StreamedBinaryWrite::TransferBasicData<UInt64> (UInt64& data)
  68. {
  69. }
  70. template<>
  71. inline void StreamedBinaryWrite::TransferBasicData<float> (float& data)
  72. {
  73. }
  74. template<>
  75. inline void StreamedBinaryWrite::TransferBasicData<double> (double& data)
  76. {
  77. }
  78. template<>
  79. inline void StreamedBinaryWrite::TransferBasicData<char> (char& data)
  80. {
  81. }
  82. template<>
  83. inline void StreamedBinaryWrite::TransferBasicData<SInt8> (SInt8& data)
  84. {
  85. }
  86. template<>
  87. inline void StreamedBinaryWrite::TransferBasicData<UInt8> (UInt8& data)
  88. {
  89. }
  90. template<>
  91. inline void StreamedBinaryWrite::TransferBasicData<SInt32> (SInt32& data)
  92. {
  93. }
  94. template<>
  95. inline void StreamedBinaryWrite::TransferBasicData<UInt32> (UInt32& data)
  96. {
  97. }
  98. template<>
  99. inline void StreamedBinaryWrite::TransferBasicData<SInt16> (SInt16& data)
  100. {
  101. }
  102. template<>
  103. inline void StreamedBinaryWrite::TransferBasicData<UInt16> (UInt16& data)
  104. {
  105. }
  106. template<>
  107. inline void StreamedBinaryWrite::TransferBasicData<bool> (bool& data)
  108. {
  109. }
  110. */
  111. template<>
  112. inline void StreamedBinaryWrite::TransferBasicData<std::string> (std::string& data)
  113. {
  114. int length = (int)data.length();
  115. TransferBasicData(length);
  116. for (int i = 0; i < length; i++) {
  117. _data.push_back((unsigned char)data[i]);
  118. }
  119. }
  120. template<class T>
  121. void StreamedBinaryWrite::TransferSTLStyleArray (T& data, int metaFlag)
  122. {
  123. size_t size = data.size();
  124. TransferBasicData(size);
  125. typename T::iterator i = data.begin ();
  126. typename T::iterator end = data.end ();
  127. while (i != end)
  128. {
  129. Transfer (*i, "data", metaFlag);
  130. ++i;
  131. }
  132. }
  133. NS_RRP_END
  134. #endif /* StreamedBinaryWrite_h */