Utility.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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[ 4096 ];
  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. }