#ifndef ROO_CMD_ARG
#define ROO_CMD_ARG
#include <string>
#include "TNamed.h"
#include "TString.h"
#include "RooLinkedList.h"
class RooAbsData ;
class RooArgSet ;
class RooCmdArg : public TNamed {
public:
RooCmdArg();
RooCmdArg(const char* name,
Int_t i1=0, Int_t i2=0,
Double_t d1=0, Double_t d2=0,
const char* s1=0, const char* s2=0,
const TObject* o1=0, const TObject* o2=0, const RooCmdArg* ca=0, const char* s3=0,
const RooArgSet* c1=0, const RooArgSet* c2=0) ;
RooCmdArg(const RooCmdArg& other) ;
RooCmdArg& operator=(const RooCmdArg& other) ;
void addArg(const RooCmdArg& arg) ;
void setProcessRecArgs(Bool_t flag, Bool_t prefix=kTRUE) {
_procSubArgs = flag ;
_prefixSubArgs = prefix ;
}
RooLinkedList& subArgs() {
return _argList ;
}
virtual TObject* Clone(const char* newName=0) const {
RooCmdArg* newarg = new RooCmdArg(*this) ;
if (newName) { newarg->SetName(newName) ; }
return newarg ;
}
virtual ~RooCmdArg();
static const RooCmdArg& none() ;
const char* opcode() const {
return strlen(GetName()) ? GetName() : 0 ;
}
void setInt(Int_t idx,Int_t value) {
_i[idx] = value ;
}
void setDouble(Int_t idx,Double_t value) {
_d[idx] = value ;
}
void setString(Int_t idx,const char* value) {
_s[idx] = value ;
}
void setObject(Int_t idx,TObject* value) {
_o[idx] = value ;
}
void setSet(Int_t idx,const RooArgSet& set) ;
Int_t getInt(Int_t idx) const {
return _i[idx] ;
}
Double_t getDouble(Int_t idx) const {
return _d[idx] ;
}
const char* getString(Int_t idx) const {
return (_s[idx].size()>0) ? _s[idx].c_str() : 0 ;
}
const TObject* getObject(Int_t idx) const {
return _o[idx] ;
}
const RooArgSet* getSet(Int_t idx) const ;
protected:
static const RooCmdArg _none ;
friend class RooCmdConfig ;
private:
friend class RooAbsCollection ;
Double_t _d[2] ;
Int_t _i[2] ;
std::string _s[3] ;
TObject* _o[2] ;
Bool_t _procSubArgs ;
RooArgSet* _c ;
RooLinkedList _argList ;
Bool_t _prefixSubArgs ;
ClassDef(RooCmdArg,2)
};
#endif