#ifndef ALITRIGSCHEDULER_H
#define ALITRIGSCHEDULER_H
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
class TObjArray;
class AliTrigScheduledEntry;
class AliTrigScheduler;
class AliTrigScheduledGroup : public TNamed {
private:
Int_t fPriority;
Int_t fDelay;
TObjArray *fEntries;
private:
AliTrigScheduledGroup(const AliTrigScheduledGroup &other);
AliTrigScheduledGroup &operator=(const AliTrigScheduledGroup &other);
public:
AliTrigScheduledGroup();
AliTrigScheduledGroup(const char *name, Int_t priority=0);
virtual ~AliTrigScheduledGroup();
void AddEntry(AliTrigScheduledEntry *entry);
void FireUp(Int_t time);
TObjArray *GetScheduledEntries() const {return fEntries;}
Int_t GetNentries() const;
Int_t GetPriority() const {return fPriority;}
Int_t GetDelay() const {return fDelay;}
virtual void Print(Option_t *option) const;
void RemoveEntry(AliTrigScheduledEntry *entry);
void SetPriority(Int_t priority) {fPriority = priority;}
ClassDef(AliTrigScheduledGroup, 1)
};
class AliTrigScheduledSequence : public TNamed {
public:
enum ESortingType {
kDefault = 0,
kTimeInc = 1,
kTimeDec = 2,
kPriorityInc = 3,
kPriorityDec = 4,
kCustom = 5
};
private:
AliTrigScheduler *fScheduler;
Int_t fNgroups;
ESortingType fType;
Int_t *fArray;
private:
AliTrigScheduledSequence(const AliTrigScheduledSequence &other);
AliTrigScheduledSequence &operator=(const AliTrigScheduledSequence &other);
void SortArray(Int_t *array, Bool_t increasing);
public:
AliTrigScheduledSequence();
AliTrigScheduledSequence(const char *name, AliTrigScheduler *scheduler);
virtual ~AliTrigScheduledSequence();
Int_t *GetArray() const {return fArray;}
Int_t GetNgroups() const {return fNgroups;}
AliTrigScheduler *GetScheduler() const {return fScheduler;}
ESortingType GetSortingType() const {return fType;}
virtual void Print(Option_t *option) const;
void Sort(ESortingType type, Int_t *sequence=0);
ClassDef(AliTrigScheduledSequence, 1)
};
class AliTrigScheduledGroup;
class AliTrigScheduledSequence;
class AliTrigScheduler : public TNamed {
private:
Int_t fNgroups;
TObjArray *fGroups;
TObjArray *fSequences;
AliTrigScheduledSequence *fCurrentSequence;
private:
AliTrigScheduler(const AliTrigScheduler &other);
AliTrigScheduler &operator=(const AliTrigScheduler &other);
public:
AliTrigScheduler();
AliTrigScheduler(const char *name);
virtual ~AliTrigScheduler();
void AddScheduledEntry(AliTrigScheduledEntry *entry, const char *togroup="default");
AliTrigScheduledGroup *AddGroup(const char *groupname);
AliTrigScheduledGroup *AddGroup(AliTrigScheduledGroup *group);
AliTrigScheduledSequence *AddSequence(const char *seqname, AliTrigScheduledSequence::ESortingType type=AliTrigScheduledSequence::kDefault,
Int_t *sequence = 0);
void FireUp(Int_t time);
AliTrigScheduledSequence *GetCurrentSequence() const {return fCurrentSequence;}
Int_t GetNgroups() const {return fNgroups;}
TObjArray *GetScheduledGroups() const {return fGroups;}
AliTrigScheduledGroup *GetScheduledGroup(Int_t i) const;
AliTrigScheduledGroup *GetScheduledGroup(const char *name) const;
void SetCurrentSequence(AliTrigScheduledSequence *seq) {fCurrentSequence = seq;}
void SetGroupPriority(const char *groupname, Int_t priority);
ClassDef(AliTrigScheduler,1)
};
#endif