CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_1/src/RecoParticleFlow/PFClusterTools/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 namespace pftools {
00029 class IO {
00030  private:
00032   std::vector< std::pair< std::string, std::string> > fAllLines;
00033 
00035   bool ParseFile(const char* filename);
00036   
00038   int fCurline;
00039   
00041   std::string fCurkey;
00042   
00044   std::string fCurtag;
00045  
00046 
00047  public:
00049   static const unsigned sLinesize;
00050 
00052   IO(const char* filepattern);
00053   ~IO() {fAllLines.clear();}
00054 
00056   void Dump(std::ostream& out = std::cout) const;
00057 
00059   friend std::ostream& operator<<(std::ostream& out, IO& io);
00060 
00062   bool IsZombie() const {return !fAllLines.size();}
00063 
00064 #ifndef __CINT__
00065 
00066   template <class T>
00067     bool GetOpt(const char* tag, const char* key, std::vector< T >& values) const; 
00068   
00070   template <class T>
00071     bool GetOpt(const char* tag, const char* key, T& value) const; 
00072 
00074   bool GetOpt(const char* tag, const char* key, std::string& value) const;
00075 
00083   template <class T>  
00084     bool GetAllOpt(const char* tag, const char* key, std::vector< T >& values);       
00085 
00094   template <class T>
00095     bool GetAllOpt(const char* tag, const char* key, T& value); 
00096 
00097   std::string GetLineData(const char* tag, const char* key) const;
00098   std::string GetNextLineData(const char* tag, const char* key);
00099 
00100   
00101 #endif
00102 };
00103 }
00104 
00105 #ifndef __CINT__
00106 
00107 template <class T>
00108 bool pftools::IO::GetOpt(const char* tag, const char* key, std::vector< T >& values) const {
00109   std::string data = GetLineData(tag,key);
00110  
00111   std::istringstream in(data.c_str());  
00112   while(1) {
00113     T tmp;
00114     in>>tmp;
00115     if(!in) break;
00116     values.push_back(tmp);
00117   } 
00118 
00119   return true;
00120 }
00121 
00122 template <class T>
00123 bool pftools::IO::GetOpt(const char* tag, const char* key, T& value) const {
00124   std::string data = GetLineData(tag,key);
00125   
00126   std::istringstream in(data.c_str());  
00127   in>>value;
00128   if(in.good()) return true;
00129   else return false;
00130 }
00131 
00132 template <class T>  
00133 bool pftools::IO::GetAllOpt(const char* tag, const char* key, std::vector< T >& values) {
00134   return false;
00135 } 
00136 
00137 template <class T>
00138 bool pftools::IO::GetAllOpt(const char* tag, const char* key, T& value) {
00139   std::string data = GetNextLineData(tag, key);
00140   if(data.empty()) return false;
00141   
00142   std::istringstream in(data.c_str());  
00143   in>>value;
00144   if(in) {
00145     return true;
00146   }
00147   else {
00148     return false;  
00149   }
00150 }
00151 
00152 
00153 #endif // __CINT__
00154 
00155 #endif
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164