Trigger.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #pragma once
  2. #include <Array.h>
  3. #include "Ereignis.h"
  4. #include "Aktionen.h"
  5. using namespace Framework;
  6. class TriggerRun;
  7. class VarPointer
  8. {
  9. private:
  10. Variable *var;
  11. Text name;
  12. int ref;
  13. public:
  14. VarPointer( const char *name, Variable *var );
  15. ~VarPointer();
  16. void setVariable( Variable *var );
  17. Variable *getVariable() const;
  18. Variable *zVariable() const;
  19. operator Variable *( ) const;
  20. VarPointer *getThis();
  21. VarPointer *release();
  22. };
  23. class Memory
  24. {
  25. private:
  26. RCArray< VarPointer > variablen;
  27. int ref;
  28. public:
  29. Memory();
  30. ~Memory();
  31. void addVariable( const char *name, Variable *var );
  32. void setVariable( const char *name, Variable *var );
  33. Variable *getVariable( const char *name ) const;
  34. Variable *zVariable( const char *name ) const;
  35. Memory *getThis();
  36. Memory *release();
  37. };
  38. class Bedingung
  39. {
  40. private:
  41. Aktion *expression;
  42. int ref;
  43. public:
  44. Bedingung();
  45. ~Bedingung();
  46. void setExpression( Aktion *expr );
  47. bool check( Memory *zMem, Ereignis *zEreignis );
  48. Bedingung *getThis();
  49. Bedingung *release();
  50. };
  51. class Trigger : public Variable
  52. {
  53. private:
  54. int ereignisAnzahl;
  55. EreignisTyp *ereignisse;
  56. RCArray< Bedingung > *bedingungen;
  57. RCArray< Aktion > *aktionen;
  58. public:
  59. Trigger();
  60. ~Trigger();
  61. int getAktionAnzahl() const;
  62. Aktion *zAktion( int index ) const;
  63. Aktion *getAktion( int index ) const;
  64. // prüft ob der auslöser von einem bestimmten ereignis ausgelößt wird
  65. bool wirdGetriggertVon( EreignisTyp typ ) const;
  66. // return: 0, falls die bedingungen nicht erfüllt sind
  67. TriggerRun *runTrigger( Ereignis *e, Memory *mem );
  68. };
  69. class TriggerRun
  70. {
  71. private:
  72. Trigger *trigger;
  73. Ereignis *ereignis;
  74. Memory *memory;
  75. int programCounter;
  76. double waitCount;
  77. int ref;
  78. public:
  79. TriggerRun( Trigger *trig, Ereignis *e, Memory *mem );
  80. ~TriggerRun();
  81. // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist
  82. bool runNext( double t );
  83. };