CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/RecoParticleFlow/PFRootEvent/interface/IO.h

Go to the documentation of this file.
00001 #ifndef __IO__
00002 #define __IO__
00003 
00004 #include <string>
00005 #include <vector>
00006 
00007 
00008 #include <iostream>
00009 #include <fstream>
00010 // #include <strstream>
00011 #include <sstream>
00012 #include <iomanip>
00013 
00014 #ifndef __CINT__
00015 #include <fnmatch.h>
00016 #endif
00017 
00018 
00028 class IO {
00029  private:
00031   std::vector< std::pair< std::string, std::string> > fAllLines;
00032 
00034   bool ParseFile(const char* filename);
00035   
00037   int fCurline;
00038   
00040   std::string fCurkey;
00041   
00043   std::string fCurtag;
00044  
00045 
00046  public:
00048   static const unsigned sLinesize;
00049 
00051   IO(const char* filepattern);
00052   ~IO() {fAllLines.clear();}
00053 
00055   void Dump(std::ostream& out = std::cout) const;
00056 
00058   friend std::ostream& operator<<(std::ostream& out, IO& io);
00059 
00061   bool IsZombie() const {return !fAllLines.size();}
00062 
00063 #ifndef __CINT__
00064 
00065   template <class T>
00066     bool GetOpt(const char* tag, const char* key, std::vector< T >& values) const; 
00067   
00069   template <class T>
00070     bool GetOpt(const char* tag, const char* key, T& value) const; 
00071 
00073   bool GetOpt(const char* tag, const char* key, std::string& value) const;
00074 
00082   template <class T>  
00083     bool GetAllOpt(const char* tag, const char* key, std::vector< T >& values);       
00084 
00093   template <class T>
00094     bool GetAllOpt(const char* tag, const char* key, T& value); 
00095 
00096   std::string GetLineData(const char* tag, const char* key) const;
00097   std::string GetNextLineData(const char* tag, const char* key);
00098 
00099   
00100 #endif
00101 };
00102 
00103 #ifndef __CINT__
00104 
00105 template <class T>
00106 bool IO::GetOpt(const char* tag, const char* key, std::vector< T >& values) const {
00107   std::string data = GetLineData(tag,key);
00108  
00109   std::istringstream in(data.c_str());  
00110   while(1) {
00111     T tmp;
00112     in>>tmp;
00113     if(!in) break;
00114     values.push_back(tmp);
00115   } 
00116 
00117   return true;
00118 }
00119 
00120 template <class T>
00121 bool IO::GetOpt(const char* tag, const char* key, T& value) const {
00122   std::string data = GetLineData(tag,key);
00123   
00124   std::istringstream in(data.c_str());  
00125   in>>value;
00126   if(in.good()) return true;
00127   else return false;
00128 }
00129 
00130 template <class T>  
00131 bool IO::GetAllOpt(const char* tag, const char* key, std::vector< T >& values) {
00132   return false;
00133 } 
00134 
00135 template <class T>
00136 bool IO::GetAllOpt(const char* tag, const char* key, T& value) {
00137   std::string data = GetNextLineData(tag, key);
00138   if(data.empty()) return false;
00139   
00140   std::istringstream in(data.c_str());  
00141   in>>value;
00142   if(in) {
00143     return true;
00144   }
00145   else {
00146     return false;  
00147   }
00148 }
00149 
00150 
00151 #endif // __CINT__
00152 
00153 #endif
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162