diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-17 11:45:27 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-17 11:45:27 +0100 |
commit | dba1218fe0ed78d5b264538f2f4553900e9fd1eb (patch) | |
tree | 5253eb2f20484f100a0c40b10efb3babcfe9db17 /loader/ground-atlas.cpp | |
parent | 0e94c1acc5ed8d44ce26eb4b4cef8070442d10a4 (diff) |
a
Diffstat (limited to 'loader/ground-atlas.cpp')
-rw-r--r-- | loader/ground-atlas.cpp | 41 |
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()}; |