// AliExpression Class // //
// //
// Helper class to evaluate the condition expressions in //
-// AliTriggerCondition //
+// AliTrigger* classes //
// Implements a simple recursive-descent parser //
// //
///////////////////////////////////////////////////////////////////////////////
ClassImp( AliExpression )
//______________________________________________________________________________
-AliExpression::AliExpression( TString exp )
+AliExpression::AliExpression( TString exp ) :
+ TObject(),
+ fVname(""),
+ fArg1(0x0),
+ fArg2(0x0),
+ fOperator(0)
{
// Default constructor
TObjArray* tokens = Tokenize( exp );
fArg1 = e->fArg1; e->fArg1 = 0;
fArg2 = e->fArg2; e->fArg2 = 0;
fOperator = e->fOperator;
+ fVname = e->fVname;
delete e;
delete tokens;
}
fArg1 = e.fArg1;
fArg2 = e.fArg2;
fOperator = e.fOperator;
+ fVname = e.fVname;
}
return *this;
}
//______________________________________________________________________________
-AliExpression::AliExpression( int op, AliExpression* a, AliExpression* b )
+AliExpression::AliExpression( int op, AliExpression* a, AliExpression* b ) :
+ TObject(),
+ fVname(""),
+ fArg1(a),
+ fArg2(b),
+ fOperator(op)
{
// Create a new expression
- fArg1 = a;
- fArg2 = b;
- fOperator = op;
}
//______________________________________________________________________________
-AliExpression::AliExpression( int op, AliExpression* a )
+AliExpression::AliExpression( int op, AliExpression* a ) :
+ TObject(),
+ fVname(""),
+ fArg1(0),
+ fArg2(a),
+ fOperator(op)
{
// Create a unary expression.
- fArg1 = 0;
- fArg2 = a;
- fOperator = op;
}
//______________________________________________________________________________
-Bool_t AliExpression::Value( TObjArray &vars )
+Bool_t AliExpression::Value( const TObjArray &vars )
{
// Evaluate the expression
- if ( fArg2 == 0 ) {
+ if ( fArg2 == 0 && fVname.IsNull() ) {
AliError( "Expression undefined." );
return kFALSE;
}
case kOpNOT :
return !(fArg2->Value(vars));
+ case 0 :
+ {
+ TObject* dd = vars.FindObject( fVname.Data() );
+ if( dd == NULL ) {
+ AliError( fVname + " is undefined" );
+ return 0;
+ }
+ return ((AliTriggerInput*)dd)->GetValue();
+ }
+
default:
AliError( "Illegal operator in expression!");
{
// Unparse the expression
- TString opVals[4] = { "&", "|","!" };
- if ( fArg2 == 0 ) {
- AliError( "Expression undefined." );
- return "Error";
+ TString opVals[4] = { "", "&", "|","!" };
+ if ( fArg2 == 0 && fVname.IsNull() ) {
+ AliError( "Expression undefined." );
+ return "Error";
}
+ if( fArg2 == 0 && !fVname.IsNull() ) return fVname;
+
if (fArg1 == 0 && fArg2) {
- return opVals[fOperator]+fArg2->Unparse();
+ return opVals[fOperator]+fArg2->Unparse();
}
return "("+fArg1->Unparse()+" "+opVals[fOperator]+" "+fArg2->Unparse()+")";
}
ClassImp( AliVariableExpression )
//______________________________________________________________________________
-Bool_t AliVariableExpression::Value( TObjArray& pgm )
+Bool_t AliVariableExpression::Value( const TObjArray& pgm )
{
// return the value
TObject* dd = pgm.FindObject( fVname.Data() );