25#ifndef _SOURCE_EVENT_TFTIMEEVENT_H_
26#define _SOURCE_EVENT_TFTIMEEVENT_H_
31#include <unordered_map>
39 using TimeEventMethod = EventMethodT<TimeEvent>;
40 using TimeEventNextTimeSetter = FloatP_t (*)(
TimeEvent&,
const FloatP_t&);
42 CAPI_FUNC(
HRESULT) defaultTimeEventPredicateEval(
const FloatP_t &next_time,
const FloatP_t &start_time=-1,
const FloatP_t &end_time=-1);
44 CAPI_FUNC(FloatP_t) timeEventSetNextTimeExponential(
TimeEvent &event,
const FloatP_t &time);
45 CAPI_FUNC(FloatP_t) timeEventSetNextTimeDeterministic(
TimeEvent &event,
const FloatP_t &time);
47 enum class TimeEventTimeSetterEnum :
unsigned int {
53 typedef std::unordered_map<TimeEventTimeSetterEnum, TimeEventNextTimeSetter> TimeEventNextTimeSetterMapType;
54 static TimeEventNextTimeSetterMapType timeEventNextTimeSetterMap {
55 {TimeEventTimeSetterEnum::DETERMINISTIC, &timeEventSetNextTimeDeterministic},
56 {TimeEventTimeSetterEnum::EXPONENTIAL, &timeEventSetNextTimeExponential},
57 {TimeEventTimeSetterEnum::DEFAULT, &timeEventSetNextTimeDeterministic}
60 typedef std::unordered_map<std::string, TimeEventTimeSetterEnum> TimeEventNextTimeSetterNameMapType;
61 static TimeEventNextTimeSetterNameMapType timeEventNextTimeSetterNameMap {
62 {
"deterministic", TimeEventTimeSetterEnum::DETERMINISTIC},
63 {
"exponential", TimeEventTimeSetterEnum::EXPONENTIAL},
64 {
"default", TimeEventTimeSetterEnum::DEFAULT}
67 CAPI_FUNC(TimeEventNextTimeSetter*) getTimeEventNextTimeSetter(TimeEventTimeSetterEnum setterEnum);
68 CAPI_FUNC(TimeEventNextTimeSetter*) getTimeEventNextTimeSetterN(std::string setterName);
70 struct CAPI_EXPORT TimeEvent : EventBase {
93 TimeEventMethod *invokeMethod,
94 TimeEventMethod *predicateMethod=NULL,
95 TimeEventNextTimeSetter *nextTimeSetter=NULL,
101 invokeMethod(invokeMethod),
102 predicateMethod(predicateMethod),
103 nextTimeSetter(nextTimeSetter),
108 if (nextTimeSetter == NULL) setTimeEventNextTimeSetter(TimeEventTimeSetterEnum::DEFAULT);
114 HRESULT eval(
const FloatP_t &time);
118 FloatP_t getNextTime(
const FloatP_t ¤t_time);
119 HRESULT setTimeEventNextTimeSetter(TimeEventTimeSetterEnum setterEnum);
123 TimeEventMethod *invokeMethod;
124 TimeEventMethod *predicateMethod;
125 TimeEventNextTimeSetter *nextTimeSetter;
145 const FloatP_t &period,
146 TimeEventMethod *invokeMethod,
147 TimeEventMethod *predicateMethod=NULL,
148 const unsigned int &nextTimeSetterEnum=0,
149 const FloatP_t &start_time=0,
150 const FloatP_t &end_time=-1
165 const FloatP_t &period,
166 TimeEventMethod *invokeMethod,
167 TimeEventMethod *predicateMethod=NULL,
168 const std::string &distribution=
"default",
169 const FloatP_t &start_time=0,
170 const FloatP_t &end_time=-1
Tissue Forge event system.
Definition tfEvent.h:34
TimeEvent * onTimeEventN(const FloatP_t &period, TimeEventMethod *invokeMethod, TimeEventMethod *predicateMethod=NULL, const std::string &distribution="default", const FloatP_t &start_time=0, const FloatP_t &end_time=-1)
Creates a time-dependent event using prescribed invoke and predicate functions.
TimeEvent * onTimeEvent(const FloatP_t &period, TimeEventMethod *invokeMethod, TimeEventMethod *predicateMethod=NULL, const unsigned int &nextTimeSetterEnum=0, const FloatP_t &start_time=0, const FloatP_t &end_time=-1)
Creates a time-dependent event using prescribed invoke and predicate functions.
Definition tfEventList.h:59
Definition tfTimeEvent.h:70
FloatP_t start_time
Start time of evaluations.
Definition tfTimeEvent.h:84
FloatP_t end_time
End time of evaluations.
Definition tfTimeEvent.h:89
FloatP_t period
Period of evaluation.
Definition tfTimeEvent.h:79
FloatP_t next_time
Next time of evaluation.
Definition tfTimeEvent.h:74
int32_t HRESULT
Definition tf_port.h:255