ROOT logo
// $Id: Eventor.h 2614 2011-12-14 03:33:09Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#ifndef GledCore_Eventor_H
#define GledCore_Eventor_H

#include <Glasses/Operator.h>
#include <Gled/GThread.h>
class SaturnInfo;
class Mountain;

class Eventor : public Operator
{
private:
  void		_init();

protected:
  Double_t	mTotalTime;	//  in s; X{gS} 7 ValOut()
  Double_t	mRunTime;	//  in s; X{gS} 7 ValOut()

  Int_t		mBeatsToDo;	//  X{gS} 7 Value(-range=>[-1,1000000000,1])
  Int_t		mBeatsDone;	//  X{gS} 7 ValOut(-range=>[0,1000000],-join=>1)
  Int_t		mLocBeatsDone;	//! X{gS} 7 ValOut(-range=>[0,1000000]) local value
  Int_t		mStampInterval;	//  X{gS} 7 Value(-range=>[0,1000000,1],-join=>1)
  Int_t		mInterBeatMS;	//  X{gS} 7 Value(-range=>[0,1000000,1])

  // Thread properties
  ZLink<SaturnInfo> mHost;	//  X{gE} L{}

  Bool_t	bMultix;	//  X{gS} 7 Bool(-join=>1)
  Bool_t	bSignalSafe;	//  X{gS} 7 Bool()
  Bool_t	bContinuous;	//  X{gS} 7 Bool(-join=>1)
  Bool_t	bUseDynCast;	//  X{gS} 7 Bool()
  Bool_t        bTrapILL;       //  X{gS} 7 Bool(-join=>1)
  Bool_t        bTrapBUS;       //  X{gS} 7 Bool()
  Bool_t        bTrapSEGV;      //  X{gS} 7 Bool(-join=>1)
  Bool_t        bTrapFPE;       //  X{gS} 7 Bool()

  // Thread running status
  Bool_t	bRunning;	//  X{gS} 7 BoolOut(-join=>1)
  Bool_t	bSuspended;	//  X{gS} 7 BoolOut()
  Bool_t	bPerforming;	//! X{gS} 7 BoolOut(-join=>1)
  Bool_t	bXMultix;	//  X{gS} 7 BoolOut()

  virtual void AdEndarkenment();
  virtual void AdUnfoldment();

public:
  Eventor(const Text_t* n="Eventor", const Text_t* t=0) :
    Operator(n, t) { _init(); }

  Mountain* GetChaItOss();

  virtual Operator::Arg* PreDance(Operator::Arg* op_arg=0);
  virtual void           PostDance(Operator::Arg* op_arg);

  virtual void	PreBeat(Operator::Arg* op_arg)	 throw(Operator::Exception);
  virtual void	PostBeat(Operator::Arg* op_arg)	 throw(Operator::Exception);

  // On Change of running state
  virtual void	OnStart(Operator::Arg* op_arg);
  virtual void	OnSuspend(Operator::Arg* op_arg);
  virtual void	OnResume(Operator::Arg* op_arg);
  virtual void	OnExit(Operator::Arg* op_arg);

  // On Exception exit
  virtual void	OnContinue(Operator::Arg* op_arg, Operator::Exception& op_exc);
  virtual void	OnWait(Operator::Arg* op_arg, Operator::Exception& op_exc);
  virtual void	OnStop(Operator::Arg* op_arg, Operator::Exception& op_exc);
  virtual void	OnBreak(Operator::Arg* op_arg, Operator::Exception& op_exc);
  virtual void	OnBreak(Operator::Arg* op_arg, const TString& msg);
  virtual void	OnTerminalSignal(Operator::Arg* op_arg, GThread::Signal sid);

  virtual void	Start();	// X{E} 7 MButt(-join=>1)
  virtual void	Stop();		// X{E} 7 MButt()
  virtual void	Suspend();	// X{E} 7 MButt(-join=>1)
  virtual void	Resume();	// X{E} 7 MButt()
  virtual void	Reset();	// X{E} 7 MButt(-join=>1)
  virtual void	Cancel();	// X{E} 7 MButt()

  virtual void ResetRecursively(); // X{E} 7 MButt()

  void SetHost(SaturnInfo* host);

  void SetTrapAll(); // X{E} 7 MButt()

  //-------------------------------------
  // Time service for operators
  //-------------------------------------

public:
  enum EpochType_e  { ET_Manual, ET_DanceStart };
  enum TimeSource_e { TS_System, TS_IntStep };

  Double_t GetEventTime();
  void     PushEventTime(Double_t time);
  void     PopEventTime();

protected:
  Int_t          mEventID;      // X{GS} 7 Value()
  Double_t       mInternalTime; // X{GS} 7 Value()

  EpochType_e    mEpochType;    // X{GS} 7 PhonyEnum(-width=>8, -join=>1)
  TimeSource_e   mTimeSource;   // X{GS} 7 PhonyEnum(-width=>8)

  Double_t       mTimeEpoch;    // X{GS} 7 Value(-join=>1)
  Double_t       mTimeStep;     // X{GS} 7 Value(-range=>[-1e6,1e6,1,1000])

  list<Double_t> mTimeStack;    //!

public:

#include "Eventor.h7"
  ClassDef(Eventor, 1);
}; // endclass Eventor


#endif
 Eventor.h:1
 Eventor.h:2
 Eventor.h:3
 Eventor.h:4
 Eventor.h:5
 Eventor.h:6
 Eventor.h:7
 Eventor.h:8
 Eventor.h:9
 Eventor.h:10
 Eventor.h:11
 Eventor.h:12
 Eventor.h:13
 Eventor.h:14
 Eventor.h:15
 Eventor.h:16
 Eventor.h:17
 Eventor.h:18
 Eventor.h:19
 Eventor.h:20
 Eventor.h:21
 Eventor.h:22
 Eventor.h:23
 Eventor.h:24
 Eventor.h:25
 Eventor.h:26
 Eventor.h:27
 Eventor.h:28
 Eventor.h:29
 Eventor.h:30
 Eventor.h:31
 Eventor.h:32
 Eventor.h:33
 Eventor.h:34
 Eventor.h:35
 Eventor.h:36
 Eventor.h:37
 Eventor.h:38
 Eventor.h:39
 Eventor.h:40
 Eventor.h:41
 Eventor.h:42
 Eventor.h:43
 Eventor.h:44
 Eventor.h:45
 Eventor.h:46
 Eventor.h:47
 Eventor.h:48
 Eventor.h:49
 Eventor.h:50
 Eventor.h:51
 Eventor.h:52
 Eventor.h:53
 Eventor.h:54
 Eventor.h:55
 Eventor.h:56
 Eventor.h:57
 Eventor.h:58
 Eventor.h:59
 Eventor.h:60
 Eventor.h:61
 Eventor.h:62
 Eventor.h:63
 Eventor.h:64
 Eventor.h:65
 Eventor.h:66
 Eventor.h:67
 Eventor.h:68
 Eventor.h:69
 Eventor.h:70
 Eventor.h:71
 Eventor.h:72
 Eventor.h:73
 Eventor.h:74
 Eventor.h:75
 Eventor.h:76
 Eventor.h:77
 Eventor.h:78
 Eventor.h:79
 Eventor.h:80
 Eventor.h:81
 Eventor.h:82
 Eventor.h:83
 Eventor.h:84
 Eventor.h:85
 Eventor.h:86
 Eventor.h:87
 Eventor.h:88
 Eventor.h:89
 Eventor.h:90
 Eventor.h:91
 Eventor.h:92
 Eventor.h:93
 Eventor.h:94
 Eventor.h:95
 Eventor.h:96
 Eventor.h:97
 Eventor.h:98
 Eventor.h:99
 Eventor.h:100
 Eventor.h:101
 Eventor.h:102
 Eventor.h:103
 Eventor.h:104
 Eventor.h:105
 Eventor.h:106
 Eventor.h:107
 Eventor.h:108
 Eventor.h:109
 Eventor.h:110
 Eventor.h:111
 Eventor.h:112
 Eventor.h:113
 Eventor.h:114
 Eventor.h:115
 Eventor.h:116
 Eventor.h:117
 Eventor.h:118
 Eventor.h:119
 Eventor.h:120
 Eventor.h:121