6
#ifndef __STRING_UTILITY_H__
7
#define __STRING_UTILITY_H__
19
inline void trim(std::string& _str, bool _left = true, bool _right = true)
21
if (_right) _str.erase(_str.find_last_not_of(" \t\r") + 1);
22
if (_left) _str.erase(0, _str.find_first_not_of(" \t\r"));
25
inline std::string trim_result(const std::string& _str, bool _left = true, bool _right = true)
27
std::string result = _str;
28
if (_right) result.erase(_str.find_last_not_of(" \t\r") + 1);
29
if (_left) result.erase(0, _str.find_first_not_of(" \t\r"));
33
// ��������������� � ������
35
inline std::string toString (T p)
37
std::ostringstream stream;
42
inline const std::string& toString (const std::string& _value)
47
template<typename T1, typename T2 >
48
inline std::string toString (T1 p1, T2 p2)
50
std::ostringstream stream;
55
template<typename T1, typename T2, typename T3 >
56
inline std::string toString (T1 p1, T2 p2, T3 p3)
58
std::ostringstream stream;
59
stream << p1 << p2 << p3;
63
template<typename T1, typename T2, typename T3, typename T4 >
64
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4)
66
std::ostringstream stream;
67
stream << p1 << p2 << p3 << p4;
71
template<typename T1, typename T2, typename T3, typename T4, typename T5 >
72
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5)
74
std::ostringstream stream;
75
stream << p1 << p2 << p3 << p4 << p5;
79
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6 >
80
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6)
82
std::ostringstream stream;
83
stream << p1 << p2 << p3 << p4 << p5 << p6;
87
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7 >
88
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7)
90
std::ostringstream stream;
91
stream << p1 << p2 << p3 << p4 << p5 << p6 << p7;
95
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8 >
96
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8)
98
std::ostringstream stream;
99
stream << p1 << p2 << p3 << p4 << p5 << p6 << p7 << p8;
104
inline std::string toString<bool> (bool _value)
106
return _value ? "true" : "false";
110
// ������� ��� ��������
111
template<typename T >
112
inline T parseValue( const std::string& _value )
114
std::istringstream stream(_value);
117
if (stream.fail()) return T();
120
int item = stream.get();
123
if (item != ' ' && item != '\t') return T();
130
inline char parseChar(const std::string& _value)
132
return static_cast<char>(parseValue<short>(_value));
134
inline unsigned char parseUChar(const std::string& _value)
136
return static_cast<unsigned char>(parseValue<unsigned short>(_value));
138
inline short parseShort(const std::string& _value)
140
return parseValue<short>(_value);
142
inline unsigned short parseUShort(const std::string& _value)
144
return parseValue<unsigned short>(_value);
146
inline int parseInt(const std::string& _value)
148
return parseValue<int>(_value);
150
inline unsigned int parseUInt(const std::string& _value)
152
return parseValue<unsigned int>(_value);
154
inline size_t parseSizeT(const std::string& _value)
156
return parseValue<size_t>(_value);
158
inline float parseFloat(const std::string& _value)
160
return parseValue<float>(_value);
162
inline double parseDouble(const std::string& _value)
164
return parseValue<double>(_value);
166
inline bool parseBool(const std::string& _value)
168
std::string value(_value);
170
return ( (value == "true") || (value == "1") );
173
// ��� �������� ������� �����, ��������� �� �������
174
template<typename T1, typename T2 >
175
inline T1 parseValueEx2(const std::string& _value)
178
std::istringstream stream(_value);
180
if (stream.fail()) return T1();
183
int item = stream.get();
186
if (item != ' ' && item != '\t') return T1();
193
template<typename T1, typename T2 >
194
inline T1 parseValueEx3(const std::string& _value)
197
std::istringstream stream(_value);
198
stream >> p1 >> p2 >> p3;
199
if (stream.fail()) return T1();
202
int item = stream.get();
205
if (item != ' ' && item != '\t') return T1();
209
return T1(p1, p2, p3);
212
template<typename T1, typename T2 >
213
inline T1 parseValueEx4(const std::string& _value)
216
std::istringstream stream(_value);
217
stream >> p1 >> p2 >> p3 >> p4;
218
if (stream.fail()) return T1();
221
int item = stream.get();
224
if (item != ' ' && item != '\t') return T1();
228
return T1(p1, p2, p3, p4);
234
inline void split(std::vector<std::string> & _ret, const std::string& _source, const std::string& _delims)
236
size_t start = _source.find_first_not_of(_delims);
237
while (start != _source.npos)
239
size_t end = _source.find_first_of(_delims, start);
240
if (end != _source.npos) _ret.push_back(_source.substr(start, end - start));
243
_ret.push_back(_source.substr(start));
246
start = _source.find_first_not_of(_delims, end + 1);
249
} // namespace templates
251
inline std::vector<std::string> split(const std::string& _source, const std::string& _delims = "\t\n ")
253
std::vector<std::string> result;
254
templates::split<void>(result, _source, _delims);
258
template<typename T1, typename T2, typename T3, typename T4>
259
inline bool parseComplex(const std::string& _value, T1& _p1, T2& _p2, T3& _p3, T4& _p4)
261
std::istringstream stream(_value);
263
stream >> _p1 >> _p2 >> _p3 >> _p4;
265
if (stream.fail()) return false;
266
int item = stream.get();
269
if (item != ' ' && item != '\t') return false;
276
template<typename T1, typename T2, typename T3>
277
inline bool parseComplex(const std::string& _value, T1& _p1, T2& _p2, T3& _p3)
279
std::istringstream stream(_value);
281
stream >> _p1 >> _p2 >> _p3;
283
if (stream.fail()) return false;
284
int item = stream.get();
287
if (item != ' ' && item != '\t') return false;
294
template<typename T1, typename T2>
295
inline bool parseComplex(const std::string& _value, T1& _p1, T2& _p2)
297
std::istringstream stream(_value);
299
stream >> _p1 >> _p2;
301
if (stream.fail()) return false;
302
int item = stream.get();
305
if (item != ' ' && item != '\t') return false;
312
template<typename T1>
313
inline bool parseComplex(const std::string& _value, T1& _p1)
315
std::istringstream stream(_value);
319
if (stream.fail()) return false;
320
int item = stream.get();
323
if (item != ' ' && item != '\t') return false;
331
inline bool parseComplex<bool>(const std::string& _value, bool& _p1)
333
std::string value(_value);
335
if ((value == "true") || (value == "1"))
340
else if ((value == "false") || (value == "0"))
349
} // namespace utility
351
#endif // __STRING_UTILITY_H__