Skip to content

Commit f5de841

Browse files
authored
simplied gather signatures (#116)
* simplied gather signatures * clang-format * revert CMakeList.txt change * fixed formatting issue
1 parent ba3abd3 commit f5de841

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

include/beman/execution26/detail/gather_signatures.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct same_tag<Tag, R(A...)> {
2323
};
2424
template <typename Tag>
2525
struct bound_tag {
26+
using type = Tag;
2627
template <typename T>
2728
using predicate = ::beman::execution26::detail::same_tag<Tag, T>;
2829
};
@@ -69,14 +70,12 @@ template <typename Tag,
6970
template <typename...> class Variant>
7071
requires requires {
7172
typename ::beman::execution26::detail::gather_signatures_helper<
72-
::beman::execution26::detail::meta::
73-
filter<::beman::execution26::detail::bound_tag<Tag>::template predicate, signatures>,
73+
::beman::execution26::detail::meta::filter_tag<::beman::execution26::detail::same_tag, Tag, signatures>,
7474
Tuple,
7575
Variant>::type;
7676
}
7777
using gather_signatures = ::beman::execution26::detail::gather_signatures_helper<
78-
::beman::execution26::detail::meta::filter<::beman::execution26::detail::bound_tag<Tag>::template predicate,
79-
signatures>,
78+
::beman::execution26::detail::meta::filter_tag<::beman::execution26::detail::same_tag, Tag, signatures>,
8079
Tuple,
8180
Variant>::type;
8281
} // namespace beman::execution26::detail

include/beman/execution26/detail/meta_filter.hpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,44 @@ namespace beman::execution26::detail::meta::detail {
1313
template <template <typename> class, typename>
1414
struct filter;
1515

16+
template <template <typename, typename> class, typename, typename>
17+
struct filter_tag;
18+
1619
template <template <typename> class Predicate, template <typename...> class List>
1720
struct filter<Predicate, List<>> {
1821
using type = List<>;
1922
};
2023

24+
template <template <typename, typename> class Predicate, typename Tag, template <typename...> class List>
25+
struct filter_tag<Predicate, Tag, List<>> {
26+
using type = List<>;
27+
};
28+
2129
template <template <typename> class Predicate, template <typename...> class List, typename H, typename... T>
2230
struct filter<Predicate, List<H, T...>> {
2331
using tail = typename beman::execution26::detail::meta::detail::filter<Predicate, List<T...>>::type;
2432
using type = ::std::conditional_t<Predicate<H>::value, ::beman::execution26::detail::meta::prepend<H, tail>, tail>;
2533
};
34+
35+
template <template <typename, typename> class Predicate,
36+
typename Tag,
37+
template <typename...> class List,
38+
typename H,
39+
typename... T>
40+
struct filter_tag<Predicate, Tag, List<H, T...>> {
41+
using tail = typename beman::execution26::detail::meta::detail::filter_tag<Predicate, Tag, List<T...>>::type;
42+
using type =
43+
::std::conditional_t<Predicate<Tag, H>::value, ::beman::execution26::detail::meta::prepend<H, tail>, tail>;
44+
};
2645
} // namespace beman::execution26::detail::meta::detail
2746

2847
namespace beman::execution26::detail::meta {
2948
template <template <typename> class Predicate, typename List>
3049
using filter = ::beman::execution26::detail::meta::detail::filter<Predicate, List>::type;
31-
}
50+
51+
template <template <typename, typename> class Predicate, typename Tag, typename List>
52+
using filter_tag = ::beman::execution26::detail::meta::detail::filter_tag<Predicate, Tag, List>::type;
53+
} // namespace beman::execution26::detail::meta
3254

3355
// ----------------------------------------------------------------------------
3456

0 commit comments

Comments
 (0)