From bae8e3b869b780e7b52b43dbc22ace219cdc84be Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 21 Feb 2018 15:00:02 -0800 Subject: [PATCH] ircd::m: Add reverse reflection for event::conforms code. --- include/ircd/m/event.h | 1 + ircd/m/event.cc | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/ircd/m/event.h b/include/ircd/m/event.h index ab506c6e8..1bb7e2dde 100644 --- a/include/ircd/m/event.h +++ b/include/ircd/m/event.h @@ -150,6 +150,7 @@ struct ircd::m::event::conforms conforms(const event &); conforms(const event &, const uint64_t &skip); + static code reflect(const string_view &); friend string_view reflect(const code &); friend std::ostream &operator<<(std::ostream &, const conforms &); }; diff --git a/ircd/m/event.cc b/ircd/m/event.cc index 188129e45..293b12ef6 100644 --- a/ircd/m/event.cc +++ b/ircd/m/event.cc @@ -553,6 +553,23 @@ catch(const std::out_of_range &e) return "??????"_sv; } +ircd::m::event::conforms::code +ircd::m::event::conforms::reflect(const string_view &name) +{ + const auto it + { + std::find(begin(event_conforms_reflects), end(event_conforms_reflects), name) + }; + + if(it == end(event_conforms_reflects)) + throw std::out_of_range + { + "There is no event::conforms code by that name." + }; + + return code(std::distance(begin(event_conforms_reflects), it)); +} + ircd::m::event::conforms::conforms(const event &e, const uint64_t &skip) :conforms{e} @@ -652,7 +669,7 @@ const if(begin(buf) != begin(out)) consume(buf, copy(buf, " "_sv)); - consume(buf, copy(buf, reflect(code(i)))); + consume(buf, copy(buf, m::reflect(code(i)))); } return { data(out), begin(buf) };