// // StreamedBinaryWrite.h // cocos2d_libs // // Created by 徐俊杰 on 2021/5/7. // #ifndef StreamedBinaryWrite_h #define StreamedBinaryWrite_h #include "rparticle/Macros/RParticleMacros.h" #include "rparticle/Serialize/TransferFunctions/TransferBase.h" #include "rparticle/Serialize/TransferFunctions/JsonSerializeTraits.h" NS_RRP_BEGIN class StreamedBinaryWrite : public TransferBase { public: StreamedBinaryWrite() {} 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::vector _data; }; template void StreamedBinaryWrite::Transfer (T& data, const char* _name, int metaFlag) { SerializeTraits::Transfer (data, *this); } template inline void StreamedBinaryWrite::TransferDeepData (T& data) { data.Transfer (*this); } //template //inline void StreamedBinaryWrite::TransferBasicData (T& data) //{ // jsonObj["a"] = json11::Json(data); // jsonWriter.Int(1); //} template inline void StreamedBinaryWrite::TransferBasicData (T& data) { union { T data; unsigned char c[sizeof(T)]; } u; u.data = data; #if RRP_LITTLE_ENDIAN for (int i = 0; i < sizeof(T); i++) #else for (int i = sizeof(T) - 1; i >= 0; i--) #endif { _data.push_back(u.c[i]); } } /* template<> inline void StreamedBinaryWrite::TransferBasicData (SInt64& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (UInt64& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (float& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (double& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (char& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (SInt8& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (UInt8& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (SInt32& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (UInt32& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (SInt16& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (UInt16& data) { } template<> inline void StreamedBinaryWrite::TransferBasicData (bool& data) { } */ template<> inline void StreamedBinaryWrite::TransferBasicData (std::string& data) { int length = (int)data.length(); TransferBasicData(length); for (int i = 0; i < length; i++) { _data.push_back((unsigned char)data[i]); } } template void StreamedBinaryWrite::TransferSTLStyleArray (T& data, int metaFlag) { size_t size = data.size(); TransferBasicData(size); typename T::iterator i = data.begin (); typename T::iterator end = data.end (); while (i != end) { Transfer (*i, "data", metaFlag); ++i; } } NS_RRP_END #endif /* StreamedBinaryWrite_h */