Files Classes Functions Hierarchy
00001 #ifndef STRINGCONVERT_H 00002 #define STRINGCONVERT_H 00003 00004 #include <sstream> 00005 using namespace std; 00006 00007 #include <typedefs.h> 00008 00015 template< typename T > 00016 string& operator << (string& str, T const & x); 00017 00018 // Functional conversion functions. 00019 // These are more compact that the class stringconvert and code using them 00020 // is easier to use. 00021 // See also stringserialization.h 00022 00024 template< typename T > 00025 void stringfrom(T & targ, stringc & str); 00027 template< typename T > 00028 void stringto(string & str, T const data); 00030 template< typename T > 00031 stringc stringto(T const data); 00032 00036 class stringconvert 00037 { 00038 public: 00039 00041 template <typename T> 00042 static stringc tostring(T const x) 00043 { 00044 stringstream ss; 00045 ss << x; 00046 return ss.str(); 00047 } 00049 template< typename T> 00050 static void fromstring( T & x, stringc & s) 00051 { 00052 stringstream ss(s); 00053 ss >> x; 00054 } 00055 00058 static void findandreplace 00059 ( 00060 string& source, 00061 stringc & find, 00062 stringc & replace 00063 ); 00064 00066 static stringc findandreplacefn 00067 ( 00068 stringc & source, 00069 stringc & find, 00070 stringc & replace 00071 ); 00072 00073 }; 00074 00075 // Possible to expand. e.g. isstringhex, isstringip4 ... 00076 00077 // Characters and not numerical values tested! 00078 // Remove white space around string. 00079 00081 boolc isstringdigits(stringc & str); 00084 boolc isstringinteger(stringc & str); 00086 boolc isstringzero_or_positive_real(stringc & str); 00088 boolc isstringreal(stringc & str); 00090 boolc isstringnegative(stringc & str); 00091 00093 template< typename T > 00094 stringc stringtag( T x, stringc & tag ) 00095 { 00096 string s1 = "<" + tag + ">"; 00097 s1 += stringto(x); 00098 s1 += ( "</" + tag + ">\n"); 00099 return s1; 00100 } 00101 00102 //--------------------------------------------------------- 00103 // Implementation. 00104 00105 template< typename T > 00106 string& operator << (string& str, T const & x) 00107 { 00108 stringstream ss; 00109 ss << x; 00110 str += ss.str(); 00111 00112 return str; 00113 } 00114 00115 template< typename T > 00116 void stringfrom(T & targ, stringc & str) 00117 { 00118 stringstream ss(str); 00119 ss >> targ; 00120 } 00121 00122 template< typename T > 00123 void stringto(string & str, T const data) 00124 { 00125 stringstream ss; 00126 ss << data; 00127 str = ss.str(); 00128 } 00129 00130 template< typename T > 00131 stringc stringto(T const data) 00132 { 00133 stringstream ss; 00134 ss << data; 00135 return ss.str(); 00136 } 00137 00138 00139 00140 00141 #endif 00142
1.5.8