#ifndef ALIRSNEXPRESSION_H #define ALIRSNEXPRESSION_H #include #include #include "AliRsnCutSet.h" class TObjArray; class AliRsnCutSet; /** @author Martin Vala */ // These are the valid operators types. class AliRsnExpression : public TObject { public: // operators for complex cut expressions enum ECutOp { kOpAND=1, // AND '&' kOpOR, // OR '|' kOpNOT // Unary negation '!' }; AliRsnExpression() : fVname(0), fArg1(0), fArg2(0), fOperator(0) {} AliRsnExpression(TString exp); virtual ~AliRsnExpression(); AliRsnExpression(const AliRsnExpression& exp); AliRsnExpression& operator= (const AliRsnExpression& exp); virtual Bool_t Value(TObjArray & vars); virtual TString Unparse() const; void SetCutSet(AliRsnCutSet* theValue) { sCutSet = theValue; } AliRsnCutSet* GetCutSet() const { return sCutSet; } TString fVname; // Variable name static AliRsnCutSet *sCutSet; private: AliRsnExpression* fArg1; // left argument AliRsnExpression* fArg2; // right argument Int_t fOperator; // operator AliRsnExpression(int op, AliRsnExpression* a); AliRsnExpression(int op, AliRsnExpression* a, AliRsnExpression* b); TObjArray* Tokenize(TString str) const; static AliRsnExpression* Element(TObjArray &st, Int_t &i); static AliRsnExpression* Primary(TObjArray &st, Int_t &i); static AliRsnExpression* Expression(TObjArray &st, Int_t &i); ClassDef(AliRsnExpression, 1); // Class to evaluate an expression }; /////////////////////////////////////////////////////////////////////////// class AliRsnVariableExpression: public AliRsnExpression { public: AliRsnVariableExpression(TString a) : AliRsnExpression() { fVname = a; }; ~AliRsnVariableExpression() {} virtual Bool_t Value(TObjArray& pgm); virtual TString Unparse() const { return fVname; } ClassDef(AliRsnVariableExpression, 1); // Class to define a variable expression }; #endif