10#include "introspect.hpp"
11#include "processor.hpp"
12#include "type_list.hpp"
21template <
typename EventList,
bool Inverted,
typename Downstream>
23 static_assert(processor<Downstream>);
25 Downstream downstream;
28 explicit select(Downstream downstream)
29 : downstream(std::move(downstream)) {}
31 [[nodiscard]]
auto introspect_node() const -> processor_info {
32 return processor_info(
this,
"select");
35 [[nodiscard]]
auto introspect_graph() const -> processor_graph {
36 return downstream.introspect_graph().push_entry_point(
this);
39 template <
typename AnyEvent>
41 (convertible_to_type_list_member<std::remove_cvref_t<AnyEvent>,
42 EventList> != Inverted) and
43 handler_for<Downstream, std::remove_cvref_t<AnyEvent>>)
44 void handle(AnyEvent &&event) {
45 downstream.handle(std::forward<AnyEvent>(event));
48 template <
typename AnyEvent>
49 requires(convertible_to_type_list_member<std::remove_cvref_t<AnyEvent>,
50 EventList> == Inverted)
51 void handle(AnyEvent && ) {}
53 void flush() { downstream.flush(); }
77template <
typename EventList,
typename Downstream>
79 return internal::select<EventList, false, Downstream>(
80 std::move(downstream));
101template <
typename Downstream>
auto select_none(Downstream downstream) {
102 return internal::select<type_list<>,
false, Downstream>(
103 std::move(downstream));
125template <
typename EventList,
typename Downstream>
127 return internal::select<EventList, true, Downstream>(
128 std::move(downstream));
148template <
typename Downstream>
auto select_all(Downstream downstream) {
149 return internal::select<type_list<>,
true, Downstream>(
150 std::move(downstream));
auto select_all(Downstream downstream)
Create a processor that passes all events.
Definition select.hpp:148
auto select(Downstream downstream)
Create a processor that passes a given set of events and discards others.
Definition select.hpp:78
auto select_none(Downstream downstream)
Create a processor that passes no events.
Definition select.hpp:101
auto select_not(Downstream downstream)
Create a processor that discards a given set of events and passes others.
Definition select.hpp:126
libtcspc namespace.
Definition acquire.hpp:29