1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-03 13:01:33 +02:00

Serializer: serialize small bitsets (32 bits)

This commit is contained in:
Konstantin P 2023-05-05 12:56:11 +03:00
parent 6ff83e6f16
commit e9a90a8cbf
3 changed files with 44 additions and 1 deletions

View File

@ -550,6 +550,29 @@ public:
for(ui32 i = 0; i < length; i++) for(ui32 i = 0; i < length; i++)
load(data.data()[i]); load(data.data()[i]);
} }
template <std::size_t T>
void load(std::bitset<T> &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 class DLL_LINKAGE CLoadFile : public IBinaryReader

View File

@ -364,6 +364,26 @@ public:
for(ui32 i = 0; i < length; i++) for(ui32 i = 0; i < length; i++)
save(data.data()[i]); save(data.data()[i]);
} }
template <std::size_t T>
void save(const std::bitset<T> &data)
{
static_assert(T <= 64);
if constexpr (T <= 16)
{
auto writ = static_cast<uint16_t>(data.to_ulong());
save(writ);
}
else if constexpr (T <= 32)
{
auto writ = static_cast<uint32_t>(data.to_ulong());
save(writ);
}
else if constexpr (T <= 64)
{
auto writ = static_cast<uint64_t>(data.to_ulong());
save(writ);
}
}
}; };
class DLL_LINKAGE CSaveFile : public IBinaryWriter class DLL_LINKAGE CSaveFile : public IBinaryWriter

View File

@ -54,7 +54,7 @@ struct VectorizedObjectInfo
class DLL_LINKAGE CSerializer class DLL_LINKAGE CSerializer
{ {
template<typename T> template<typename T>
static si32 idToNumber(const T &t, typename boost::enable_if<boost::is_convertible<T,si32> >::type * dummy = 0) static si32 idToNumber(const T &t, typename std::enable_if<std::is_convertible<T,si32>::value>::type * dummy = 0)
{ {
return t; return t;
} }