JsonWrite.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. //
  2. // JsonWrite.h
  3. // cocos2d_libs
  4. //
  5. // Created by 徐俊杰 on 2020/6/5.
  6. //
  7. #ifndef JsonWrite_h
  8. #define JsonWrite_h
  9. #include "rparticle/Macros/RParticleMacros.h"
  10. #include "common/json11.hpp"
  11. #include "json/rapidjson.h"
  12. #include "json/stringbuffer.h"
  13. #include "json/writer.h"
  14. #include "rparticle/Serialize/TransferFunctions/TransferBase.h"
  15. #include "rparticle/Serialize/TransferFunctions/JsonSerializeTraits.h"
  16. NS_RRP_BEGIN
  17. class JsonWrite : public TransferBase
  18. {
  19. public:
  20. JsonWrite();
  21. const char* getJsonString()
  22. {
  23. if (true || jsonWriter.IsComplete()) jsonWriter.EndObject();
  24. return strBuf.GetString();
  25. }
  26. template<class T>
  27. void Transfer (T& data, const char* name, int metaFlag = 0);
  28. template<class T>
  29. void TransferDeepData (T& data);
  30. template<class T>
  31. void TransferBasicData (T& data);
  32. template<class T>
  33. void TransferSTLStyleArray (T& data, int metaFlag = 0);
  34. private:
  35. std::string currentKey;
  36. rapidjson::StringBuffer strBuf;
  37. rapidjson::Writer<rapidjson::StringBuffer> jsonWriter;
  38. };
  39. template<class T>
  40. void JsonWrite::Transfer (T& data, const char* _name, int metaFlag)
  41. {
  42. currentKey = _name;
  43. jsonWriter.Key(_name);
  44. JsonSerializeTraits<T>::Transfer (data, *this);
  45. }
  46. /*
  47. template<>
  48. void JsonWrite::Transfer<int> (int& data, const char* _name)
  49. {
  50. string name = _name;
  51. jsonWriter.Key(name.c_str());
  52. JsonSerializeTraits<int>::Transfer (data, *this);
  53. // jsonWriter.Int(data);
  54. }
  55. template<>
  56. void JsonWrite::Transfer<float> (float& data, const char* _name)
  57. {
  58. string name = _name;
  59. jsonWriter.Key(name.c_str());
  60. JsonSerializeTraits<float>::Transfer (data, *this);
  61. // jsonWriter.Double(data);
  62. }
  63. */
  64. template<class T>
  65. inline void JsonWrite::TransferDeepData (T& data)
  66. {
  67. jsonWriter.StartObject();
  68. data.Transfer (*this);
  69. jsonWriter.EndObject();
  70. }
  71. //template<class T>
  72. //inline void JsonWrite::TransferBasicData (T& data)
  73. //{
  74. // jsonObj["a"] = json11::Json(data);
  75. // jsonWriter.Int(1);
  76. //}
  77. template<>
  78. inline void JsonWrite::TransferBasicData<SInt64> (SInt64& data)
  79. {
  80. jsonWriter.Int64(data);
  81. }
  82. template<>
  83. inline void JsonWrite::TransferBasicData<UInt64> (UInt64& data)
  84. {
  85. jsonWriter.Uint64(data);
  86. }
  87. template<>
  88. inline void JsonWrite::TransferBasicData<float> (float& data)
  89. {
  90. jsonWriter.Double(data);
  91. }
  92. template<>
  93. inline void JsonWrite::TransferBasicData<double> (double& data)
  94. {
  95. jsonWriter.Double(data);
  96. }
  97. template<>
  98. inline void JsonWrite::TransferBasicData<char> (char& data)
  99. {
  100. // jsonWriter.String(data);
  101. }
  102. template<>
  103. inline void JsonWrite::TransferBasicData<SInt8> (SInt8& data)
  104. {
  105. jsonWriter.Int(data);
  106. }
  107. template<>
  108. inline void JsonWrite::TransferBasicData<UInt8> (UInt8& data)
  109. {
  110. jsonWriter.Uint(data);
  111. }
  112. template<>
  113. inline void JsonWrite::TransferBasicData<int> (int& data)
  114. {
  115. jsonWriter.Int(data);
  116. }
  117. template<>
  118. inline void JsonWrite::TransferBasicData<long> (long& data)
  119. {
  120. jsonWriter.Int(data);
  121. }
  122. template<>
  123. inline void JsonWrite::TransferBasicData<unsigned int> (unsigned int& data)
  124. {
  125. jsonWriter.Uint(data);
  126. }
  127. template<>
  128. inline void JsonWrite::TransferBasicData<unsigned long> (unsigned long& data)
  129. {
  130. jsonWriter.Uint(data);
  131. }
  132. template<>
  133. inline void JsonWrite::TransferBasicData<SInt16> (SInt16& data)
  134. {
  135. jsonWriter.Int(data);
  136. }
  137. template<>
  138. inline void JsonWrite::TransferBasicData<UInt16> (UInt16& data)
  139. {
  140. jsonWriter.Uint(data);
  141. }
  142. template<>
  143. inline void JsonWrite::TransferBasicData<bool> (bool& data)
  144. {
  145. jsonWriter.Bool(data);
  146. }
  147. template<>
  148. inline void JsonWrite::TransferBasicData<std::string> (std::string& data)
  149. {
  150. jsonWriter.String(data.c_str());
  151. }
  152. template<class T>
  153. void JsonWrite::TransferSTLStyleArray (T& data, int metaFlag)
  154. {
  155. jsonWriter.StartArray();
  156. typename T::iterator i = data.begin ();
  157. typename T::iterator end = data.end ();
  158. while (i != end)
  159. {
  160. jsonWriter.StartObject();
  161. Transfer (*i, "data", metaFlag);
  162. jsonWriter.EndObject();
  163. ++i;
  164. }
  165. jsonWriter.EndArray();
  166. }
  167. NS_RRP_END
  168. #endif /* JsonWrite_h */