rarStrParser.cc

Go to the documentation of this file.
00001 /*****************************************************************************
00002 * Project: BaBar detector at the SLAC PEP-II B-factory
00003 * Package: RooRarFit
00004  *    File: $Id: rarStrParser.cc,v 1.9 2011/06/16 13:18:50 fwilson Exp $
00005  * Authors: Lei Zhang
00006  * History:
00007  * 
00008  * Copyright (C) 2005-2012, University of California, Riverside
00009  *****************************************************************************/
00010 
00011 // -- CLASS DESCRIPTION [RooRarFit] --
00012 // This class provides String Parser class for RooRarFit
00014 //
00015 // BEGIN_HTML
00016 // This class provides String Parser class for RooRarFit
00017 // END_HTML
00018 //
00019 
00020 #include "RooRarFit/rarVersion.hh"
00021 
00022 #include "Riostream.h"
00023 
00024 #include "TObjString.h"
00025 #include "RooFitCore/RooArgList.hh"
00026 #include "RooFitCore/RooRealVar.hh"
00027 #include "RooFitCore/RooStringVar.hh"
00028 
00029 #include "RooRarFit/rarStrParser.hh"
00030 
00031 ClassImp(rarStrParser)
00032   ;
00033 
00035 rarStrParser::rarStrParser()
00036   : _str("")
00037 {
00038   init();
00039 }
00040 
00044 rarStrParser::rarStrParser(const char *str)
00045   : _str(str)
00046 {
00047   init();
00048 }
00049 
00050 
00054 rarStrParser::rarStrParser(const TString str)
00055   : _str(str)
00056 {
00057   init();
00058 }
00059 
00063 rarStrParser::rarStrParser(const rarStrParser& aParser)
00064   : TObject(aParser)
00065 {
00066   _str=aParser._str;
00067   // go through tokens and copy them
00068   for (Int_t i=0; i<((rarStrParser&)aParser).nArgs(); i++)
00069     _strs.Add(new TObjString(((rarStrParser&)aParser)[i]));
00070 }
00071 
00072 rarStrParser::~rarStrParser()
00073 {
00074   _strs.Delete();
00075 }
00076 
00080 void rarStrParser::operator=(const char *str)
00081 {
00082   _str=str;
00083   init();
00084 }
00085 
00089 void rarStrParser::operator=(const TString str)
00090 {
00091   rarStrParser::operator=(str.Data());
00092 }
00093 
00097 void rarStrParser::operator=(const RooStringVar str)
00098 {
00099   rarStrParser::operator=(str.getVal());
00100 }
00101 
00106 TString &rarStrParser::operator[](const Int_t idx)
00107 {
00108   TObjString *retVal=(TObjString*)_strs.At(idx);
00109   if (retVal) return retVal->String();
00110   return _str;
00111 }
00112 
00116 void rarStrParser::Remove(const Int_t idx)
00117 {
00118   TObject *val=_strs.At(idx);
00119   if (val) {
00120     _strs.Remove(val);
00121     delete val;
00122   }
00123 }
00124 
00130 Bool_t rarStrParser::Have(const TString token) {
00131   return (Index(token)<0) ? kFALSE : kTRUE;
00132 }
00133 
00139 Int_t rarStrParser::Index(const TString token) {
00140   Int_t index(-1);
00141   for (Int_t i=0; i<nArgs(); i++)
00142     if (token==operator[](i)) return i;
00143   return index;
00144 }
00145 
00150 void rarStrParser::init()
00151 {
00152   // reset index and parsed string objs
00153   _idx=0;
00154   _strs.Delete();
00155   TObjString *objStr(0);
00156   while (objStr=nextToken()) {
00157     _strs.Add(objStr);
00158   }
00159 }
00160 
00172 TObjString *rarStrParser::nextToken()
00173 {
00174   Int_t nIdx(0);
00175   if (_idx>=_str.Length()) return 0;
00176   while (' '==_str[_idx] || '\t'==_str[_idx] || '\n'==_str[_idx]) {
00177     _idx++;
00178     if (_idx>=_str.Length()) return 0;
00179   }
00180   if ('"'==_str[_idx]) {
00181     _idx++;
00182     nIdx=_str.Index("\"", _idx);
00183     if(nIdx<0) return 0;
00184   } else {
00185     nIdx=_str.Index(" ", _idx);
00186     if(nIdx<0) nIdx=_str.Length();
00187   }
00188   //cout<<"in Parser "<<nIdx<<" "<<_idx<<" "<<_str(_idx, nIdx-_idx)<<endl;
00189   TString substr=_str(_idx, nIdx-_idx);
00190   TObjString *subStr=new TObjString(substr);
00191   _idx=nIdx;
00192   if (_idx<_str.Length())
00193     if ('"'==_str[_idx]) _idx++;
00194   
00195   return subStr;
00196 }

Generated on 30 Oct 2013 for RooRarFit by  doxygen 1.4.7