[deploy] Override Serializer::operator<< && Deserializer::>> for common types

This commit is contained in:
Nomango 2020-04-15 17:29:15 +08:00
parent 768ce17586
commit 9fabadbdb8
1 changed files with 145 additions and 142 deletions

View File

@ -33,74 +33,6 @@ struct Serializer
/// @brief дÈë×Ö½ÚÐòÁÐ /// @brief дÈë×Ö½ÚÐòÁÐ
virtual void WriteBytes(const uint8_t* bytes, size_t size) = 0; virtual void WriteBytes(const uint8_t* bytes, size_t size) = 0;
/// \~chinese
/// @brief 写入字符串
void WriteValue(const char* str)
{
size_t len = std::char_traits<char>::length(str);
this->WriteValue(len);
this->WriteBytes(reinterpret_cast<const uint8_t*>(str), len);
}
/// \~chinese
/// @brief 写入字符串
void WriteValue(const String& str)
{
this->WriteValue(str.c_str());
}
/// \~chinese
/// @brief 写入数组
template <typename _Ty>
void WriteValue(const Vector<_Ty>& arr)
{
size_t size = arr.size();
this->WriteValue(size);
for (const auto& v : arr)
{
(*this) << v;
}
}
/// \~chinese
/// @brief 写入链表
template <typename _Ty>
void WriteValue(const List<_Ty>& list)
{
size_t size = list.size();
this->WriteValue(size);
for (const auto& v : list)
{
(*this) << v;
}
}
/// \~chinese
/// @brief 写入集合
template <typename _Ty>
void WriteValue(const Set<_Ty>& set)
{
size_t size = set.size();
this->WriteValue(size);
for (const auto& v : set)
{
(*this) << v;
}
}
/// \~chinese
/// @brief 写入字典
template <typename _KTy, typename _Ty>
void WriteValue(const Map<_KTy, _Ty>& map)
{
size_t size = map.size();
this->WriteValue(size);
for (const auto& p : map)
{
(*this) << p.first << p.second;
}
}
/// \~chinese /// \~chinese
/// @brief дÈëÖµ /// @brief дÈëÖµ
template <typename _Ty> template <typename _Ty>
@ -208,80 +140,6 @@ struct Deserializer
/// @brief ¶ÁÈ¡×Ö½ÚÐòÁÐ /// @brief ¶ÁÈ¡×Ö½ÚÐòÁÐ
virtual void ReadBytes(uint8_t* bytes, size_t size) = 0; virtual void ReadBytes(uint8_t* bytes, size_t size) = 0;
/// \~chinese
/// @brief 读取字符串
void ReadValue(String* str)
{
size_t len = 0;
this->ReadValue(&len);
if (len)
{
str->resize(len);
this->ReadBytes(reinterpret_cast<uint8_t*>(&(*str)[0]), len);
}
}
/// \~chinese
/// @brief 读取数组
template <typename _Ty>
void ReadValue(Vector<_Ty>* arr)
{
size_t len = 0;
this->ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_Ty value;
(*this) >> value;
arr->push_back(value);
}
}
/// \~chinese
/// @brief 读取链表
template <typename _Ty>
void ReadValue(List<_Ty>* list)
{
size_t len = 0;
this->ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_Ty value;
(*this) >> value;
list->push_back(value);
}
}
/// \~chinese
/// @brief 读取集合
template <typename _Ty>
void ReadValue(Set<_Ty>* set)
{
size_t len = 0;
this->ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_Ty value;
(*this) >> value;
set->insert(value);
}
}
/// \~chinese
/// @brief 读取字典
template <typename _KTy, typename _Ty>
void ReadValue(Map<_KTy, _Ty>* map)
{
size_t len = 0;
this->ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_KTy key;
_Ty value;
(*this) >> key >> value;
map->insert(std::make_pair(key, value));
}
}
/// \~chinese /// \~chinese
/// @brief ¶Áȡֵ /// @brief ¶Áȡֵ
template <typename _Ty> template <typename _Ty>
@ -402,6 +260,70 @@ public:
// //
// operator<< for Serializer // operator<< for Serializer
// //
inline Serializer& operator<<(Serializer& serializer, const char* str)
{
size_t len = std::char_traits<char>::length(str);
serializer.WriteValue(len);
if (len)
{
serializer.WriteBytes(reinterpret_cast<const uint8_t*>(str), len);
}
return serializer;
}
inline Serializer& operator<<(Serializer& serializer, const String& str)
{
return serializer << str.c_str();
}
template <typename _Ty>
inline Serializer& operator<<(Serializer& serializer, const Vector<_Ty>& arr)
{
size_t size = arr.size();
serializer.WriteValue(size);
for (const auto& v : arr)
{
serializer << v;
}
return serializer;
}
template <typename _Ty>
inline Serializer& operator<<(Serializer& serializer, const List<_Ty>& list)
{
size_t size = list.size();
serializer.WriteValue(size);
for (const auto& v : list)
{
serializer << v;
}
return serializer;
}
template <typename _Ty>
inline Serializer& operator<<(Serializer& serializer, const Set<_Ty>& set)
{
size_t size = set.size();
serializer.WriteValue(size);
for (const auto& v : set)
{
serializer << v;
}
return serializer;
}
template <typename _KTy, typename _Ty>
inline Serializer& operator<<(Serializer& serializer, const Map<_KTy, _Ty>& map)
{
size_t size = map.size();
serializer.WriteValue(size);
for (const auto& p : map)
{
serializer << p.first << p.second;
}
return serializer;
}
inline Serializer& operator<<(Serializer& serializer, const math::Vec2T<float>& vec) inline Serializer& operator<<(Serializer& serializer, const math::Vec2T<float>& vec)
{ {
return serializer << vec.x << vec.y; return serializer << vec.x << vec.y;
@ -417,9 +339,90 @@ inline Serializer& operator<<(Serializer& serializer, const math::TransformT<flo
return serializer << transform.position << transform.rotation << transform.scale << transform.skew; return serializer << transform.position << transform.rotation << transform.scale << transform.skew;
} }
// //
// operator>> for Deserializer // operator>> for Deserializer
// //
inline Deserializer& operator>>(Deserializer& deserializer, char* str)
{
size_t len = 0;
deserializer.ReadValue(&len);
if (len)
{
deserializer.ReadBytes(reinterpret_cast<uint8_t*>(str), len);
}
return deserializer;
}
inline Deserializer& operator>>(Deserializer& deserializer, String& str)
{
size_t len = 0;
deserializer.ReadValue(&len);
if (len)
{
str.resize(len);
deserializer.ReadBytes(reinterpret_cast<uint8_t*>(&str[0]), len);
}
return deserializer;
}
template <typename _Ty>
inline Deserializer& operator>>(Deserializer& deserializer, Vector<_Ty>& arr)
{
size_t len = 0;
deserializer.ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_Ty value;
deserializer >> value;
arr.push_back(value);
}
return deserializer;
}
template <typename _Ty>
inline Deserializer& operator>>(Deserializer& deserializer, List<_Ty>& list)
{
size_t len = 0;
deserializer.ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_Ty value;
deserializer >> value;
list.push_back(value);
}
return deserializer;
}
template <typename _Ty>
inline Deserializer& operator>>(Deserializer& deserializer, Set<_Ty>& set)
{
size_t len = 0;
deserializer.ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_Ty value;
deserializer >> value;
set.insert(value);
}
return deserializer;
}
template <typename _KTy, typename _Ty>
inline Deserializer& operator>>(Deserializer& deserializer, Map<_KTy, _Ty>& map)
{
size_t len = 0;
deserializer.ReadValue(&len);
for (size_t i = 0; i < len; ++i)
{
_KTy key;
_Ty value;
deserializer >> key >> value;
map.insert(std::make_pair(key, value));
}
return deserializer;
}
inline Deserializer& operator>>(Deserializer& deserializer, math::Vec2T<float>& vec) inline Deserializer& operator>>(Deserializer& deserializer, math::Vec2T<float>& vec)
{ {
return deserializer >> vec.x >> vec.y; return deserializer >> vec.x >> vec.y;