Skip to content

Commit c9f99aa

Browse files
refactor: Simplify traits implementation by introducing primitive_traits_impl
1 parent ab28749 commit c9f99aa

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

src/primitive/traits.cppm

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module;
22
#include <tuple>
3+
#include <type_traits>
34

45
export module mcpplibs.primitives.primitive.traits;
56

@@ -9,6 +10,26 @@ import mcpplibs.primitives.policy.impl;
910
import mcpplibs.primitives.policy.utility;
1011
import mcpplibs.primitives.underlying.traits;
1112

13+
namespace mcpplibs::primitives::meta::details {
14+
15+
template <typename T> struct primitive_traits_impl;
16+
17+
template <underlying_type T, policy::policy_type... Policies>
18+
struct primitive_traits_impl<primitive<T, Policies...>> {
19+
using value_type = T;
20+
using policies = std::tuple<Policies...>;
21+
using value_policy =
22+
policy::resolve_policy_t<policy::category::value, Policies...>;
23+
using type_policy =
24+
policy::resolve_policy_t<policy::category::type, Policies...>;
25+
using error_policy =
26+
policy::resolve_policy_t<policy::category::error, Policies...>;
27+
using concurrency_policy =
28+
policy::resolve_policy_t<policy::category::concurrency, Policies...>;
29+
};
30+
31+
} // namespace mcpplibs::primitives::meta::details
32+
1233
// Public API exported from this module.
1334
export namespace mcpplibs::primitives::meta {
1435
using policy_category = policy::category;
@@ -27,21 +48,8 @@ using default_policies =
2748
std::tuple<policy::defaults::value, policy::defaults::type,
2849
policy::defaults::error, policy::defaults::concurrency>;
2950

30-
template <typename T> struct traits;
31-
32-
template <underlying_type T, policy::policy_type... Policies>
33-
struct traits<primitive<T, Policies...>> {
34-
using value_type = T;
35-
using policies = std::tuple<Policies...>;
36-
using value_policy =
37-
policy::resolve_policy_t<policy::category::value, Policies...>;
38-
using type_policy =
39-
policy::resolve_policy_t<policy::category::type, Policies...>;
40-
using error_policy =
41-
policy::resolve_policy_t<policy::category::error, Policies...>;
42-
using concurrency_policy =
43-
policy::resolve_policy_t<policy::category::concurrency, Policies...>;
44-
};
51+
template <typename T>
52+
using traits = details::primitive_traits_impl<std::remove_cvref_t<T>>;
4553

4654
} // namespace mcpplibs::primitives::meta
4755

0 commit comments

Comments
 (0)