aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2024-03-15 11:39:24 +0100
committerMarco Bubke <marco.bubke@qt.io>2024-03-20 13:06:46 +0000
commitcea24ad00b86f15fbe549c1177e1852c4bed30d7 (patch)
tree3024ba6acb4fd58b6e4d5b20b4644fee1697623b
parentb163510696ba36593d09cb81768a007143980956 (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.h30
-rw-r--r--tests/unit/tests/unittests/utils/smallstring-test.cpp9
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");