diff options
Diffstat (limited to 'source/core/slang-string-util.cpp')
| -rw-r--r-- | source/core/slang-string-util.cpp | 33 |
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 |
