2
0

PolyString.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #pragma once
  2. #include "PolyGlobals.h"
  3. #include <string>
  4. #include <vector>
  5. using std::vector;
  6. using namespace std;
  7. typedef std::string Str;
  8. typedef std::wstring WStr;
  9. void utf8toWStr(WStr& dest, const Str& src);
  10. void wstrToUtf8(Str& dest, const WStr& src);
  11. namespace Polycode {
  12. class _PolyExport String {
  13. public:
  14. String();
  15. String(const wchar_t *str);
  16. String(const wchar_t *str, size_t n);
  17. String(const char *str);
  18. String(string str);
  19. String(wstring str);
  20. virtual ~String();
  21. size_t size() { return contents.size(); }
  22. size_t length() { return contents.size(); }
  23. string getSTLString();
  24. wstring getSTLWString();
  25. String substr(size_t pos = 0, size_t n = wstring::npos) const { return String(contents.substr(pos,n)); }
  26. size_t rfind ( const String &str, size_t pos = wstring::npos ) const { return contents.rfind(str.contents, pos); }
  27. size_t find ( const String &str, size_t pos = 0 ) const { return contents.find(str.contents, pos); }
  28. size_t find_last_of(const String& str, size_t pos = wstring::npos ) { return contents.find_last_of(str.contents, pos); }
  29. inline String operator + (const char *str) const { return String(contents + String(str).contents); }
  30. inline String operator + (const String &str) const { return String(contents + str.contents); }
  31. String operator += (const String &str) { contents = contents + str.contents; return *this; }
  32. String operator = (const String &str) { contents = str.contents; return *this;}
  33. inline bool operator == (const String &str) const { return (str.contents == contents); }
  34. inline bool operator != (const String &str) const { return (str.contents != contents); }
  35. String toLowerCase();
  36. inline wchar_t operator [] ( const size_t i ) const { return contents[i]; }
  37. vector<String> split(const String &delims);
  38. String replace(const String &what, const String &withWhat);
  39. static String NumberToString(Number value);
  40. const char *c_str();
  41. const wchar_t *wc_str();
  42. const wchar_t *data(){ return contents.data(); }
  43. const char *getDataWithEncoding(int encoding);
  44. void setDataWithEncoding(char *data, int encoding);
  45. size_t getDataSizeWithEncoding(int encoding);
  46. wstring contents;
  47. string s_contents;
  48. static const int ENCODING_UTF8 = 0;
  49. private:
  50. };
  51. static inline String operator+ (const char *str, const String &rstr) { return String(String(str).contents + rstr.contents); }
  52. static inline String operator+ (const wchar_t *str, const String &rstr) { return String(String(str).contents + rstr.contents); }
  53. static inline String operator+ (const wchar_t str, const String &rstr) { wstring tmp=L" "; tmp[0] = str; return String(tmp + rstr.contents); }
  54. }