// // JsonWrite.h // cocos2d_libs // // Created by 徐俊杰 on 2020/6/5. // #ifndef JsonWrite_h #define JsonWrite_h #include "rparticle/Macros/RParticleMacros.h" #include "common/json11.hpp" #include "json/rapidjson.h" #include "json/stringbuffer.h" #include "json/writer.h" #include "rparticle/Serialize/TransferFunctions/TransferBase.h" #include "rparticle/Serialize/TransferFunctions/JsonSerializeTraits.h" NS_RRP_BEGIN class JsonWrite : public TransferBase { public: JsonWrite(); const char* getJsonString() { if (true || jsonWriter.IsComplete()) jsonWriter.EndObject(); return strBuf.GetString(); } template void Transfer (T& data, const char* name, int metaFlag = 0); template void TransferDeepData (T& data); template void TransferBasicData (T& data); template void TransferSTLStyleArray (T& data, int metaFlag = 0); private: std::string currentKey; rapidjson::StringBuffer strBuf; rapidjson::Writer jsonWriter; }; template void JsonWrite::Transfer (T& data, const char* _name, int metaFlag) { currentKey = _name; jsonWriter.Key(_name); JsonSerializeTraits::Transfer (data, *this); } /* template<> void JsonWrite::Transfer (int& data, const char* _name) { string name = _name; jsonWriter.Key(name.c_str()); JsonSerializeTraits::Transfer (data, *this); // jsonWriter.Int(data); } template<> void JsonWrite::Transfer (float& data, const char* _name) { string name = _name; jsonWriter.Key(name.c_str()); JsonSerializeTraits::Transfer (data, *this); // jsonWriter.Double(data); } */ template inline void JsonWrite::TransferDeepData (T& data) { jsonWriter.StartObject(); data.Transfer (*this); jsonWriter.EndObject(); } //template //inline void JsonWrite::TransferBasicData (T& data) //{ // jsonObj["a"] = json11::Json(data); // jsonWriter.Int(1); //} template<> inline void JsonWrite::TransferBasicData (SInt64& data) { jsonWriter.Int64(data); } template<> inline void JsonWrite::TransferBasicData (UInt64& data) { jsonWriter.Uint64(data); } template<> inline void JsonWrite::TransferBasicData (float& data) { jsonWriter.Double(data); } template<> inline void JsonWrite::TransferBasicData (double& data) { jsonWriter.Double(data); } template<> inline void JsonWrite::TransferBasicData (char& data) { // jsonWriter.String(data); } template<> inline void JsonWrite::TransferBasicData (SInt8& data) { jsonWriter.Int(data); } template<> inline void JsonWrite::TransferBasicData (UInt8& data) { jsonWriter.Uint(data); } template<> inline void JsonWrite::TransferBasicData (int& data) { jsonWriter.Int(data); } template<> inline void JsonWrite::TransferBasicData (long& data) { jsonWriter.Int(data); } template<> inline void JsonWrite::TransferBasicData (unsigned int& data) { jsonWriter.Uint(data); } template<> inline void JsonWrite::TransferBasicData (unsigned long& data) { jsonWriter.Uint(data); } template<> inline void JsonWrite::TransferBasicData (SInt16& data) { jsonWriter.Int(data); } template<> inline void JsonWrite::TransferBasicData (UInt16& data) { jsonWriter.Uint(data); } template<> inline void JsonWrite::TransferBasicData (bool& data) { jsonWriter.Bool(data); } template<> inline void JsonWrite::TransferBasicData (std::string& data) { jsonWriter.String(data.c_str()); } template void JsonWrite::TransferSTLStyleArray (T& data, int metaFlag) { jsonWriter.StartArray(); typename T::iterator i = data.begin (); typename T::iterator end = data.end (); while (i != end) { jsonWriter.StartObject(); Transfer (*i, "data", metaFlag); jsonWriter.EndObject(); ++i; } jsonWriter.EndArray(); } NS_RRP_END #endif /* JsonWrite_h */