]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliExpression.cxx
Fix fixed-string length bug
[u/mrichter/AliRoot.git] / STEER / AliExpression.cxx
index 0d0bbe40a37b86d64565b51b1d1be55380a9d0ed..44d1bb500678c29b70ddc211c519e075049dcae1 100644 (file)
@@ -20,7 +20,7 @@
 //  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 );
@@ -48,6 +53,7 @@ AliExpression::AliExpression( TString exp )
    fArg1 = e->fArg1; e->fArg1 = 0;
    fArg2 = e->fArg2; e->fArg2 = 0;
    fOperator = e->fOperator;
+   fVname = e->fVname;
    delete e;
    delete tokens;
 }
@@ -69,33 +75,38 @@ AliExpression& AliExpression::operator=(const AliExpression& e)
       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;
    }
@@ -111,6 +122,16 @@ Bool_t AliExpression::Value( TObjArray &vars )
       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!");
 
@@ -124,14 +145,16 @@ TString AliExpression::Unparse() const
 {
    // 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()+")";
 }
@@ -331,7 +354,7 @@ AliExpression* AliExpression::Expression( TObjArray &st,Int_t &i )
 ClassImp( AliVariableExpression )
 
 //______________________________________________________________________________
-Bool_t AliVariableExpression::Value( TObjArray& pgm )
+Bool_t AliVariableExpression::Value( const TObjArray& pgm )
 {
    // return the value
    TObject* dd = pgm.FindObject( fVname.Data() );