summaryrefslogtreecommitdiffstats
path: root/source/core/slang-string-util.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-09-12 16:27:42 -0400
committerGitHub <noreply@github.com>2018-09-12 16:27:42 -0400
commitf60135cec62c91a9d7923397fe8796d2b3eaa5cb (patch)
tree777646cb3611bf5809dc18e120e506117e143e11 /source/core/slang-string-util.cpp
parent9a9733091cc7c9628e445313785d561deb229072 (diff)
Feature/memory arena (#631)
* First pass at MemoryArena. * First pass at RandomGenerator. * Extract TestContext into external source file. * Fix warning on printf. * Use enum classes for Test enums. OutputMode -> TestOutputMode. * First pass at FreeList unit test. * Auto registering tests. Improvements to RandomGenerator. * Remove the need for unitTest headers - cos can use registering. * Added unitTest for MemoryArena. * Do unit tests. * Fix typo.
Diffstat (limited to 'source/core/slang-string-util.cpp')
-rw-r--r--source/core/slang-string-util.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/source/core/slang-string-util.cpp b/source/core/slang-string-util.cpp
index c60ad9683..29f8dc0ca 100644
--- a/source/core/slang-string-util.cpp
+++ b/source/core/slang-string-util.cpp
@@ -26,4 +26,52 @@ namespace Slang {
}
}
+
+/* static */void StringUtil::append(const char* format, va_list args, StringBuilder& buf)
+{
+ int numChars = 0;
+
+#if SLANG_WINDOWS_FAMILY
+ numChars = _vscprintf(format, args);
+#else
+ {
+ va_list argsCopy;
+ va_copy(argsCopy, args);
+ numChars = vsnprintf(nullptr, 0, format, argsCopy);
+ va_end(argsCopy);
+ }
+#endif
+
+ List<char> chars;
+ chars.SetSize(numChars + 1);
+
+#if SLANG_WINDOWS_FAMILY
+ vsnprintf_s(chars.Buffer(), numChars + 1, _TRUNCATE, format, args);
+#else
+ vsnprintf(chars.Buffer(), numChars + 1, format, args);
+#endif
+
+ buf.Append(chars.Buffer(), numChars);
+}
+
+/* static */void StringUtil::appendFormat(StringBuilder& buf, const char* format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ append(format, args, buf);
+ va_end(args);
+}
+
+/* static */String StringUtil::makeStringWithFormat(const char* format, ...)
+{
+ StringBuilder builder;
+
+ va_list args;
+ va_start(args, format);
+ append(format, args, builder);
+ va_end(args);
+
+ return builder;
+}
+
} // namespace Slang