2
0

StringTools.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  2. // SPDX-License-Identifier: MIT
  3. #include <Jolt/Jolt.h>
  4. #include <Jolt/Core/StringTools.h>
  5. JPH_SUPPRESS_WARNINGS_STD_BEGIN
  6. #include <cstdarg>
  7. JPH_SUPPRESS_WARNINGS_STD_END
  8. JPH_NAMESPACE_BEGIN
  9. String StringFormat(const char *inFMT, ...)
  10. {
  11. char buffer[1024];
  12. // Format the string
  13. va_list list;
  14. va_start(list, inFMT);
  15. vsnprintf(buffer, sizeof(buffer), inFMT, list);
  16. va_end(list);
  17. return String(buffer);
  18. }
  19. void StringReplace(String &ioString, const string_view &inSearch, const string_view &inReplace)
  20. {
  21. size_t index = 0;
  22. for (;;)
  23. {
  24. index = ioString.find(inSearch, index);
  25. if (index == String::npos)
  26. break;
  27. ioString.replace(index, inSearch.size(), inReplace);
  28. index += inReplace.size();
  29. }
  30. }
  31. void StringToVector(const string_view &inString, Array<String> &outVector, const string_view &inDelimiter, bool inClearVector)
  32. {
  33. JPH_ASSERT(inDelimiter.size() > 0);
  34. // Ensure vector empty
  35. if (inClearVector)
  36. outVector.clear();
  37. // No string? no elements
  38. if (inString.empty())
  39. return;
  40. // Start with initial string
  41. String s(inString);
  42. // Add to vector while we have a delimiter
  43. size_t i;
  44. while (!s.empty() && (i = s.find(inDelimiter)) != String::npos)
  45. {
  46. outVector.push_back(s.substr(0, i));
  47. s.erase(0, i + inDelimiter.length());
  48. }
  49. // Add final element
  50. outVector.push_back(s);
  51. }
  52. void VectorToString(const Array<String> &inVector, String &outString, const string_view &inDelimiter)
  53. {
  54. // Ensure string empty
  55. outString.clear();
  56. for (const String &s : inVector)
  57. {
  58. // Add delimiter if not first element
  59. if (!outString.empty())
  60. outString.append(inDelimiter);
  61. // Add element
  62. outString.append(s);
  63. }
  64. }
  65. String ToLower(const string_view &inString)
  66. {
  67. String out;
  68. out.reserve(inString.length());
  69. for (char c : inString)
  70. out.push_back((char)tolower(c));
  71. return out;
  72. }
  73. const char *NibbleToBinary(uint32 inNibble)
  74. {
  75. static const char *nibbles[] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" };
  76. return nibbles[inNibble & 0xf];
  77. }
  78. JPH_NAMESPACE_END