#pragma once #include #include "Ereignis.h" #include "Aktionen.h" using namespace Framework; class TriggerRun; class VarPointer { private: Variable *var; Text name; int ref; public: VarPointer( const char *name, Variable *var ); ~VarPointer(); void setVariable( Variable *var ); Variable *getVariable() const; Variable *zVariable() const; operator Variable *( ) const; VarPointer *getThis(); VarPointer *release(); }; class Memory { private: RCArray< VarPointer > variablen; int ref; public: Memory(); ~Memory(); void addVariable( const char *name, Variable *var ); void setVariable( const char *name, Variable *var ); Variable *getVariable( const char *name ) const; Variable *zVariable( const char *name ) const; Memory *getThis(); Memory *release(); }; class Bedingung { private: Aktion *expression; int ref; public: Bedingung(); ~Bedingung(); void setExpression( Aktion *expr ); bool check( Memory *zMem, Ereignis *zEreignis ); Bedingung *getThis(); Bedingung *release(); }; class Trigger : public Variable { private: int ereignisAnzahl; EreignisTyp *ereignisse; RCArray< Bedingung > *bedingungen; RCArray< Aktion > *aktionen; public: Trigger(); ~Trigger(); int getAktionAnzahl() const; Aktion *zAktion( int index ) const; Aktion *getAktion( int index ) const; // prüft ob der auslöser von einem bestimmten ereignis ausgelößt wird bool wirdGetriggertVon( EreignisTyp typ ) const; // return: 0, falls die bedingungen nicht erfüllt sind TriggerRun *runTrigger( Ereignis *e, Memory *mem ); }; class TriggerRun { private: Trigger *trigger; Ereignis *ereignis; Memory *memory; int programCounter; double waitCount; int ref; public: TriggerRun( Trigger *trig, Ereignis *e, Memory *mem ); ~TriggerRun(); // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist bool runNext( double t ); };