diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /gfx/angle/checkout/src/compiler/translator/ImmutableStringBuilder.cpp | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/angle/checkout/src/compiler/translator/ImmutableStringBuilder.cpp')
-rw-r--r-- | gfx/angle/checkout/src/compiler/translator/ImmutableStringBuilder.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/compiler/translator/ImmutableStringBuilder.cpp b/gfx/angle/checkout/src/compiler/translator/ImmutableStringBuilder.cpp new file mode 100644 index 0000000000..3c7c01041f --- /dev/null +++ b/gfx/angle/checkout/src/compiler/translator/ImmutableStringBuilder.cpp @@ -0,0 +1,63 @@ +// +// Copyright 2018 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// ImmutableStringBuilder.cpp: Stringstream-like utility for building pool allocated strings where +// the maximum length is known in advance. +// + +#include "compiler/translator/ImmutableStringBuilder.h" + +#include <stdio.h> + +namespace sh +{ + +ImmutableStringBuilder &ImmutableStringBuilder::operator<<(const ImmutableString &str) +{ + ASSERT(mData != nullptr); + ASSERT(mPos + str.length() <= mMaxLength); + memcpy(mData + mPos, str.data(), str.length()); + mPos += str.length(); + return *this; +} + +ImmutableStringBuilder &ImmutableStringBuilder::operator<<(const char *str) +{ + ASSERT(mData != nullptr); + size_t len = strlen(str); + ASSERT(mPos + len <= mMaxLength); + memcpy(mData + mPos, str, len); + mPos += len; + return *this; +} + +ImmutableStringBuilder &ImmutableStringBuilder::operator<<(const char &c) +{ + ASSERT(mData != nullptr); + ASSERT(mPos + 1 <= mMaxLength); + mData[mPos++] = c; + return *this; +} + +void ImmutableStringBuilder::appendDecimal(const uint32_t &u) +{ + int numChars = snprintf(mData + mPos, mMaxLength - mPos, "%d", u); + ASSERT(numChars >= 0); + ASSERT(mPos + numChars <= mMaxLength); + mPos += numChars; +} + +ImmutableStringBuilder::operator ImmutableString() +{ + mData[mPos] = '\0'; + ImmutableString str(static_cast<const char *>(mData), mPos); +#if defined(ANGLE_ENABLE_ASSERTS) + // Make sure that nothing is added to the string after it is finalized. + mData = nullptr; +#endif + return str; +} + +} // namespace sh |