00001 #ifndef JETSELECTORTOOLS_HELPERS_H
00002 #define JETSELECTORTOOLS_HELPERS_H
00003
00004 #include <iostream>
00005 #include <sstream>
00006 #include <string>
00007 #include <vector>
00008
00009 #include "TString.h"
00010 #include "TObjString.h"
00011 #include "TObjArray.h"
00012 #include "TFile.h"
00013
00014 #include "AsgTools/MsgStreamMacros.h"
00015
00016
00017 namespace JCT
00018 {
00019
00020 namespace utils
00021 {
00022
00023 template<typename T>
00024 bool isTypeObjFromString(const std::string& str);
00025 template<typename T>
00026 bool isTypeObjFromString(const TString& str);
00027
00028
00029 template<typename T>
00030 bool getTypeObjFromString(const std::string& str, T& obj);
00031 template<typename T>
00032 T getTypeObjFromString(const std::string& str);
00033 template<typename T>
00034 bool getTypeObjFromString(const TString& str, T& obj);
00035 template<typename T>
00036 T getTypeObjFromString(const TString& str);
00037
00038
00039 template <>
00040 bool getTypeObjFromString<std::string>(const std::string& str, std::string& obj);
00041 template <>
00042 bool getTypeObjFromString<TString>(const std::string& str, TString& obj);
00043 template <>
00044 bool getTypeObjFromString<bool>(const std::string& str, bool& obj);
00045 template <>
00046 bool getTypeObjFromString<std::string>(const TString& str, std::string& obj);
00047 template <>
00048 bool getTypeObjFromString<TString>(const TString& str, TString& obj);
00049 template <>
00050 bool getTypeObjFromString<bool>(const TString& str, bool& obj);
00051
00052
00053 template <typename T>
00054 bool vectorize(const TString& str, const TString& sep, std::vector<T>& result);
00055 template <typename T>
00056 std::vector<T> vectorize(const TString& str, const TString& sep);
00057
00058
00059 bool fileExists(const TString& fileName);
00060 bool fileExists(const std::string& fileName);
00061 }
00062
00063 template <typename T>
00064 bool utils::isTypeObjFromString(const std::string& str)
00065 {
00066 std::istringstream iss(str);
00067 T obj;
00068 return !(iss >> obj).fail();
00069 }
00070
00071 template <typename T>
00072 bool utils::isTypeObjFromString(const TString& str)
00073 {
00074 std::string stdstr = str.Data();
00075 return isTypeObjFromString<T>(stdstr);
00076 }
00077
00078 template <typename T>
00079 bool utils::getTypeObjFromString(const std::string& str, T& obj)
00080 {
00081 std::istringstream iss(str);
00082 return !(iss >> obj).fail();
00083 }
00084 template <typename T>
00085 T utils::getTypeObjFromString(const std::string& str)
00086 {
00087 T toReturn;
00088 if (!getTypeObjFromString(str,toReturn))
00089 printf("Failed to convert object: %s\n",str.c_str());
00090
00091 return toReturn;
00092 }
00093 template <typename T>
00094 bool utils::getTypeObjFromString(const TString& str, T& obj)
00095 {
00096 std::string stdstr = str.Data();
00097 return getTypeObjFromString(stdstr,obj);
00098 }
00099 template <typename T>
00100 T utils::getTypeObjFromString(const TString& str)
00101 {
00102 T toReturn;
00103 if (!getTypeObjFromString(str,toReturn))
00104 printf("ERROR: Failed to convert object: %s\n",str.Data());
00105
00106 return toReturn;
00107 }
00108
00109 template <typename T>
00110 bool utils::vectorize(const TString& str, const TString& sep, std::vector<T>& result)
00111 {
00112 bool success = true;
00113 result.clear();
00114
00115 TObjArray* tokens = str.Tokenize(sep);
00116 TIter istr(tokens);
00117 while(TObjString* os=(TObjString*)istr())
00118 {
00119 T obj;
00120 if (!getTypeObjFromString(os->GetString(),obj))
00121 {
00122 success = false;
00123 break;
00124 }
00125 else
00126 result.push_back(obj);
00127 }
00128 delete tokens;
00129
00130 return success;
00131 }
00132
00133 template <typename T>
00134 std::vector<T> utils::vectorize(const TString& str, const TString& sep)
00135 {
00136 std::vector<T> result;
00137 TObjArray* tokens = str.Tokenize(sep);
00138 TIter istr(tokens);
00139
00140 while(TObjString* os=(TObjString*)istr())
00141 {
00142 T obj;
00143 if (!getTypeObjFromString(os->GetString(),obj))
00144 printf("ERROR: String \"%s\" is not the requested type\n",os->GetString().Data());
00145 result.push_back(obj);
00146 }
00147 delete tokens;
00148
00149 return result;
00150 }
00151
00152 }
00153
00154 #endif
00155
00156