conduit 0.6.0
Modern C++23 header-only event-dispatching / event-transport library
Loading...
Searching...
No Matches
event.hpp
Go to the documentation of this file.
1#pragma once
2
9
10#include <conduit/flags.hpp>
11
12#include <string_view>
13
14#include <parcel/parcel.h>
15
16namespace conduit {
17
21inline constexpr std::string_view event_kind_prefix = "conduit:event:";
22
35template <typename Self, parcel::FixedString Name>
36class Event : public parcel::SelfStructCell<Self> {
37public:
39 static constexpr std::string_view event_name_v = Name.view();
40
42 static constexpr std::string_view kind_id = parcel::id_join_v<event_kind_prefix, event_name_v>;
43
44 static auto field_descriptors() {
45 parcel::FieldsBuilder<Self> b;
46 return Self::event_field_descriptors(b).build();
47 }
48
51 static parcel::DisplayInfo display_info() {
52 return {};
53 }
54};
55
56// ---------------------------------------------------------------------------
57// DefaultFlags<...> mixin + event_traits<T> trait for declaring default flags
58// applied automatically by the builder.
59// ---------------------------------------------------------------------------
60
63template <typename... Fs>
67 return flags::FlagSet::of<Fs...>();
68 }
69};
70
73template <typename T>
74struct event_traits { // NOLINT(readability-identifier-naming)
76 return flags::FlagSet{};
77 }
78};
79
80namespace detail {
81
82template <typename T>
83concept HasDefaultFlagsMixin = requires { typename T::conduit_default_flags_tag; };
84
85template <typename T>
88 if constexpr (HasDefaultFlagsMixin<T>) {
89 for (const auto& f : T::default_flags_value()) {
90 s.insert(f);
91 }
92 }
93 return s;
94}
95
96} // namespace detail
97
98} // namespace conduit
CRTP library base for conduit events.
Definition event.hpp:36
static constexpr std::string_view event_name_v
Bare event name (Name) — used by the bus to key listeners.
Definition event.hpp:39
static auto field_descriptors()
Definition event.hpp:44
static constexpr std::string_view kind_id
Wire-stable kind id ("conduit:event:" + Name).
Definition event.hpp:42
static parcel::DisplayInfo display_info()
Cell-level descriptive display info.
Definition event.hpp:51
Conduit flag tags, built atop comms::Flag / comms::FlagSet.
flags::FlagSet collect_default_flags()
Definition event.hpp:86
comms::FlagSet FlagSet
Definition flags.hpp:32
Definition builder.hpp:22
constexpr std::string_view event_kind_prefix
Wire-kind prefix shared by every conduit event type.
Definition event.hpp:21
Mixin marker.
Definition event.hpp:64
void conduit_default_flags_tag
Definition event.hpp:65
static flags::FlagSet default_flags_value()
Definition event.hpp:66
Non-intrusive trait.
Definition event.hpp:74
static flags::FlagSet default_flags()
Definition event.hpp:75