00001 #ifndef SimTK_SimTKCOMMON_EVENT_HANDLER_H_
00002 #define SimTK_SimTKCOMMON_EVENT_HANDLER_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "SimTKcommon/basics.h"
00036 #include "SimTKcommon/Simmatrix.h"
00037 #include "SimTKcommon/internal/State.h"
00038 #include "SimTKcommon/internal/System.h"
00039
00040 namespace SimTK {
00041
00061 class SimTK_SimTKCOMMON_EXPORT EventHandler {
00062 public:
00063
00084 virtual void handleEvent(State& state, Real accuracy, const Vector& yWeights, const Vector& ooConstraintTols, Stage& lowestModified, bool& shouldTerminate) const = 0;
00085 };
00086
00094 class SimTK_SimTKCOMMON_EXPORT ScheduledEventHandler : public EventHandler {
00095 public:
00096 virtual ~ScheduledEventHandler();
00097
00106 virtual Real getNextEventTime(const State&, bool includeCurrentTime) const = 0;
00107 };
00108
00118 class SimTK_SimTKCOMMON_EXPORT TriggeredEventHandler : public EventHandler {
00119 public:
00120 class TriggeredEventHandlerImpl;
00121 TriggeredEventHandler(const TriggeredEventHandler& clone);
00122 TriggeredEventHandler& operator=(const TriggeredEventHandler& clone);
00123 virtual ~TriggeredEventHandler();
00124
00131 TriggeredEventHandler(Stage requiredStage);
00132
00137 virtual Real getValue(const State&) const = 0;
00138
00143 System::EventTriggerInfo& getTriggerInfo();
00144
00149 Stage getRequiredStage() const;
00150 private:
00151 TriggeredEventHandlerImpl* impl;
00152 };
00153
00160 class SimTK_SimTKCOMMON_EXPORT PeriodicEventHandler : public ScheduledEventHandler {
00161 public:
00162 class PeriodicEventHandlerImpl;
00163 ~PeriodicEventHandler();
00164 Real getNextEventTime(const State& state, bool includeCurrentTime) const;
00165
00172 PeriodicEventHandler(Real eventInterval);
00173
00178 Real getEventInterval() const;
00179
00184 void setEventInterval(Real eventInterval);
00185 private:
00186 PeriodicEventHandlerImpl* impl;
00187 };
00188
00189 }
00190
00191 #endif // SimTK_SimTKCOMMON_EVENT_HANDLER_H_