Skip to content

Commit c17aeb4

Browse files
committed
simplied gather signatures
1 parent ba3abd3 commit c17aeb4

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

include/beman/execution26/detail/gather_signatures.hpp

Lines changed: 3 additions & 2 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
};
@@ -70,12 +71,12 @@ template <typename Tag,
7071
requires requires {
7172
typename ::beman::execution26::detail::gather_signatures_helper<
7273
::beman::execution26::detail::meta::
73-
filter<::beman::execution26::detail::bound_tag<Tag>::template predicate, signatures>,
74+
filter_tag<::beman::execution26::detail::same_tag, Tag, signatures>,
7475
Tuple,
7576
Variant>::type;
7677
}
7778
using gather_signatures = ::beman::execution26::detail::gather_signatures_helper<
78-
::beman::execution26::detail::meta::filter<::beman::execution26::detail::bound_tag<Tag>::template predicate,
79+
::beman::execution26::detail::meta::filter_tag<::beman::execution26::detail::same_tag, Tag,
7980
signatures>,
8081
Tuple,
8182
Variant>::type;

include/beman/execution26/detail/meta_filter.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,39 @@ 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, typename Tag, template <typename...> class List, typename H, typename... T>
36+
struct filter_tag<Predicate, Tag, List<H, T...>> {
37+
using tail = typename beman::execution26::detail::meta::detail::filter_tag<Predicate, Tag, List<T...>>::type;
38+
using type = ::std::conditional_t<Predicate<Tag, H>::value, ::beman::execution26::detail::meta::prepend<H, tail>, tail>;
39+
};
2640
} // namespace beman::execution26::detail::meta::detail
2741

2842
namespace beman::execution26::detail::meta {
2943
template <template <typename> class Predicate, typename List>
3044
using filter = ::beman::execution26::detail::meta::detail::filter<Predicate, List>::type;
45+
46+
template <template <typename, typename> class Predicate, typename Tag, typename List>
47+
using filter_tag = ::beman::execution26::detail::meta::detail::filter_tag<
48+
Predicate, Tag, List>::type;
3149
}
3250

3351
// ----------------------------------------------------------------------------

0 commit comments

Comments
 (0)