PolyString.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. inline String operator + (const char *str) const { return String(contents + String(str).contents); }
  29. inline String operator + (const String &str) const { return String(contents + str.contents); }
  30. String operator += (const String &str) { contents = contents + str.contents; return *this; }
  31. String operator = (const String &str) { contents = str.contents; return *this;}
  32. inline bool operator == (const String &str) const { return (str.contents == contents); }
  33. inline bool operator != (const String &str) const { return (str.contents != contents); }
  34. String toLowerCase();
  35. inline wchar_t operator [] ( const size_t i ) const { return contents[i]; }
  36. vector<String> split(const String &delims);
  37. String replace(const String &what, const String &withWhat);
  38. static String floatToString(float value);
  39. const char *c_str();
  40. const wchar_t *wc_str();
  41. const wchar_t *data(){ return contents.data(); }
  42. const char *getDataWithEncoding(int encoding);
  43. void setDataWithEncoding(char *data, int encoding);
  44. size_t getDataSizeWithEncoding(int encoding);
  45. wstring contents;
  46. string s_contents;
  47. static const int ENCODING_UTF8 = 0;
  48. private:
  49. };
  50. static inline String operator+ (const char *str, const String &rstr) { return String(String(str).contents + rstr.contents); }
  51. static inline String operator+ (const wchar_t *str, const String &rstr) { return String(String(str).contents + rstr.contents); }
  52. static inline String operator+ (const wchar_t str, const String &rstr) { wstring tmp=L" "; tmp[0] = str; return String(tmp + rstr.contents); }
  53. }