summaryrefslogtreecommitdiffstats
path: root/source/core/slang-string-util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/slang-string-util.cpp')
-rw-r--r--source/core/slang-string-util.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/source/core/slang-string-util.cpp b/source/core/slang-string-util.cpp
index cb5709759..5d3e2188d 100644
--- a/source/core/slang-string-util.cpp
+++ b/source/core/slang-string-util.cpp
@@ -59,7 +59,7 @@ static const Guid IID_ISlangBlob = SLANG_UUID_ISlangBlob;
/* static */void StringUtil::append(const char* format, va_list args, StringBuilder& buf)
{
- // Calculate the size
+ // Calculate the size required (not including terminating 0)
size_t numChars;
{
// Create a copy of args, as will be consumed by calcFormattedSize
@@ -69,6 +69,7 @@ static const Guid IID_ISlangBlob = SLANG_UUID_ISlangBlob;
va_end(argsCopy);
}
+ // Requires + 1 , because calcFormatted appends a terminating 0
char* dst = buf.prepareForAppend(numChars + 1);
calcFormatted(format, args, numChars, dst);
buf.appendInPlace(dst, numChars);
@@ -118,4 +119,34 @@ ComPtr<ISlangBlob> StringUtil::createStringBlob(const String& string)
return ComPtr<ISlangBlob>(new StringBlob(string));
}
+/* static */String StringUtil::calcCharReplaced(const UnownedStringSlice& slice, char fromChar, char toChar)
+{
+ if (fromChar == toChar)
+ {
+ return slice;
+ }
+
+ const UInt numChars = slice.size();
+ const char* srcChars = slice.begin();
+
+ StringBuilder builder;
+ char* dstChars = builder.prepareForAppend(numChars);
+
+ for (UInt i = 0; i < numChars; ++i)
+ {
+ char c = srcChars[i];
+ dstChars[i] = (c == fromChar) ? toChar : c;
+ }
+
+ builder.appendInPlace(dstChars, numChars);
+ return builder;
+}
+
+/* static */String StringUtil::calcCharReplaced(const String& string, char fromChar, char toChar)
+{
+ return (fromChar == toChar || string.IndexOf(fromChar) == UInt(-1)) ? string : calcCharReplaced(string.getUnownedSlice(), fromChar, toChar);
+}
+
+
+
} // namespace Slang