TurtleBrains  0.2.1
High quality, portable, C++ API for native application and game development.
tb_string.h
1 
9 #ifndef _TurtleBrains_String_h_
10 #define _TurtleBrains_String_h_
11 
12 #include "tb_configuration.h"
13 #include "tb_error.h"
14 
15 #include <sstream>
16 #include <string>
17 
22 
28 #define tb_string(object) TurtleBrains::Core::ToString((object))
29 
33 
34 namespace TurtleBrains
35 {
36  namespace Core
37  {
38 
50  template <typename T> std::string ToStdString(const T& object)
51  {
52  std::stringstream ss;
53  ss << object;
54  return ss.str();
55  }
56 
65  inline std::string ToStdString(const std::string& object)
66  {
67  return object;
68  }
69 
78  inline std::string ToStdString(const std::wstring& object)
79  {
80  std::ostringstream stream;
81  const std::ctype<char>& ctfacet = std::use_facet< std::ctype<char> >(stream.getloc());
82  for (size_t i = 0; i < object.size(); ++i)
83  {
84  stream << static_cast<char>(ctfacet.narrow(static_cast<char>(object[i]), '?'));
85  }
86  return stream.str();
87  }
88 
96  inline std::string ToStdString(const wchar_t* object)
97  {
98  return ToStdString(std::wstring(object));
99  }
100 
113  template <typename T> T FromStdString(const std::string& input)
114  {
115  tb_error_if(true == input.empty(), "Invalid value for parameter: input, expected valid, non-empty, string.");
116  T object;
117  std::stringstream ss(input);
118  ss >> object;
119  return object;
120  }
121 
133  template <typename T> T FromString(const std::string& input)
134  {
135  return FromStdString<T>(input);
136  }
137 
138 //--------------------------------------------------------------------------------------------------------------------//
139 //--------------------------------------------------------------------------------------------------------------------//
140 //--------------------------------------------------------------------------------------------------------------------//
141 
153  template <typename T> std::wstring ToWideString(const T& object)
154  {
155  std::wstringstream wss;
156  wss << object;
157  return wss.str();
158  }
159 
168  inline std::wstring ToWideString(const std::wstring& object)
169  {
170  return object;
171  }
172 
180  inline std::wstring ToWideString(const std::string& object)
181  {
182  std::wostringstream stream;
183  const std::ctype<wchar_t>& ctfacet = std::use_facet< std::ctype<wchar_t> >(stream.getloc());
184  for (size_t i = 0; i < object.size(); ++i)
185  {
186  stream << ctfacet.widen(object[i]);
187  }
188  return stream.str();
189  }
190 
198  inline std::wstring ToWideString(const char* object)
199  {
200  return ToWideString(std::string(object));
201  }
202 
215  template <typename T> T FromWideString(const std::wstring& input)
216  {
217  tb_error_if(true == input.empty(), "Invalid value for parameter: input, expected valid, non-empty, string.");
218  T object;
219  std::wstringstream wss(input);
220  wss >> object;
221  return object;
222  }
223 
235  template <typename T> T FromString(const std::wstring& input)
236  {
237  return FromWideString<T>(input);
238  }
239 
240 //--------------------------------------------------------------------------------------------------------------------//
241 //--------------------------------------------------------------------------------------------------------------------//
242 //--------------------------------------------------------------------------------------------------------------------//
243 
255 #ifdef tb_wide_string
256  typedef std::wstring tbString;
257 // class tbString : public std::wstring
258 // {
259 // public:
260 // tbString(void) : std::wstring(L"") { }
261 // tbString(const tbString& input) : std::wstring(input.c_str()) { }
262 // tbString(const std::wstring& input) : std::wstring(input) { }
263 // tbString(const std::string& input) : std::wstring(ToWideString(input)) { }
264 // tbString(const wchar_t* input) : std::wstring(input) { }
265 // tbString(const char* input) : std::wstring(ToWideString(input)) { }
266 //
267 // tbString& operator=(const tbString& input) { std::wstring::operator=(input.c_str()); return *this; }
268 // tbString& operator=(const std::wstring& input) { std::wstring::operator=(input); return *this; }
269 // tbString& operator=(const std::string& input) { std::wstring::operator=(ToWideString(input)); return *this; }
270 // tbString& operator=(const wchar_t* input) { std::wstring::operator=(input); return *this; }
271 // tbString& operator=(const char* input) { std::wstring::operator=(ToWideString(input)); return *this; }
272 //
273 // friend tbString operator+(const std::string& leftSide, const tbString& rightSide) { return ToWideString(leftSide) + rightSide.c_str(); }
274 // friend tbString operator+(const char* leftSide, const tbString& rightSide) { return ToWideString(leftSide) + rightSide.c_str(); }
275 //
276 // // tbString operator+(const tbString& input) { return std::wstring::operator+(std::wstring(input.c_str())); }
277 // // tbString operator+(const std::wstring& input) { return std::wstring::operator+(input); }
278 // // tbString operator+(const std::string& input) { return std::wstring::operator+(ToWideString(input)); }
279 // // tbString operator+(const wchar_t* input) { return std::wstring::operator+(input); }
280 // // tbString operator+(const char* input) { return std::wstring::operator+(ToWideString(input.c_str())); }
281 //
282 // operator const void*(void) const { return c_str(); }
283 //
284 // //operator const wchar_t*(void) const { return c_str(); }
285 //
286 // //std::istream& operator>>(std::istream& inputStream) { std::wstring s; inputStream >> s; *this = s; return inputStream; }
291 // };
292 #else
293  typedef std::string tbString;
294 // class tbString : public std::string
295 // {
296 // public:
297 // tbString(void) : std::string("") { }
298 // tbString(const tbString& input) : std::string(input.c_str()) { }
299 // tbString(const std::wstring& input) : std::string(ToStdString(input)) { }
300 // tbString(const std::string& input) : std::string(input) { }
301 // tbString(const wchar_t* input) : std::string(ToStdString(input)) { }
302 // tbString(const char* input) : std::string(input) { }
303 //
304 // tbString& operator=(const tbString& input) { std::string::operator=(input.c_str()); return *this; }
305 // tbString& operator=(const std::wstring& input) { std::string::operator=(ToStdString(input)); return *this; }
306 // tbString& operator=(const std::string& input) { std::string::operator=(input); return *this; }
307 // tbString& operator=(const wchar_t* input) { std::string::operator=(ToStdString(input)); return *this; }
308 // tbString& operator=(const char* input) { std::string::operator=(input); return *this; }
309 //
310 // friend tbString operator+(const std::wstring& leftSide, const tbString& rightSide) { return ToStdString(leftSide) + rightSide.c_str(); }
311 // friend tbString operator+(const wchar_t* leftSide, const tbString& rightSide) { return ToStdString(leftSide) + rightSide.c_str(); }
312 //
313 // operator const void*(void) const { return c_str(); }
314 // };
315 
316 #endif /* tb_wide_string */
317 
329  template <typename T> tbString ToString(const T& object)
330  {
331 #ifdef tb_wide_string
332  return ToWideString(object);
333 #else
334  return ToStdString(object);
335 #endif /* tb_wide_string */
336  }
337 
338  }; /* namespace Core */
339 }; /* namespace TurtleBrains */
340 
341 // inline operator float*(void) { return mFloatArray; }
342 
343 //std::string& operator=(std::string& leftSide, const std::wstring& rightSide) { lhs = TurtleBrains::Core::ToStdString(rightSide); return leftSide; }
344 //std::wstring& operator=(std::wstring& leftSide, const std::string& rightSide) { lhs = TurtleBrains::Core::ToWideString(rightSide); return rightSide; }
345 
346 //operator() std::string(const std::wstring& input) { return TurtleBrains::Core::ToStdString(input); }
347 //std::wstring operator(const std::string& input) { return TurtleBrains::Core::ToWideString(input); }
348 
349 namespace tbCore = TurtleBrains::Core;
350 
351 #endif /* _TurtleBrains_String_h_ */
T FromString(const std::string &input)
Definition: tb_string.h:133
tbString ToString(const T &object)
Definition: tb_string.h:329
std::string ToStdString(const T &object)
Definition: tb_string.h:50
T FromWideString(const std::wstring &input)
Definition: tb_string.h:215
Contains all functions, classes and helpers related to game/application development written by Tim "B...
Definition: tb_application_dialog.h:21
T FromStdString(const std::string &input)
Definition: tb_string.h:113
std::wstring ToWideString(const T &object)
Definition: tb_string.h:153
Contains core functionality for each component of the API.
Definition: tb_dynamic_structure.h:21
#define tb_error_if(errorTest, message,...)
Definition: tb_error.h:37
std::string tbString
Definition: tb_string.h:293