From 94746acef6ab7715cafbf0879fb2b4d7fa6c0099 Mon Sep 17 00:00:00 2001 From: Ben Deane Date: Sat, 19 Aug 2023 19:40:51 -0600 Subject: [PATCH] :art: Simplify `builder_meta` machinery - simplify exposing `builder_t` and `interface_t` - remove vestigial `traits` namespace --- include/cib/builder_meta.hpp | 18 ++++++++++++------ include/cib/built.hpp | 4 ++-- include/cib/config.hpp | 1 - include/cib/detail/builder_traits.hpp | 21 --------------------- include/cib/detail/extend.hpp | 4 ++-- test/cib/builder_meta.cpp | 15 ++++++++------- test/cib/callback.cpp | 12 ++++++------ 7 files changed, 30 insertions(+), 45 deletions(-) delete mode 100644 include/cib/detail/builder_traits.hpp diff --git a/include/cib/builder_meta.hpp b/include/cib/builder_meta.hpp index 0ac869d1..396eb5d1 100644 --- a/include/cib/builder_meta.hpp +++ b/include/cib/builder_meta.hpp @@ -4,12 +4,12 @@ namespace cib { /** * Describe a builder to cib. * - * @tparam BuilderType + * @tparam Builder * The initial builder type cib should use when creating a builder. - * This is only the initial type, the BuilderType::add(...) function + * This is only the initial type, the Builder::add(...) function * may return a different type and cib will track that correctly. * - * @tparam InterfaceType + * @tparam Interface * The type-erased interface services built with this builder * will implement. For example, cib::callback allows many other * callables to get executed when its service gets invoked. The @@ -19,8 +19,14 @@ namespace cib { * * @example cib::callback_meta */ -template struct builder_meta { - auto builder() -> BuilderType; - auto interface() -> InterfaceType; +template struct builder_meta { + using builder_t = Builder; + using interface_t = Interface; }; + +template +using builder_t = typename BuilderMeta::builder_t; + +template +using interface_t = typename BuilderMeta::interface_t; } // namespace cib diff --git a/include/cib/built.hpp b/include/cib/built.hpp index 5b703b25..e7d58dde 100644 --- a/include/cib/built.hpp +++ b/include/cib/built.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace cib { /** @@ -11,5 +11,5 @@ namespace cib { * * @see cib::builder_meta */ -template traits::interface_t service; +template interface_t service; } // namespace cib diff --git a/include/cib/config.hpp b/include/cib/config.hpp index 9e687cb5..dbadc821 100644 --- a/include/cib/config.hpp +++ b/include/cib/config.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include #include #include #include diff --git a/include/cib/detail/builder_traits.hpp b/include/cib/detail/builder_traits.hpp deleted file mode 100644 index 88cc15e4..00000000 --- a/include/cib/detail/builder_traits.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include - -namespace cib::traits { -template struct builder { - using type = decltype(std::declval().builder()); -}; - -template -using builder_t = typename builder::type; - -template constexpr builder_t builder_v = {}; - -template struct interface { - using type = decltype(std::declval().interface()); -}; - -template -using interface_t = typename interface::type; -} // namespace cib::traits diff --git a/include/cib/detail/extend.hpp b/include/cib/detail/extend.hpp index 25801999..d6d133b8 100644 --- a/include/cib/detail/extend.hpp +++ b/include/cib/detail/extend.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include #include @@ -9,7 +9,7 @@ namespace cib::detail { template struct extend : public config_item { using service_type = ServiceType; - constexpr static auto builder = cib::traits::builder_v; + constexpr static auto builder = cib::builder_t{}; cib::tuple args_tuple; CIB_CONSTEVAL explicit extend(Args const &...args) : args_tuple{args...} {} diff --git a/test/cib/builder_meta.cpp b/test/cib/builder_meta.cpp index 2b019195..eb81729f 100644 --- a/test/cib/builder_meta.cpp +++ b/test/cib/builder_meta.cpp @@ -1,19 +1,20 @@ -#include +#include #include #include -struct TestBuilderTag {}; -struct TestInterfaceTag {}; +namespace { +struct TestBuilderTag; +struct TestInterfaceTag; struct test_builder_meta : public cib::builder_meta {}; +} // namespace TEST_CASE( "builder_meta builder and interface type traits return correct values") { - REQUIRE(std::is_same_v>); - REQUIRE(std::is_same_v>); + REQUIRE(std::is_same_v>); + REQUIRE( + std::is_same_v>); } diff --git a/test/cib/callback.cpp b/test/cib/callback.cpp index ee173ab8..d789d488 100644 --- a/test/cib/callback.cpp +++ b/test/cib/callback.cpp @@ -10,13 +10,13 @@ template constexpr static auto build() { template constexpr static bool built_is_convertable_to_interface(BuiltCallback) { - using interface_type = cib::traits::interface_t; + using interface_type = cib::interface_t; return std::is_convertible_v; } struct EmptyCallbackNoArgs { using meta = cib::callback_meta<>; - constexpr static auto value = cib::traits::builder_t{}; + constexpr static auto value = cib::builder_t{}; }; TEST_CASE("empty callback with no args", "[callback]") { @@ -35,7 +35,7 @@ template static bool is_callback_invoked = false; struct CallbackNoArgsWithSingleExtension { using meta = cib::callback_meta<>; constexpr static auto value = []() { - auto const builder = cib::traits::builder_t{}; + auto const builder = cib::builder_t{}; return builder.add([]() { is_callback_invoked<0> = true; }); }(); }; @@ -66,7 +66,7 @@ struct CallbackNoArgsWithMultipleExtensions { }; constexpr static auto value = []() { - auto const builder = cib::traits::builder_t{}; + auto const builder = cib::builder_t{}; return builder.add([]() { is_callback_invoked<0> = true; }) .add(extension_one) @@ -97,7 +97,7 @@ TEST_CASE("callback with no args with multiple extensions", "[callback]") { struct CallbackWithArgsWithNoExtensions { using meta = cib::callback_meta; - constexpr static auto value = cib::traits::builder_t{}; + constexpr static auto value = cib::builder_t{}; }; TEST_CASE("callback with args with no extensions", "[callback]") { @@ -128,7 +128,7 @@ struct CallbackWithArgsWithMultipleExtensions { }; constexpr static auto value = []() { - auto const builder = cib::traits::builder_t{}; + auto const builder = cib::builder_t{}; return builder .add([](int a, bool b) {