summaryrefslogtreecommitdiffhomepage
path: root/serialize
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-05-30 23:36:42 +0200
committerStanislaw Halik <sthalik@misaki.pl>2023-05-30 23:36:42 +0200
commit5755d4515599b934274dc28d9d4896bf7fe6f95b (patch)
tree28e4e0ce13925d3e437b62b25dee24bbe315af01 /serialize
parent17772a53ea0a18f386721fc5c404f80f57dc8a00 (diff)
serialize/save: simplify up some bit shifting
Diffstat (limited to 'serialize')
-rw-r--r--serialize/world-impl.hpp2
-rw-r--r--serialize/world-reader.cpp3
-rw-r--r--serialize/world-writer.cpp6
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();