From 064379bd0bd929f6b87c50f740e9a783b4d9e054 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 8 Apr 2024 17:05:16 +0200 Subject: a --- loader/atlas-loader.inl | 40 +++++++++++++++++++++------------------- loader/policy.hpp | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) (limited to 'loader') diff --git a/loader/atlas-loader.inl b/loader/atlas-loader.inl index 55691597..8f1d1db6 100644 --- a/loader/atlas-loader.inl +++ b/loader/atlas-loader.inl @@ -10,6 +10,11 @@ #include #include +#ifdef __GNUG__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wswitch-default" +#endif + namespace floormat::loader_detail { template @@ -68,30 +73,21 @@ auto atlas_loader::get_atlas(StringView name, const loader_policy atlas_list(); const AtlasPtr& invalid_atlas = t.atlas_of(get_invalid_atlas()); - switch (p) - { - using enum loader_policy; - case error: - case ignore: - case warn: - break; - default: - fm_abort("invalid loader_policy (%d)", (int)p); - } - CORRADE_ASSUME(p <= loader_policy::ignore); - + fm_assert(p < loader_policy::COUNT); if (name == loader.INVALID) [[unlikely]] + { switch (p) { using enum loader_policy; - default: - std::unreachable(); + case COUNT: std::unreachable(); case error: goto error; case ignore: case warn: return invalid_atlas; } + std::unreachable(); + } fm_soft_assert(loader.check_atlas_name(name)); @@ -102,14 +98,14 @@ auto atlas_loader::get_atlas(StringView name, const loader_policy switch (p) { using enum loader_policy; - default: - std::unreachable(); + case COUNT: std::unreachable(); case error: goto error; case warn: case ignore: return invalid_atlas; } + std::unreachable(); } else { @@ -147,11 +143,12 @@ auto atlas_loader::get_atlas(StringView name, const loader_policy return t.atlas_of(c); } else + { + fm_assert(p < loader_policy::COUNT); switch (p) { using enum loader_policy; - default: - std::unreachable(); + case COUNT: std::unreachable(); case error: goto error; case warn: @@ -159,7 +156,8 @@ auto atlas_loader::get_atlas(StringView name, const loader_policy case ignore: return invalid_atlas; } - + std::unreachable(); + } std::unreachable(); fm_assert(false); @@ -228,3 +226,7 @@ void atlas_loader::register_cell(Cell&& c) } } // namespace floormat::loader_detail + +#ifdef __GNUG__ +#pragma GCC diagnostic pop +#endif diff --git a/loader/policy.hpp b/loader/policy.hpp index 438b4248..9815886b 100644 --- a/loader/policy.hpp +++ b/loader/policy.hpp @@ -4,7 +4,7 @@ namespace floormat { enum class loader_policy : uint8_t { - error, warn, ignore, DEFAULT = error, + error, warn, ignore, COUNT, DEFAULT = error, }; } // namespace floormat -- cgit v1.2.3