summaryrefslogtreecommitdiffhomepage
path: root/loader
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-04-08 17:05:16 +0200
committerStanislaw Halik <sthalik@misaki.pl>2024-04-08 19:40:10 +0200
commit064379bd0bd929f6b87c50f740e9a783b4d9e054 (patch)
treeb717428ace85bde06fff19ac96b11d95787b538f /loader
parent4eefaf4e12199c071d2e6ee0d99b46d2e1d45557 (diff)
a
Diffstat (limited to 'loader')
-rw-r--r--loader/atlas-loader.inl40
-rw-r--r--loader/policy.hpp2
2 files changed, 22 insertions, 20 deletions
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 <cr/Optional.h>
#include <cr/GrowableArray.h>
+#ifdef __GNUG__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wswitch-default"
+#endif
+
namespace floormat::loader_detail {
template<typename ATLAS, typename TRAITS>
@@ -68,30 +73,21 @@ auto atlas_loader<ATLAS, TRAITS>::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<ATLAS, TRAITS>::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<ATLAS, TRAITS>::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<ATLAS, TRAITS>::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<ATLAS, TRAITS>::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