From 1192ef307321d3e4b49af15b9ad45860047e04de Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 11 Oct 2023 17:46:36 -0400 Subject: [PATCH] + EventTimeFn<> template; automate common timestamp patterns --- include/xo/reactor/EventTimeFn2.hpp | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 include/xo/reactor/EventTimeFn2.hpp diff --git a/include/xo/reactor/EventTimeFn2.hpp b/include/xo/reactor/EventTimeFn2.hpp new file mode 100644 index 00000000..6d2b0170 --- /dev/null +++ b/include/xo/reactor/EventTimeFn2.hpp @@ -0,0 +1,60 @@ +/* @file EventTimeFn2.hpp */ + +#pragma once + +#include "xo/refcnt/Refcounted.hpp" +#include + +namespace xo { + namespace reactor { + template + class EventTimeFn { + public: + using utc_nanos = xo::time::utc_nanos; + using event_t = Event; + + public: + static utc_nanos event_tm(event_t const & ev) { return ev.tm(); } + + utc_nanos operator()(event_t const & ev) const { return EventTimeFn::event_tm(ev); } + }; + + template + class EventTimeFn> { + public: + using utc_nanos = xo::time::utc_nanos; + using event_t = xo::ref::rp; + + public: + static utc_nanos event_tm(event_t const & ev) { return ev->tm(); } + + utc_nanos operator()(event_t const & ev) const { return EventTimeFn::event_tm(ev); } + }; + + template + class EventTimeFn { + public: + using utc_nanos = xo::time::utc_nanos; + using event_t = T*; + + public: + static utc_nanos event_tm(event_t ev) { return ev->tm(); } + + utc_nanos operator()(event_t const & ev) const { return EventTimeFn::event_tm(ev); } + }; + + template + class EventTimeFn> { + public: + using utc_nanos = xo::time::utc_nanos; + using event_t = std::pair; + + public: + static utc_nanos event_tm(event_t const & ev) { return ev.first; } + + utc_nanos operator()(event_t const & ev) const { return EventTimeFn::event_tm(ev); } + }; + } /*namespace reactor*/ +} /*namespace xo*/ + +/* end EventTimeFn2.hpp */