diff options
author | Marco Bubke <marco.bubke@qt.io> | 2024-03-15 11:39:24 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2024-03-20 13:06:46 +0000 |
commit | cea24ad00b86f15fbe549c1177e1852c4bed30d7 (patch) | |
tree | 3024ba6acb4fd58b6e4d5b20b4644fee1697623b | |
parent | b163510696ba36593d09cb81768a007143980956 (diff) |
Utils: Add char append to SmallString
Change-Id: I644db7635010da8bc29d87926a64c4e6939d7c83
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | src/libs/utils/smallstring.h | 30 | ||||
-rw-r--r-- | tests/unit/tests/unittests/utils/smallstring-test.cpp | 9 |
2 files changed, 36 insertions, 3 deletions
diff --git a/src/libs/utils/smallstring.h b/src/libs/utils/smallstring.h index a91b1665392..530022f475c 100644 --- a/src/libs/utils/smallstring.h +++ b/src/libs/utils/smallstring.h @@ -425,13 +425,28 @@ public: size_type oldSize = size(); size_type newSize = oldSize + string.size(); - reserve(optimalCapacity(newSize)); + if (fitsNotInCapacity(newSize)) + reserve(optimalCapacity(newSize)); + std::char_traits<char>::copy(std::next(data(), static_cast<std::ptrdiff_t>(oldSize)), string.data(), string.size()); setSize(newSize); } + void append(char character) noexcept + { + size_type oldSize = size(); + size_type newSize = oldSize + 1; + + if (fitsNotInCapacity(newSize)) + reserve(optimalCapacity(newSize)); + + auto current = std::next(data(), static_cast<std::ptrdiff_t>(oldSize)); + *current = character; + setSize(newSize); + } + template<typename Type, typename = std::enable_if_t<std::is_arithmetic_v<Type>>> void append(Type number) { @@ -498,6 +513,13 @@ public: return *this; } + BasicSmallString &operator+=(char character) noexcept + { + append(character); + + return *this; + } + BasicSmallString &operator+=(QStringView string) noexcept { append(string); @@ -698,8 +720,10 @@ unittest_public: bool fitsNotInCapacity(size_type capacity) const noexcept { - return (isShortString() && capacity > shortStringCapacity()) - || (!isShortString() && capacity > m_data.reference.capacity); + if (isShortString()) + return capacity > shortStringCapacity(); + + return capacity > m_data.reference.capacity; } static size_type optimalHeapCapacity(const size_type size) noexcept diff --git a/tests/unit/tests/unittests/utils/smallstring-test.cpp b/tests/unit/tests/unittests/utils/smallstring-test.cpp index ac979ef65c3..3594c838c96 100644 --- a/tests/unit/tests/unittests/utils/smallstring-test.cpp +++ b/tests/unit/tests/unittests/utils/smallstring-test.cpp @@ -959,6 +959,15 @@ TEST(SmallString, append_float) ASSERT_THAT(text, Eq("some text123.456")); } +TEST(SmallString, append_character) +{ + SmallString text("some text"); + + text += 'x'; + + ASSERT_THAT(text, Eq("some textx")); +} + TEST(SmallString, to_byte_array) { SmallString text("some text"); |