diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-05-30 23:36:42 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-05-30 23:36:42 +0200 |
commit | 5755d4515599b934274dc28d9d4896bf7fe6f95b (patch) | |
tree | 28e4e0ce13925d3e437b62b25dee24bbe315af01 /serialize | |
parent | 17772a53ea0a18f386721fc5c404f80f57dc8a00 (diff) |
serialize/save: simplify up some bit shifting
Diffstat (limited to 'serialize')
-rw-r--r-- | serialize/world-impl.hpp | 2 | ||||
-rw-r--r-- | serialize/world-reader.cpp | 3 | ||||
-rw-r--r-- | serialize/world-writer.cpp | 6 |
3 files changed, 5 insertions, 6 deletions
diff --git a/serialize/world-impl.hpp b/serialize/world-impl.hpp index 4b215063..fc7fe79c 100644 --- a/serialize/world-impl.hpp +++ b/serialize/world-impl.hpp @@ -67,7 +67,7 @@ template<typename T, size_t N, size_t off> constexpr inline auto highbits = (T(1) << N)-1 << sizeof(T)*8-N-off; template<size_t N, typename T = uint8_t> -constexpr auto lowbits = (T(1) << N)-T(1); +constexpr T lowbits = T((T{1} << N)-T{1}); constexpr inline atlasid meta_short_scenery_bit = highbits<atlasid, 1, 0>; constexpr inline atlasid meta_rotation_bits = highbits<atlasid, rotation_BITS, 1>; diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp index eadda90a..170f9c97 100644 --- a/serialize/world-reader.cpp +++ b/serialize/world-reader.cpp @@ -239,9 +239,8 @@ void reader_state::read_chunks(reader_t& s) for (auto i = 0uz; i < entity_count; i++) { object_id _id; _id << s; - const auto oid = _id & (1ULL << 60)-1; + const auto oid = _id & lowbits<60, object_id>; fm_soft_assert(oid != 0); - static_assert(entity_type_BITS == 3); const auto type = entity_type(_id >> 61); const auto local = local_coords{s.read<uint8_t>()}; diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp index 50ffe3fb..5620c782 100644 --- a/serialize/world-writer.cpp +++ b/serialize/world-writer.cpp @@ -330,10 +330,10 @@ void writer_state::serialize_scenery(const chunk& c, writer_t& s) const auto& e = *e_; fm_assert(s.bytes_written() + entity_size <= chunk_buf.size()); object_id oid = e.id; - fm_assert((oid & lowbits<60, object_id>) == oid); - static_assert(entity_type_BITS == 3); + fm_assert((oid & lowbits<60, object_id>) == e.id); const auto type = e.type(); - fm_assert(((entity_type_i)type & lowbits<entity_type_BITS, entity_type_i>) == (entity_type_i)type); + const auto type_ = (entity_type_i)type; + fm_assert(type_ == (type_ & lowbits<entity_type_BITS, entity_type_i>)); oid |= (object_id)type << 64 - entity_type_BITS; s << oid; const auto local = e.coord.local(); |