diff --git a/include/ircd/m/event/auth.h b/include/ircd/m/event/auth.h index 9ba3e6ba1..8916c7413 100644 --- a/include/ircd/m/event/auth.h +++ b/include/ircd/m/event/auth.h @@ -39,6 +39,8 @@ struct ircd::m::event::auth { assert(idx); } + + static void rebuild(); }; struct ircd::m::event::auth::chain diff --git a/include/ircd/m/event/refs.h b/include/ircd/m/event/refs.h index 1784185ed..aa0602091 100644 --- a/include/ircd/m/event/refs.h +++ b/include/ircd/m/event/refs.h @@ -13,16 +13,18 @@ struct ircd::m::event::refs { - using closure_bool = event::closure_idx_bool; - event::idx idx; public: + using closure_bool = event::closure_idx_bool; + bool for_each(const closure_bool &) const; bool has(const event::idx &) const noexcept; size_t count() const noexcept; refs(const event::idx &idx) noexcept; + + static void rebuild(); }; inline diff --git a/ircd/m_event.cc b/ircd/m_event.cc index cdb13680b..f0f9faebd 100644 --- a/ircd/m_event.cc +++ b/ircd/m_event.cc @@ -28,14 +28,14 @@ std::ostream & ircd::m::pretty(std::ostream &s, const event &e) { - using prototype = void (std::ostream &, const event &); + using prototype = std::ostream &(std::ostream &, const event &); + static mods::import<prototype> pretty { - "m_event", "pretty__event" + "m_event", "ircd::m::pretty" }; - pretty(s, e); - return s; + return pretty(s, e); } std::string @@ -55,14 +55,14 @@ ircd::m::pretty_oneline(std::ostream &s, const event &e, const bool &content_keys) { - using prototype = void (std::ostream &, const event &, const bool &); + using prototype = std::ostream &(std::ostream &, const event &, const bool &); + static mods::import<prototype> pretty_oneline { - "m_event", "pretty_oneline__event" + "m_event", "ircd::m::pretty_oneline" }; - pretty_oneline(s, e, content_keys); - return s; + return pretty_oneline(s, e, content_keys); } std::string @@ -80,10 +80,11 @@ std::ostream & ircd::m::pretty_msgline(std::ostream &s, const event &e) { - using prototype = void (std::ostream &, const event &); + using prototype = std::ostream &(std::ostream &, const event &); + static mods::import<prototype> pretty_msgline { - "m_event", "pretty_msgline__event" + "m_event", "ircd::m::pretty_msgline" }; pretty_msgline(s, e); @@ -105,10 +106,11 @@ std::ostream & ircd::m::pretty(std::ostream &s, const event::prev &prev) { - using prototype = void (std::ostream &, const event::prev &); + using prototype = std::ostream &(std::ostream &, const event::prev &); + static mods::import<prototype> pretty { - "m_event", "pretty__prev" + "m_event", "ircd::m::pretty" }; pretty(s, prev); @@ -130,10 +132,11 @@ std::ostream & ircd::m::pretty_oneline(std::ostream &s, const event::prev &prev) { - using prototype = void (std::ostream &, const event::prev &); + using prototype = std::ostream &(std::ostream &, const event::prev &); + static mods::import<prototype> pretty_oneline { - "m_event", "pretty_oneline__prev" + "m_event", "ircd::m::pretty_oneline" }; pretty_oneline(s, prev); @@ -1129,6 +1132,19 @@ ircd::m::is_power_event(const m::event &event) // event::auth::chain // +void +ircd::m::event::auth::rebuild() +{ + using prototype = void (); + + static mods::import<prototype> rebuild + { + "m_event", "ircd::m::event::auth::rebuild" + }; + + rebuild(); +} + bool ircd::m::event::auth::chain::for_each(const closure &closure) const @@ -1141,14 +1157,14 @@ ircd::m::event::auth::chain::for_each(const string_view &type, const closure &c) const { - using prototype = bool (event::auth, const string_view &, const closure &); + using prototype = bool (chain::*)(const string_view &, const closure &) const; - static mods::import<prototype> auth_chain_for_each + static mods::import<prototype> call { - "m_event", "auth_chain_for_each" + "m_event", "ircd::m::event::auth::chain::for_each" }; - return auth_chain_for_each(auth, type, c); + return (*this.**call)(type, c); } // @@ -1271,6 +1287,19 @@ const // event/refs.h // +void +ircd::m::event::refs::rebuild() +{ + using prototype = void (); + + static mods::import<prototype> rebuild + { + "m_event", "ircd::m::event::refs::rebuild" + }; + + rebuild(); +} + size_t ircd::m::event::refs::count() const noexcept @@ -1981,7 +2010,7 @@ ircd::m::event::essential(json::iov &event, static mods::import<prototype> _essential { - "m_event", "_essential__iov" + "m_event", "ircd::m::event::essential" }; _essential(event, contents, closure); @@ -1991,11 +2020,11 @@ ircd::m::event ircd::m::essential(m::event event, const mutable_buffer &contentbuf) { - using prototype = m::event &(m::event &, const mutable_buffer &); + using prototype = m::event (m::event, const mutable_buffer &); static mods::import<prototype> _essential { - "m_event", "_essential" + "m_event", "ircd::m::essential" }; return _essential(event, contentbuf); diff --git a/modules/console.cc b/modules/console.cc index 964238c9b..b4882b11f 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -5862,13 +5862,7 @@ console_cmd__event__refs(opt &out, const string_view &line) bool console_cmd__event__refs__rebuild(opt &out, const string_view &line) { - using prototype = void (); - static mods::import<prototype> rebuild - { - "m_event", "event_refs__rebuild" - }; - - rebuild(); + m::event::refs::rebuild(); out << "done" << std::endl; return true; } @@ -5964,13 +5958,7 @@ console_cmd__event__auth__chain(opt &out, const string_view &line) bool console_cmd__event__auth__rebuild(opt &out, const string_view &line) { - using prototype = void (); - static mods::import<prototype> rebuild - { - "m_event", "event_auth__rebuild" - }; - - rebuild(); + m::event::refs::rebuild(); out << "done" << std::endl; return true; } diff --git a/modules/m_event.cc b/modules/m_event.cc index f97845db9..63fd142cf 100644 --- a/modules/m_event.cc +++ b/modules/m_event.cc @@ -11,18 +11,6 @@ using namespace ircd::m; using namespace ircd; -namespace ircd::m -{ - extern "C" void - _essential__iov(json::iov &event, - const json::iov &contents, - const event::closure_iov_mutable &closure); - - extern "C" m::event & - _essential(m::event &event, - const mutable_buffer &contentbuf); -} - mapi::header IRCD_MODULE { @@ -30,9 +18,10 @@ IRCD_MODULE }; void -ircd::m::_essential__iov(json::iov &event, - const json::iov &contents, - const event::closure_iov_mutable &closure) +IRCD_MODULE_EXPORT +ircd::m::event::essential(json::iov &event, + const json::iov &contents, + const event::closure_iov_mutable &closure) { const auto &type { @@ -152,9 +141,10 @@ ircd::m::_essential__iov(json::iov &event, } } -ircd::m::event & -ircd::m::_essential(m::event &event, - const mutable_buffer &contentbuf) +ircd::m::event +IRCD_MODULE_EXPORT +ircd::m::essential(m::event event, + const mutable_buffer &contentbuf) { const auto &type { @@ -234,9 +224,10 @@ ircd::m::_essential(m::event &event, return event; } -extern "C" void -pretty__event(std::ostream &s, - const event &event) +std::ostream & +IRCD_MODULE_EXPORT +ircd::m::pretty(std::ostream &s, + const event &event) { const auto out{[&s] (const string_view &key, auto&& val) @@ -343,12 +334,15 @@ pretty__event(std::ostream &s, << std::setw(5) << std::right << size(string_view{content.second}) << " bytes " << ':' << content.first << std::endl; + + return s; } -extern "C" void -pretty_oneline__event(std::ostream &s, - const event &event, - const bool &content_keys) +std::ostream & +IRCD_MODULE_EXPORT +ircd::m::pretty_oneline(std::ostream &s, + const event &event, + const bool &content_keys) { const auto out{[&s] (const string_view &key, auto&& val) @@ -442,11 +436,14 @@ pretty_oneline__event(std::ostream &s, for(const auto &content : contents) s << content.first << " "; } + + return s; } -extern "C" void -pretty_msgline__event(std::ostream &s, - const event &event) +std::ostream & +IRCD_MODULE_EXPORT +ircd::m::pretty_msgline(std::ostream &s, + const event &event) { s << json::get<"depth"_>(event) << " :"; s << json::get<"type"_>(event) << " "; @@ -481,11 +478,14 @@ pretty_msgline__event(std::ostream &s, s << string_view{content}; break; } + + return s; } -extern "C" void -pretty__prev(std::ostream &s, - const event::prev &prev) +std::ostream & +IRCD_MODULE_EXPORT +ircd::m::pretty(std::ostream &s, + const event::prev &prev) { const auto out{[&s] (const string_view &key, auto&& val) @@ -532,11 +532,14 @@ pretty__prev(std::ostream &s, s << std::endl; } + + return s; } -extern "C" void -pretty_oneline__prev(std::ostream &s, - const event::prev &prev) +std::ostream & +IRCD_MODULE_EXPORT +ircd::m::pretty_oneline(std::ostream &s, + const event::prev &prev) { const auto &auth_events{json::get<"auth_events"_>(prev)}; s << "A[ "; @@ -555,10 +558,13 @@ pretty_oneline__prev(std::ostream &s, for(const json::array prev_event : prev_events) s << unquote(prev_event[0]) << " "; s << "] "; + + return s; } -extern "C" void -event_refs__rebuild() +void +IRCD_MODULE_EXPORT +ircd::m::event::refs::rebuild() { static const size_t pool_size{64}; static const size_t log_interval{8192}; @@ -618,8 +624,43 @@ event_refs__rebuild() txn(); } -extern "C" void -event_auth__rebuild() +bool +IRCD_MODULE_EXPORT +ircd::m::event::auth::chain::for_each(const string_view &type, + const event::auth::chain::closure &closure) +const +{ + event::idx next(0); + event::auth auth(this->auth); + uint64_t depth[2] {uint64_t(-1), 0}; do + { + auth.for_each(type, [&depth, &next] + (const event::idx &event_idx) + { + if(!m::get(event_idx, "depth", depth[1])) + return true; + + if(depth[1] >= depth[0]) + return true; + + depth[0] = depth[1]; + next = event_idx; + return true; + }); + + if(!closure(next)) + return false; + + auth.idx = next; + next = 0; + } + while(auth.idx); + return true; +} + +void +IRCD_MODULE_EXPORT +ircd::m::event::auth::rebuild() { static const size_t pool_size{96}; static const size_t log_interval{8192}; @@ -682,35 +723,3 @@ event_auth__rebuild() txn(); } - -extern "C" bool -auth_chain_for_each(event::auth auth, - const string_view &type, - const event::auth::chain::closure &closure) -{ - event::idx next(0); - uint64_t depth[2] {uint64_t(-1), 0}; do - { - auth.for_each(type, [&depth, &next] - (const event::idx &event_idx) - { - if(!m::get(event_idx, "depth", depth[1])) - return true; - - if(depth[1] >= depth[0]) - return true; - - depth[0] = depth[1]; - next = event_idx; - return true; - }); - - if(!closure(next)) - return false; - - auth.idx = next; - next = 0; - } - while(auth.idx); - return true; -}