diff --git a/include/ircd/m/event/get.h b/include/ircd/m/event/get.h index 6c47c9b40..b8c49b856 100644 --- a/include/ircd/m/event/get.h +++ b/include/ircd/m/event/get.h @@ -27,4 +27,47 @@ namespace ircd::m const_buffer get(const event::idx &, const string_view &key, const mutable_buffer &out); const_buffer get(const event::id &, const string_view &key, const mutable_buffer &out); + + template + typename std::enable_if::value, bool>::type + get(const event::idx &, const string_view &key, T &ret); + + template + typename std::enable_if::value, T>::type + get(const event::idx &, const string_view &key); +} + +template +typename std::enable_if::value, T>::type +ircd::m::get(const event::idx &event_idx, + const string_view &key) +{ + T ret; + const mutable_buffer buf + { + reinterpret_cast(&ret), sizeof(ret) + }; + + get(event_idx, key, buf); + return ret; +} + +template +typename std::enable_if::value, bool>::type +ircd::m::get(const event::idx &event_idx, + const string_view &key, + T &ret) +{ + const mutable_buffer buf + { + reinterpret_cast(&ret), sizeof(ret) + }; + + const auto rbuf + { + get(std::nothrow, event_idx, key, buf) + }; + + assert(size(rbuf) >= sizeof(T)); + return !empty(rbuf); }