xo-umbrella2/xo-reactor/include/xo/reactor/Reducer.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

33 lines
915 B
C++

/* @file Reducer.hpp */
#pragma once
#include "xo/reactor/EventTimeFn.hpp"
namespace xo {
namespace reactor {
/* LastReducer, HeapReducer inherit ReducerBase */
template<typename Event, typename EventTimeFn>
class ReducerBase {
static_assert(EventTimeConcept<Event, EventTimeFn>);
public:
using utc_nanos = xo::time::utc_nanos;
public:
ReducerBase() = default;
ReducerBase(EventTimeFn const & evtfn) : event_tm_fn_{evtfn} {}
utc_nanos event_tm(Event const & ev) const { return this->event_tm_fn_(ev); }
private:
/* Event ev = ...;
* .event_tm_fn(ev) -> utc_nanos
* reports event time associated with ev
*/
EventTimeFn event_tm_fn_;
}; /*ReducerBase*/
} /*namespace reactor*/
} /*namespace xo*/
/* end Reducer.hpp */