00001 00003 /* 00004 Copyright (C) 2008 Thomas Moor 00005 Exclusive copyright is granted to Klaus Schmidt 00006 */ 00007 00008 00009 #include "tokenreader.h" 00010 #include "tokenwriter.h" 00011 #include "nameset.h" 00012 #include "attributes.h" 00013 #include "sp_densityfnct.h" 00014 00015 00016 #ifndef FAUDES_SP_SIMCONDITIONSET_H 00017 #define FAUDES_SP_SIMCONDITIONSET_H 00018 00019 namespace faudes { 00020 00045 class SimEventConditionAttribute { 00046 public: 00047 EventSet mStart; 00048 EventSet mStop; 00049 }; 00050 00065 // state based condition 00066 class SimStateConditionAttribute { 00067 public: 00068 bool mAllFlag; 00069 std::vector<StateSet> mStateSets; 00070 }; 00071 00072 00101 class SimConditionAttribute : public AttributeVoid { 00102 00103 public: 00104 00106 typedef std::vector<StateSet>::iterator Iterator; 00107 typedef std::vector<StateSet>::const_iterator CIterator; 00108 00110 SimConditionAttribute(void) : AttributeVoid() { 00111 mEventCondition=false; mStateCondition=false; mEnabled=true; mBreakCondition=false; Reset();}; 00112 00114 bool IsDefault(void) const { 00115 return !mEventCondition && !mStateCondition && mEnabled && !mBreakCondition; }; 00116 00118 bool IsStateCondition(void) const {return mStateCondition; }; 00119 00121 bool IsEventCondition(void) const {return mEventCondition; }; 00122 00124 bool IsBreakCondition(void) const {return mBreakCondition; }; 00125 00127 bool IsEnabled(void) const {return mEnabled; }; 00128 00130 void StateCondition(const SimStateConditionAttribute& rStateConditionAttribute) 00131 {mStateConditionAttribute=rStateConditionAttribute; mStateCondition=true; mEventCondition=false; 00132 for(Idx i=0; i<mStateConditionAttribute.mStateSets.size(); i++) 00133 mStateConditionAttribute.mStateSets.at(i).Name("StateSet"); 00134 }; 00135 00137 void EventCondition(const SimEventConditionAttribute& rEventConditionAttribute) 00138 {mEventConditionAttribute=rEventConditionAttribute; mEventCondition=true; mStateCondition=false;}; 00139 00141 void BreakCondition(bool on) {mBreakCondition=on; }; 00142 00144 void Enabled(bool on) {mEnabled=on; }; 00145 00147 const SimEventConditionAttribute& EventCondition(void) const {return mEventConditionAttribute; }; 00148 00150 const SimStateConditionAttribute& StateCondition(void) const {return mStateConditionAttribute; }; 00151 00153 void Reset(void) 00154 { mSatisfied=false; mActivationTime=-1; mSamplesPeriod.Clear(); mSamplesDuration.Clear(); }; 00155 00157 // condition state: get satisfied 00158 bool Satisfied(void) const { return mSatisfied; }; 00159 00161 void Satisfied(bool on, tpTime::Type now); 00162 00164 SampledDensityFunction mSamplesPeriod; 00165 00167 SampledDensityFunction mSamplesDuration; 00168 00169 protected: 00170 00172 bool mEventCondition; 00173 00175 bool mStateCondition; 00176 00178 bool mBreakCondition; 00179 00181 bool mEnabled; 00182 00184 SimEventConditionAttribute mEventConditionAttribute; 00185 00187 SimStateConditionAttribute mStateConditionAttribute; 00188 00190 bool mSatisfied; 00191 00193 tpTime::Type mActivationTime; 00194 00195 00196 protected: 00197 00218 virtual void DoRead(TokenReader& rTr, const std::string& rLabel="", const Type* pContext=0); 00219 00237 virtual void DoWrite(TokenWriter& rTw,const std::string& rLabel="", const Type* pContext=0) const; 00238 00239 00240 00241 }; // class SimConditionAttribute 00242 00243 00255 class SimConditionSet : public TaNameSet<SimConditionAttribute> { 00256 00257 public: 00258 00260 SimConditionSet(void) : TaNameSet<SimConditionAttribute>() {}; 00261 00263 SimConditionSet(const SimConditionSet& rOtherSet) : IndexSet(), TaNameSet<SimConditionAttribute>(rOtherSet) {}; 00264 00266 virtual ~SimConditionSet(void) {}; 00267 00269 bool Enabled(Idx cond) const { return Attribute(cond).IsEnabled(); }; 00270 00272 void Enabled(Idx cond, bool on) { Attributep(cond)->Enabled(on); }; 00273 00275 SimConditionSet EnabledConditions(void); 00276 00278 void Reset(void); 00279 00280 }; 00281 00282 00283 00286 } // namespace 00287 00288 #endif