summaryrefslogtreecommitdiffhomepage
path: root/loader/ground-atlas.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-01-17 11:45:27 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-01-17 11:45:27 +0100
commitdba1218fe0ed78d5b264538f2f4553900e9fd1eb (patch)
tree5253eb2f20484f100a0c40b10efb3babcfe9db17 /loader/ground-atlas.cpp
parent0e94c1acc5ed8d44ce26eb4b4cef8070442d10a4 (diff)
a
Diffstat (limited to 'loader/ground-atlas.cpp')
-rw-r--r--loader/ground-atlas.cpp41
1 files changed, 32 insertions, 9 deletions
diff --git a/loader/ground-atlas.cpp b/loader/ground-atlas.cpp
index feae0ac5..1a0d3905 100644
--- a/loader/ground-atlas.cpp
+++ b/loader/ground-atlas.cpp
@@ -30,10 +30,22 @@ std::shared_ptr<ground_atlas> loader_impl::get_ground_atlas(StringView name, Vec
}
// todo copypasta from wall-atlas.cpp
-std::shared_ptr<class ground_atlas> loader_impl::ground_atlas(StringView name, bool fail_ok) noexcept(false)
+std::shared_ptr<class ground_atlas> loader_impl::ground_atlas(StringView name, loader_policy policy) noexcept(false)
{
(void)ground_atlas_list();
- fm_assert(fail_ok || name != INVALID);
+
+ switch (policy)
+ {
+ case loader_policy::error:
+ fm_assert(name != INVALID);
+ break;
+ case loader_policy::ignore:
+ case loader_policy::warn:
+ break;
+ default:
+ fm_abort("invalid loader_policy");
+ }
+
fm_soft_assert(check_atlas_name(name));
auto it = ground_atlas_map.find(name);
@@ -41,10 +53,15 @@ std::shared_ptr<class ground_atlas> loader_impl::ground_atlas(StringView name, b
{
if (it->second == (ground_info*)-1) [[unlikely]]
{
- if (fail_ok) [[likely]]
- goto missing_ok;
- else
+ switch (policy)
+ {
+ case loader_policy::error:
goto error;
+ case loader_policy::warn:
+ case loader_policy::ignore:
+ goto missing_ok;
+ }
+ std::unreachable();
}
else if (!it->second->atlas)
return it->second->atlas = get_ground_atlas(name, it->second->size, it->second->pass);
@@ -53,13 +70,19 @@ std::shared_ptr<class ground_atlas> loader_impl::ground_atlas(StringView name, b
}
else
{
- if (fail_ok) [[likely]]
- goto missing;
- else
+ switch (policy)
+ {
+ case loader_policy::error:
goto error;
+ case loader_policy::warn:
+ goto missing_warn;
+ case loader_policy::ignore:
+ goto missing_ok;
+ }
+ std::unreachable();
}
-missing:
+missing_warn:
{
missing_ground_atlases.push_back(String { AllocatedInit, name });
auto string_view = StringView{missing_ground_atlases.back()};