diff --git a/lib/serializer/BinaryDeserializer.h b/lib/serializer/BinaryDeserializer.h index c11e9b764..6b55409af 100644 --- a/lib/serializer/BinaryDeserializer.h +++ b/lib/serializer/BinaryDeserializer.h @@ -550,6 +550,29 @@ public: for(ui32 i = 0; i < length; i++) load(data.data()[i]); } + template + void load(std::bitset &data) + { + static_assert(T <= 64); + if constexpr (T <= 16) + { + uint16_t read; + load(read); + data = read; + } + else if constexpr (T <= 32) + { + uint32_t read; + load(read); + data = read; + } + else if constexpr (T <= 64) + { + uint64_t read; + load(read); + data = read; + } + } }; class DLL_LINKAGE CLoadFile : public IBinaryReader diff --git a/lib/serializer/BinarySerializer.h b/lib/serializer/BinarySerializer.h index d6f48a0dc..14694ea9a 100644 --- a/lib/serializer/BinarySerializer.h +++ b/lib/serializer/BinarySerializer.h @@ -364,6 +364,26 @@ public: for(ui32 i = 0; i < length; i++) save(data.data()[i]); } + template + void save(const std::bitset &data) + { + static_assert(T <= 64); + if constexpr (T <= 16) + { + auto writ = static_cast(data.to_ulong()); + save(writ); + } + else if constexpr (T <= 32) + { + auto writ = static_cast(data.to_ulong()); + save(writ); + } + else if constexpr (T <= 64) + { + auto writ = static_cast(data.to_ulong()); + save(writ); + } + } }; class DLL_LINKAGE CSaveFile : public IBinaryWriter diff --git a/lib/serializer/CSerializer.h b/lib/serializer/CSerializer.h index 8f20822bd..86d1af954 100644 --- a/lib/serializer/CSerializer.h +++ b/lib/serializer/CSerializer.h @@ -54,7 +54,7 @@ struct VectorizedObjectInfo class DLL_LINKAGE CSerializer { template - static si32 idToNumber(const T &t, typename boost::enable_if >::type * dummy = 0) + static si32 idToNumber(const T &t, typename std::enable_if::value>::type * dummy = 0) { return t; }