From 1df1897e6d8e546a4a0143c797db774f98c34afe Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 8 Feb 2019 07:05:29 -0800 Subject: [PATCH] ircd::m::event::get: Add templates to return integral values. --- include/ircd/m/event/get.h | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) 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); }