EvtParser Class Reference

#include <EvtParser.hh>

List of all members.

Public Member Functions

 EvtParser ()
 ~EvtParser ()
int Read (const std::string filename)
int getNToken ()
const std::stringgetToken (int i)
int getLineofToken (int i)

Private Member Functions

void addToken (int line, const std::string &string)

Private Attributes

int _ntoken
std::string_tokenlist
int * _linelist
int _lengthoftokenlist


Detailed Description

Definition at line 26 of file EvtParser.hh.


Constructor & Destructor Documentation

EvtParser::EvtParser (  ) 

Definition at line 36 of file EvtParser.cc.

References _lengthoftokenlist, _linelist, _ntoken, and _tokenlist.

00036                     {
00037   _ntoken=0;
00038   _lengthoftokenlist=0;
00039   _tokenlist=0;
00040   _linelist=0;
00041 }

EvtParser::~EvtParser (  ) 

Definition at line 43 of file EvtParser.cc.

References _linelist, and _tokenlist.

00043                      {
00044 
00045   delete [] _tokenlist;
00046   delete [] _linelist;
00047 
00048 }


Member Function Documentation

void EvtParser::addToken ( int  line,
const std::string string 
) [private]

Definition at line 134 of file EvtParser.cc.

References _lengthoftokenlist, _linelist, _ntoken, _tokenlist, genRecEmupikp::i, and deljobs::string.

Referenced by Read().

00134                                                         {
00135 
00136   //report(INFO,"EvtGen") <<_ntoken<<" "<<line<<" "<<string<<endl;  
00137 
00138   if (_ntoken==_lengthoftokenlist) {
00139 
00140     int new_length=1000+4*_lengthoftokenlist;
00141 
00142 
00143     
00144     int*     newlinelist= new int[new_length];
00145     std::string* newtokenlist= new std::string[new_length];
00146   
00147     int i;
00148 
00149     for(i=0;i<_ntoken;i++){
00150      newlinelist[i]=_linelist[i];
00151      newtokenlist[i]=_tokenlist[i];
00152     }
00153 
00154     delete [] _tokenlist;
00155     delete [] _linelist;
00156 
00157     _tokenlist=newtokenlist;
00158     _linelist=newlinelist;    
00159 
00160     _lengthoftokenlist=new_length;
00161 
00162   }
00163 
00164 
00165   _tokenlist[_ntoken]=string;
00166 
00167   _linelist[_ntoken]=line;
00168  
00169   _ntoken++;  
00170 
00171   //report(INFO,"EvtGen") << "First:"<<_tokenlist[0]<<" last:"<<_tokenlist[_ntoken-1]<<endl;
00172 
00173 }

int EvtParser::getLineofToken ( int  i  ) 

Definition at line 63 of file EvtParser.cc.

References _linelist.

Referenced by EvtDecayTable::readDecayFile().

00063                                   {
00064 
00065   return _linelist[i];
00066 
00067 }

int EvtParser::getNToken (  ) 

Definition at line 51 of file EvtParser.cc.

References _ntoken.

Referenced by EvtMultiChannelParser::getDecayMode(), EvtMultiChannelParser::parse(), and EvtDecayTable::readDecayFile().

00051                         {
00052 
00053   return _ntoken;
00054 
00055 }

const std::string & EvtParser::getToken ( int  i  ) 

Definition at line 57 of file EvtParser.cc.

References _tokenlist.

Referenced by EvtMultiChannelParser::getDecayMode(), EvtMultiChannelParser::parse(), and EvtDecayTable::readDecayFile().

00057                                          {
00058 
00059   return _tokenlist[i];
00060 
00061 }

int EvtParser::Read ( const std::string  filename  ) 

Definition at line 69 of file EvtParser.cc.

References addToken(), calibUtil::ERROR, genRecEmupikp::i, genRecEmupikp::line, MAXBUF, and report().

Referenced by EvtMultiChannelParser::getDecayMode(), EvtMultiChannelParser::parse(), and EvtDecayTable::readDecayFile().

00069                                            {
00070   ifstream fin;
00071   
00072   fin.open(filename.c_str());
00073   if (!fin) {
00074     report(ERROR,"EvtGen") << "Could not open file '"<<filename.c_str()<<"'"<<endl;
00075     return -1;
00076   }
00077 
00078   char buf[MAXBUF];
00079   char buf2[MAXBUF];
00080   char c;
00081 
00082   int line=0;
00083   int i;
00084 
00085   while(fin.peek() != EOF){
00086     line++;
00087     
00088     i=0;
00089     while((c=fin.get()) != '\n' && i<MAXBUF) {
00090       buf[i]=c;
00091       i++;
00092     }
00093     if(i==MAXBUF) {
00094       report(ERROR,"EvtGen") << "Error in EvtParser: line:"
00095                              <<line<<" to long"<<endl;
00096     }
00097     else {
00098       buf[i] = '\0';
00099     }
00100     
00101     //search for '#' which indicates comment for rest of line!
00102     i=0;
00103     do{
00104       if (buf[i]=='#') buf[i]=0;
00105       i++;
00106     }while(buf[i-1]!=0);
00107 
00108     //read each token
00109     istrstream ist(buf,strlen(buf));
00110     while(ist>>buf2){
00111       i=0;
00112       int semicolon=0;
00113       do{
00114         if (buf2[i]==';') {
00115           buf2[i]=0;
00116           semicolon=1;
00117         }
00118       }while(buf2[i++]!=0);
00119       if (buf2[0]!=0){
00120         addToken(line,buf2);
00121       }
00122       if (semicolon) addToken(line,";");
00123     }
00124   }
00125 
00126   fin.close();
00127 
00128   return 0;
00129   
00130 }


Member Data Documentation

int EvtParser::_lengthoftokenlist [private]

Definition at line 41 of file EvtParser.hh.

Referenced by addToken(), and EvtParser().

int* EvtParser::_linelist [private]

Definition at line 40 of file EvtParser.hh.

Referenced by addToken(), EvtParser(), getLineofToken(), and ~EvtParser().

int EvtParser::_ntoken [private]

Definition at line 38 of file EvtParser.hh.

Referenced by addToken(), EvtParser(), and getNToken().

std::string* EvtParser::_tokenlist [private]

Definition at line 39 of file EvtParser.hh.

Referenced by addToken(), EvtParser(), getToken(), and ~EvtParser().


Generated on Tue Nov 29 23:19:09 2016 for BOSS_7.0.2 by  doxygen 1.4.7