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
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