Event.h
Go to the documentation of this file.00001 #ifndef SimTK_SimTKCOMMON_EVENT_H_
00002 #define SimTK_SimTKCOMMON_EVENT_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
00040 #include "SimTKcommon/basics.h"
00041
00042 namespace SimTK {
00043
00048 SimTK_DEFINE_UNIQUE_INDEX_TYPE(SystemEventIndex);
00051 SimTK_DEFINE_UNIQUE_INDEX_TYPE(EventIndex);
00052
00058 SimTK_DEFINE_UNIQUE_INDEX_TYPE(SystemEventTriggerIndex);
00061 SimTK_DEFINE_UNIQUE_INDEX_TYPE(EventTriggerIndex);
00062
00069 SimTK_DEFINE_UNIQUE_INDEX_TYPE(SystemEventTriggerByStageIndex);
00072 SimTK_DEFINE_UNIQUE_INDEX_TYPE(EventTriggerByStageIndex);
00073
00089 class Event {
00090 public:
00091
00137 class Cause {
00138 public:
00139 enum Num {
00140 Initialization = 1,
00141 Triggered = 2,
00142 Scheduled = 3,
00143 TimeAdvanced = 4,
00144 Signaled = 5,
00145 Termination = 6,
00146 Invalid = -1
00147 };
00148
00149 Cause() : value(Invalid) {}
00150 Cause(Num n) : value(n) {}
00151 operator Num() const {return value;}
00152 Cause& operator=(Num n) {value=n; return *this;}
00153
00154 bool isValid() const {return Initialization<=value && value<=Termination;}
00155
00156 private:
00157 Num value;
00158 };
00159
00162 SimTK_SimTKCOMMON_EXPORT static const char* getCauseName(Cause);
00163
00164
00171 enum Trigger {
00172 NoEventTrigger =0x0000,
00173
00174 PositiveToNegative =0x0001,
00175 NegativeToPositive =0x0002,
00176
00177 Falling =(PositiveToNegative),
00178 Rising =(NegativeToPositive),
00179 AnySignChange =(PositiveToNegative|NegativeToPositive)
00180 };
00181
00184 SimTK_SimTKCOMMON_EXPORT static std::string eventTriggerString(Trigger);
00185
00186
00192 static Trigger classifyTransition(int before, int after) {
00193 if (before==after)
00194 return NoEventTrigger;
00195 if (before==0)
00196 return NoEventTrigger;
00197 if (before==1)
00198 return PositiveToNegative;
00199
00200 return NegativeToPositive;
00201 }
00202
00208 static Trigger maskTransition(Trigger transition, Trigger mask) {
00209 return Trigger(transition & mask);
00210 }
00211
00212 private:
00213 };
00214
00215
00216 }
00217
00218 #endif // SimTK_SimTKCOMMON_EVENT_H_