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