diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-15 23:57:47 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-15 23:57:47 +0100 |
commit | 652785f8fc5e312fbb5e5d29c3ac55ace1d9b327 (patch) | |
tree | 42613857bac41b1727febdb09b553e9f21da2ecd /src | |
parent | ba235622db7a79567166ea363dd3c0c3ef353d98 (diff) |
put all 'namespace detail' stuff in one place
Diffstat (limited to 'src')
-rw-r--r-- | src/entity.hpp | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/entity.hpp b/src/entity.hpp index 44f6295a..50b8a4d0 100644 --- a/src/entity.hpp +++ b/src/entity.hpp @@ -121,6 +121,32 @@ constexpr inline std::size_t strlen_(const char* s) #endif } +template<typename F, typename Tuple, std::size_t N> +requires std::invocable<F, decltype(std::get<N>(std::declval<Tuple>()))> +constexpr CORRADE_ALWAYS_INLINE void visit_tuple(F&& fun, Tuple&& tuple) +{ + using Size = std::tuple_size<std::remove_cvref_t<Tuple>>; + static_assert(N < Size()); + + fun(std::get<N>(tuple)); + if constexpr(N+1 < Size()) + visit_tuple<F, Tuple, N+1>(std::forward<F>(fun), std::forward<Tuple>(tuple)); +} + +template<typename F, typename Tuple, std::size_t N> +requires std::is_invocable_r_v<bool, F, decltype(std::get<N>(std::declval<Tuple>()))> +constexpr CORRADE_ALWAYS_INLINE bool find_in_tuple(F&& fun, Tuple&& tuple) +{ + using Size = std::tuple_size<std::remove_cvref_t<Tuple>>; + static_assert(N < Size()); + + if (fun(std::get<N>(tuple))) + return true; + if constexpr(N+1 < Size()) + return find_in_tuple<F, Tuple, N+1>(std::forward<F>(fun), std::forward<Tuple>(tuple)); + return false; +} + } // namespace detail struct EntityBase {}; @@ -162,36 +188,6 @@ struct Entity final : EntityBase { }; }; -namespace detail { - -template<typename F, typename Tuple, std::size_t N> -requires std::invocable<F, decltype(std::get<N>(std::declval<Tuple>()))> -constexpr CORRADE_ALWAYS_INLINE void visit_tuple(F&& fun, Tuple&& tuple) -{ - using Size = std::tuple_size<std::remove_cvref_t<Tuple>>; - static_assert(N < Size()); - - fun(std::get<N>(tuple)); - if constexpr(N+1 < Size()) - visit_tuple<F, Tuple, N+1>(std::forward<F>(fun), std::forward<Tuple>(tuple)); -} - -template<typename F, typename Tuple, std::size_t N> -requires std::is_invocable_r_v<bool, F, decltype(std::get<N>(std::declval<Tuple>()))> -constexpr CORRADE_ALWAYS_INLINE bool find_in_tuple(F&& fun, Tuple&& tuple) -{ - using Size = std::tuple_size<std::remove_cvref_t<Tuple>>; - static_assert(N < Size()); - - if (fun(std::get<N>(tuple))) - return true; - if constexpr(N+1 < Size()) - return find_in_tuple<F, Tuple, N+1>(std::forward<F>(fun), std::forward<Tuple>(tuple)); - return false; -} - -} // namespace detail - template<typename F, typename Tuple> constexpr void visit_tuple(F&& fun, Tuple&& tuple) { |