Utility.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. GWEN
  3. Copyright (c) 2010 Facepunch Studios
  4. See license in Gwen.h
  5. */
  6. #include "Gwen/ToolTip.h"
  7. #include "Gwen/Utility.h"
  8. using namespace Gwen;
  9. #ifdef _MSC_VER
  10. #pragma warning(disable : 4267) // conversion from 'size_t' to 'int', possible loss of data
  11. #endif
  12. UnicodeString Gwen::Utility::Format(const wchar_t* fmt, ...)
  13. {
  14. wchar_t strOut[2048];
  15. va_list s;
  16. va_start(s, fmt);
  17. GwenUtil_VSWPrintFSafeSized(strOut, fmt, s);
  18. va_end(s);
  19. UnicodeString str = strOut;
  20. return str;
  21. }
  22. void Gwen::Utility::Strings::Split(const Gwen::String& str, const Gwen::String& seperator, Strings::List& outbits, bool bLeave)
  23. {
  24. int iOffset = 0;
  25. int iLength = str.length();
  26. int iSepLen = seperator.length();
  27. size_t i = str.find(seperator, 0);
  28. while (i != std::string::npos)
  29. {
  30. outbits.push_back(str.substr(iOffset, i - iOffset));
  31. iOffset = i + iSepLen;
  32. i = str.find(seperator, iOffset);
  33. if (bLeave) iOffset -= iSepLen;
  34. }
  35. outbits.push_back(str.substr(iOffset, iLength - iOffset));
  36. }
  37. void Gwen::Utility::Strings::Split(const Gwen::UnicodeString& str, const Gwen::UnicodeString& seperator, Strings::UnicodeList& outbits, bool bLeave)
  38. {
  39. int iOffset = 0;
  40. int iLength = str.length();
  41. int iSepLen = seperator.length();
  42. size_t i = str.find(seperator, 0);
  43. while (i != std::wstring::npos)
  44. {
  45. outbits.push_back(str.substr(iOffset, i - iOffset));
  46. iOffset = i + iSepLen;
  47. i = str.find(seperator, iOffset);
  48. if (bLeave) iOffset -= iSepLen;
  49. }
  50. outbits.push_back(str.substr(iOffset, iLength - iOffset));
  51. }
  52. int Gwen::Utility::Strings::To::Int(const Gwen::String& str)
  53. {
  54. if (str == "") return 0;
  55. return atoi(str.c_str());
  56. }
  57. float Gwen::Utility::Strings::To::Float(const Gwen::String& str)
  58. {
  59. if (str == "") return 0.0f;
  60. return (float)atof(str.c_str());
  61. }
  62. bool Gwen::Utility::Strings::To::Bool(const Gwen::String& str)
  63. {
  64. if (str.size() == 0) return false;
  65. if (str[0] == 'T' || str[0] == 't' || str[0] == 'y' || str[0] == 'Y') return true;
  66. if (str[0] == 'F' || str[0] == 'f' || str[0] == 'n' || str[0] == 'N') return false;
  67. if (str[0] == '0') return false;
  68. return true;
  69. }
  70. bool Gwen::Utility::Strings::To::Floats(const Gwen::String& str, float* f, size_t iCount)
  71. {
  72. Strings::List lst;
  73. Strings::Split(str, " ", lst);
  74. if (lst.size() != iCount) return false;
  75. for (size_t i = 0; i < iCount; i++)
  76. {
  77. f[i] = Strings::To::Float(lst[i]);
  78. }
  79. return true;
  80. }