/* @file EventTimeFn.hpp */ #pragma once //#include "time/Time.hpp" #include "xo/indentlog/timeutil/timeutil.hpp" #include namespace xo { namespace reactor { template concept EventTimeConcept = requires(EventTimeFn etfn, Event ev) { { etfn(ev) } -> std::same_as; }; template class StructEventTimeFn { public: using event_t = Event; using utc_nanos = xo::time::utc_nanos; public: utc_nanos operator()(Event const & ev) const { return ev.tm(); } }; /*StructEventTimeFn*/ template class PtrEventTimeFn { public: using event_t = Event; using utc_nanos = xo::time::utc_nanos; public: utc_nanos operator()(Event const & ev) const { return ev->tm(); } }; /*PtrEventTimeFn*/ template class PairEventTimeFn { public: using utc_nanos = xo::time::utc_nanos; using event_t = std::pair; public: utc_nanos operator()(event_t const & ev) const { return ev.first; } }; /*PairEventTimeFn*/ } /*namespace reactor*/ } /*namespace xo*/ /* end EventTimeFn.hpp */