xo-umbrella2/xo-reactor/include/xo/reactor/EventTimeFn2.hpp
Roland Conybeare 28b6d457c0 Add 'xo-reactor/' from commit 'e3a53d10e6'
git-subtree-dir: xo-reactor
git-subtree-mainline: dd1a6b1afc
git-subtree-split: e3a53d10e6
2025-05-11 15:11:22 -05:00

60 lines
1.7 KiB
C++

/* @file EventTimeFn2.hpp */
#pragma once
#include "xo/refcnt/Refcounted.hpp"
#include <timeutil/timeutil.hpp>
namespace xo {
namespace reactor {
template <typename Event>
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 <typename T>
class EventTimeFn<xo::rp<T>> {
public:
using utc_nanos = xo::time::utc_nanos;
using event_t = xo::rp<T>;
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 <typename T>
class EventTimeFn<T*> {
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 <typename T>
class EventTimeFn<std::pair<xo::time::utc_nanos, T>> {
public:
using utc_nanos = xo::time::utc_nanos;
using event_t = std::pair<xo::time::utc_nanos, T>;
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 */