23 #ifndef __MYGUI_UTILITY_H__
24 #define __MYGUI_UTILITY_H__
35 inline void trim(std::string& _str,
bool _left =
true,
bool _right =
true)
37 if (_right) _str.erase(_str.find_last_not_of(
" \t\r")+1);
38 if (_left) _str.erase(0, _str.find_first_not_of(
" \t\r"));
45 std::ostringstream stream;
50 inline const std::string&
toString (
const std::string& _value)
55 template<
typename T1,
typename T2 >
58 std::ostringstream stream;
63 template<
typename T1,
typename T2,
typename T3 >
64 inline std::string
toString (T1 p1, T2 p2, T3 p3)
66 std::ostringstream stream;
67 stream << p1 << p2 << p3;
71 template<
typename T1,
typename T2,
typename T3,
typename T4 >
72 inline std::string
toString (T1 p1, T2 p2, T3 p3, T4 p4)
74 std::ostringstream stream;
75 stream << p1 << p2 << p3 << p4;
79 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5 >
80 inline std::string
toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5)
82 std::ostringstream stream;
83 stream << p1 << p2 << p3 << p4 << p5;
87 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6 >
88 inline std::string
toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6)
90 std::ostringstream stream;
91 stream << p1 << p2 << p3 << p4 << p5 << p6;
95 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7 >
96 inline std::string
toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7)
98 std::ostringstream stream;
99 stream << p1 << p2 << p3 << p4 << p5 << p6 << p7;
103 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8 >
104 inline std::string
toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8)
106 std::ostringstream stream;
107 stream << p1 << p2 << p3 << p4 << p5 << p6 << p7 << p8;
111 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9 >
112 inline std::string
toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8, T9 p9)
114 std::ostringstream stream;
115 stream << p1 << p2 << p3 << p4 << p5 << p6 << p7 << p8 << p9;
122 return _value ?
"true" :
"false";
127 template<
typename T >
130 std::istringstream stream(_value);
133 if (stream.fail())
return T();
136 int item = stream.get();
139 if (item !=
' ' && item !=
'\t')
return T();
150 if (_value ==
"true" || _value ==
"1")
return true;
156 inline char parseValue(
const std::string& _value ) {
return (
char)parseValue<short>(_value); }
160 inline unsigned char parseValue(
const std::string& _value ) {
return (
unsigned char)parseValue<unsigned short>(_value); }
163 inline short parseShort(
const std::string& _value) {
return parseValue<short>(_value); }
164 inline unsigned short parseUShort(
const std::string& _value) {
return parseValue<unsigned short>(_value); }
165 inline int parseInt(
const std::string& _value) {
return parseValue<int>(_value); }
166 inline unsigned int parseUInt(
const std::string& _value) {
return parseValue<unsigned int>(_value); }
167 inline size_t parseSizeT(
const std::string& _value) {
return parseValue<size_t>(_value); }
168 inline float parseFloat(
const std::string& _value) {
return parseValue<float>(_value); }
169 inline double parseDouble(
const std::string& _value) {
return parseValue<double>(_value); }
171 inline bool parseBool(
const std::string& _value) {
return parseValue<bool>(_value); }
172 inline char parseChar(
const std::string& _value) {
return parseValue<char>(_value); }
173 inline unsigned char parseUChar(
const std::string& _value) {
return parseValue<unsigned char>(_value); }
176 template<
typename T1,
typename T2 >
180 std::istringstream stream(_value);
182 if (stream.fail())
return T1();
185 int item = stream.get();
188 if (item !=
' ' && item !=
'\t')
return T1();
195 template<
typename T1,
typename T2 >
199 std::istringstream stream(_value);
200 stream >> p1 >> p2 >> p3;
201 if (stream.fail())
return T1();
204 int item = stream.get();
207 if (item !=
' ' && item !=
'\t')
return T1();
211 return T1(p1, p2, p3);
214 template<
typename T1,
typename T2 >
218 std::istringstream stream(_value);
219 stream >> p1 >> p2 >> p3 >> p4;
220 if (stream.fail())
return T1();
223 int item = stream.get();
226 if (item !=
' ' && item !=
'\t')
return T1();
230 return T1(p1, p2, p3, p4);
236 inline void split(std::vector<std::string>& _ret,
const std::string& _source,
const std::string& _delims)
238 size_t start = _source.find_first_not_of(_delims);
239 while (start != _source.npos)
241 size_t end = _source.find_first_of(_delims, start);
242 if (end != _source.npos) _ret.push_back(_source.substr(start, end-start));
245 _ret.push_back(_source.substr(start));
248 start = _source.find_first_not_of(_delims, end + 1);
253 inline std::vector<std::string>
split(
const std::string& _source,
const std::string& _delims =
"\t\n ")
255 std::vector<std::string> result;
256 templates::split<void>(result, _source, _delims);
260 template<
typename T1,
typename T2,
typename T3,
typename T4>
261 inline bool parseComplex(
const std::string& _value, T1& _p1, T2& _p2, T3& _p3, T4& _p4)
263 std::istringstream stream(_value);
265 stream >> _p1 >> _p2 >> _p3 >> _p4;
267 if (stream.fail())
return false;
268 int item = stream.get();
271 if (item !=
' ' && item !=
'\t')
return false;
278 template<
typename T1,
typename T2,
typename T3>
279 inline bool parseComplex(
const std::string& _value, T1& _p1, T2& _p2, T3& _p3)
281 std::istringstream stream(_value);
283 stream >> _p1 >> _p2 >> _p3;
285 if (stream.fail())
return false;
286 int item = stream.get();
289 if (item !=
' ' && item !=
'\t')
return false;
296 template<
typename T1,
typename T2>
299 std::istringstream stream(_value);
301 stream >> _p1 >> _p2;
303 if (stream.fail())
return false;
304 int item = stream.get();
307 if (item !=
' ' && item !=
'\t')
return false;
314 template<
typename T1>
317 std::istringstream stream(_value);
321 if (stream.fail())
return false;
322 int item = stream.get();
325 if (item !=
' ' && item !=
'\t')
return false;
335 std::string value(_value);
337 if ((value ==
"true") || (value ==
"1"))
342 else if ((value ==
"false") || (value ==
"0"))
355 #endif // __MYGUI_UTILITY_H__