diff options
-rw-r--r-- | serialize/savegame.cpp | 32 | ||||
-rw-r--r-- | src/world.cpp | 4 |
2 files changed, 16 insertions, 20 deletions
diff --git a/serialize/savegame.cpp b/serialize/savegame.cpp index 3968fee1..075003de 100644 --- a/serialize/savegame.cpp +++ b/serialize/savegame.cpp @@ -28,9 +28,9 @@ //#include <Magnum/Math/Functions.h> #include <tsl/robin_map.h> -// ReSharper disable CppDFAUnreachableCode -// ReSharper disable CppDFAUnreachableFunctionCall -// ReSharper disable CppUseStructuredBinding +// zzReSharper disable CppDFAUnreachableCode +// zzReSharper disable CppDFAUnreachableFunctionCall +// zzReSharper disable CppUseStructuredBinding // NOLINTBEGIN(*-missing-std-forward, *-avoid-const-or-ref-data-members, *-redundant-member-init) namespace floormat { @@ -53,13 +53,7 @@ private: FILE* s; }; -struct string_hasher -{ - size_t operator()(StringView s) const - { - return fnvhash_buf(s.data(), s.size()); - } -}; +struct string_hasher { CORRADE_ALWAYS_INLINE size_t operator()(StringView s) const { return fnvhash_buf(s.data(), s.size()); } }; template<typename T> concept Number = std::is_arithmetic_v<std::remove_cvref_t<T>>; template<typename T> concept Enum = std::is_enum_v<std::remove_cvref_t<T>>; @@ -170,8 +164,8 @@ struct visitor_ { auto& self = derived(); - visit(s.id, f); fm_soft_assert(s.id != 0); + f(s.id); visit(s.type, f); if (s.type >= object_type::COUNT || s.type == object_type::none) [[unlikely]] fm_throw("invalid object type {}"_cf, (int)s.type); @@ -415,6 +409,7 @@ struct writer final : visitor_<writer, true> template<typename F> void write_scenery_proto(const scenery& obj, F&& f) // todo! replace scenery::subtype with inheritance! { auto sc_type = obj.scenery_type(); + fm_debug_assert(sc_type != scenery_type::none); visit(sc_type, f); std::visit( [&](auto& subtype) { visit_scenery_proto(subtype, f); }, @@ -434,6 +429,7 @@ struct writer final : visitor_<writer, true> .tile = tile, }; visit_object_header(obj, s, f); + fm_assert(s.id != 0); switch (type) { case object_type::none: @@ -861,7 +857,7 @@ struct reader final : visitor_<reader, false> template<typename Obj, typename Proto, typename Header> std::shared_ptr<object> make_object(const object_header_s& h0, object_proto&& p0, Header&& h, auto&& f) { - fm_debug_assert(h0.id != 0); + fm_soft_assert(h0.id != 0); const auto coord = global_coords{h0.ch->coord(), h0.tile}; Proto p{}; @@ -876,7 +872,7 @@ struct reader final : visitor_<reader, false> { std::shared_ptr<object> obj; object_id id = 0; - object_type type = object_type::none; + auto type = object_type::none; local_coords tile; object_header_s s{ @@ -960,12 +956,12 @@ ok: template<atlas_type Type> StringView get_atlas(atlasid id) { - fm_soft_assert(id < atlases.size()); - auto a = atlases[id]; - fm_soft_assert(a.type == Type); using atlas_type = typename atlas_from_type<Type>::Type; - const auto* atlas = static_cast<const atlas_type*>(a.atlas); - return atlas->name(); + auto [atlas, type] = atlases[id]; + fm_soft_assert(id < atlases.size()); + fm_soft_assert(type == Type); + const auto* atlasʹ = static_cast<const atlas_type*>(atlas); + return atlasʹ->name(); } void deserialize_strings_(binary_reader<const char*>& s) diff --git a/src/world.cpp b/src/world.cpp index 2c8db38b..d1c5dd43 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -154,7 +154,7 @@ void world::collect(bool force) void world::do_make_object(const std::shared_ptr<object>& e, global_coords pos, bool sorted) { - fm_assert(e->id > 0); + fm_debug_assert(e->id != 0); // todo! add fm_debug2_assert() fm_debug_assert(e->c); fm_debug_assert(pos.chunk3() == e->c->coord()); fm_debug_assert(_unique_id && e->c->world()._unique_id == _unique_id); @@ -171,7 +171,7 @@ void world::do_make_object(const std::shared_ptr<object>& e, global_coords pos, void world::do_kill_object(object_id id) { - fm_debug_assert(id > 0); + fm_debug_assert(id != 0); auto cnt = _objects->erase(id); fm_debug_assert(cnt > 0); } |