Files
godot/thirdparty/jolt_physics/Jolt/Core/StringTools.cpp
noahbackus 9d30169a8d
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
initial commit, 4.5 stable
2025-09-16 20:46:46 -04:00

102 lines
2.1 KiB
C++

// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
// SPDX-License-Identifier: MIT
#include <Jolt/Jolt.h>
#include <Jolt/Core/StringTools.h>
JPH_SUPPRESS_WARNINGS_STD_BEGIN
#include <cstdarg>
JPH_SUPPRESS_WARNINGS_STD_END
JPH_NAMESPACE_BEGIN
String StringFormat(const char *inFMT, ...)
{
char buffer[1024];
// Format the string
va_list list;
va_start(list, inFMT);
vsnprintf(buffer, sizeof(buffer), inFMT, list);
va_end(list);
return String(buffer);
}
void StringReplace(String &ioString, const string_view &inSearch, const string_view &inReplace)
{
size_t index = 0;
for (;;)
{
index = ioString.find(inSearch, index);
if (index == String::npos)
break;
ioString.replace(index, inSearch.size(), inReplace);
index += inReplace.size();
}
}
void StringToVector(const string_view &inString, Array<String> &outVector, const string_view &inDelimiter, bool inClearVector)
{
JPH_ASSERT(inDelimiter.size() > 0);
// Ensure vector empty
if (inClearVector)
outVector.clear();
// No string? no elements
if (inString.empty())
return;
// Start with initial string
String s(inString);
// Add to vector while we have a delimiter
size_t i;
while (!s.empty() && (i = s.find(inDelimiter)) != String::npos)
{
outVector.push_back(s.substr(0, i));
s.erase(0, i + inDelimiter.length());
}
// Add final element
outVector.push_back(s);
}
void VectorToString(const Array<String> &inVector, String &outString, const string_view &inDelimiter)
{
// Ensure string empty
outString.clear();
for (const String &s : inVector)
{
// Add delimiter if not first element
if (!outString.empty())
outString.append(inDelimiter);
// Add element
outString.append(s);
}
}
String ToLower(const string_view &inString)
{
String out;
out.reserve(inString.length());
for (char c : inString)
out.push_back((char)tolower(c));
return out;
}
const char *NibbleToBinary(uint32 inNibble)
{
static const char *nibbles[] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" };
return nibbles[inNibble & 0xf];
}
JPH_NAMESPACE_END