25#ifndef _SOURCE_EVENT_TFPARTICLETIMEEVENT_H_
26#define _SOURCE_EVENT_TFPARTICLETIMEEVENT_H_
43 struct ParticleTimeEvent;
45 using ParticleTimeEventMethod = EventMethodT<ParticleTimeEvent>;
47 using ParticleTimeEventNextTimeSetter = FloatP_t (*)(ParticleTimeEvent&,
const FloatP_t&);
65 using ParticleTimeEventParticleSelector = ParticleEventParticleSelectorT<ParticleTimeEvent>;
84 enum class ParticleTimeEventParticleSelectorEnum :
unsigned int {
90 typedef std::unordered_map<ParticleTimeEventParticleSelectorEnum, ParticleTimeEventParticleSelector> ParticleTimeEventParticleSelectorMapType;
91 static ParticleTimeEventParticleSelectorMapType particleTimeEventParticleSelectorMap {
97 typedef std::unordered_map<std::string, ParticleTimeEventParticleSelectorEnum> ParticleTimeEventParticleSelectorNameMapType;
98 static ParticleTimeEventParticleSelectorNameMapType particleTimeEventParticleSelectorNameMap {
99 {
"largest", ParticleTimeEventParticleSelectorEnum::LARGEST},
100 {
"uniform", ParticleTimeEventParticleSelectorEnum::UNIFORM},
101 {
"default", ParticleTimeEventParticleSelectorEnum::DEFAULT}
130 typedef std::unordered_map<ParticleTimeEventTimeSetterEnum, ParticleTimeEventNextTimeSetter> ParticleTimeEventNextTimeSetterMapType;
131 static ParticleTimeEventNextTimeSetterMapType particleTimeEventNextTimeSetterMap {
137 typedef std::unordered_map<std::string, ParticleTimeEventTimeSetterEnum> ParticleTimeEventNextTimeSetterNameMapType;
138 static ParticleTimeEventNextTimeSetterNameMapType particleTimeEventNextTimeSetterNameMap {
139 {
"deterministic", ParticleTimeEventTimeSetterEnum::DETERMINISTIC},
140 {
"exponential", ParticleTimeEventTimeSetterEnum::EXPONENTIAL},
141 {
"default", ParticleTimeEventTimeSetterEnum::DEFAULT}
196 const FloatP_t &period,
197 ParticleTimeEventMethod *invokeMethod,
198 ParticleTimeEventMethod *predicateMethod,
199 ParticleTimeEventNextTimeSetter *nextTimeSetter=NULL,
200 const FloatP_t &start_time=0,
201 const FloatP_t &end_time=-1,
202 ParticleTimeEventParticleSelector *particleSelector=NULL
208 virtual HRESULT eval(
const FloatP_t &time);
214 FloatP_t getNextTime(
const FloatP_t ¤t_time);
217 HRESULT setParticleTimeEventNextTimeSetter(ParticleTimeEventNextTimeSetter *nextTimeSetter);
219 HRESULT setParticleTimeEventNextTimeSetter(std::string setterName);
221 HRESULT setParticleTimeEventParticleSelector(ParticleTimeEventParticleSelector *particleSelector);
222 HRESULT setParticleTimeEventParticleSelector(ParticleTimeEventParticleSelectorEnum selectorEnum);
223 HRESULT setParticleTimeEventParticleSelector(std::string selectorName);
227 ParticleTimeEventMethod *invokeMethod;
228 ParticleTimeEventMethod *predicateMethod;
229 ParticleTimeEventNextTimeSetter *nextTimeSetter;
230 ParticleTimeEventParticleSelector *particleSelector;
254 const FloatP_t &period,
255 ParticleTimeEventMethod *invokeMethod,
256 ParticleTimeEventMethod *predicateMethod=NULL,
257 unsigned int nextTimeSetterEnum=0,
258 const FloatP_t &start_time=0,
259 const FloatP_t &end_time=-1,
260 unsigned int particleSelectorEnum=0
278 const FloatP_t &period,
279 ParticleTimeEventMethod *invokeMethod,
280 ParticleTimeEventMethod *predicateMethod=NULL,
281 const std::string &distribution=
"default",
282 const FloatP_t &start_time=0,
283 const FloatP_t &end_time=-1,
284 const std::string &selector=
"default"
ParticleHandle * particleTimeEventParticleSelectorUniform(const ParticleTimeEvent &event)
Selects a particle according to a uniform random distribution by event target type.
FloatP_t particleTimeEventSetNextTimeDeterministic(ParticleTimeEvent &event, const FloatP_t &time)
Sets the next time on an event according to the period of the event.
ParticleTimeEventNextTimeSetter * getParticleTimeEventNextTimeSetterN(std::string setterName)
Gets the next time on an event according to an exponential distribution of the event period.
ParticleTimeEventTimeSetterEnum
keys for selecting a next time setter
Definition tfParticleTimeEvent.h:124
ParticleTimeEventParticleSelector * getParticleTimeEventParticleSelectorN(std::string setterName)
Gets the particle selector on an event.
ParticleTimeEvent * onParticleTimeEvent(ParticleType *targetType, const FloatP_t &period, ParticleTimeEventMethod *invokeMethod, ParticleTimeEventMethod *predicateMethod=NULL, unsigned int nextTimeSetterEnum=0, const FloatP_t &start_time=0, const FloatP_t &end_time=-1, unsigned int particleSelectorEnum=0)
Creates a time-dependent particle event using prescribed invoke and predicate functions.
ParticleHandle * particleTimeEventParticleSelectorLargest(const ParticleTimeEvent &event)
Selects largest particle by event target type.
FloatP_t particleTimeEventSetNextTimeExponential(ParticleTimeEvent &event, const FloatP_t &time)
Sets the next time on an event according to an exponential distribution of the event period.
ParticleTimeEvent * onParticleTimeEventN(ParticleType *targetType, const FloatP_t &period, ParticleTimeEventMethod *invokeMethod, ParticleTimeEventMethod *predicateMethod=NULL, const std::string &distribution="default", const FloatP_t &start_time=0, const FloatP_t &end_time=-1, const std::string &selector="default")
Creates a time-dependent particle event using prescribed invoke and predicate functions.
ParticleTimeEventParticleSelector * getParticleTimeEventParticleSelector(ParticleTimeEventParticleSelectorEnum selectorEnum)
Gets the particle selector on an event.
ParticleTimeEventNextTimeSetter * getParticleTimeEventNextTimeSetter(ParticleTimeEventTimeSetterEnum setterEnum)
Gets the next time on an event according to an exponential distribution of the event period.
Include Python header, disable linking to pythonX_d.lib on Windows in debug mode.
Definition tfAngleConfig.h:26
A handle to a particle.
Definition tfParticle.h:313
Structure containing information on each particle type.
Definition tfParticle.h:768
Definition tfEventList.h:59
Definition tfParticleTimeEvent.h:161
FloatP_t start_time
Time at which evaluations begin.
Definition tfParticleTimeEvent.h:186
ParticleHandle * targetParticle
Target particle of an event evaluation.
Definition tfParticleTimeEvent.h:171
FloatP_t end_time
Time at which evaluations stop.
Definition tfParticleTimeEvent.h:191
FloatP_t period
Period of event evaluations.
Definition tfParticleTimeEvent.h:181
FloatP_t next_time
Next time at which an evaluation occurs.
Definition tfParticleTimeEvent.h:176
ParticleType * targetType
Target particle type of this event.
Definition tfParticleTimeEvent.h:166
virtual HRESULT predicate()
Definition tfTimeEvent.h:70
int32_t HRESULT
Definition tf_port.h:255