AK: Remove StringBuilder's UseInlineCapacityOnly feature

This feature is unused in Ladybird and will complicate an upcoming patch
to hand-off StringBuilder's memory to String.
This commit is contained in:
Timothy Flynn 2024-07-19 09:41:05 -04:00 committed by Andreas Kling
commit af220af8bf
Notes: github-actions[bot] 2024-07-20 07:31:48 +00:00
2 changed files with 12 additions and 35 deletions

View file

@ -18,32 +18,6 @@
namespace AK { namespace AK {
inline ErrorOr<void> StringBuilder::will_append(size_t size)
{
if (m_use_inline_capacity_only == UseInlineCapacityOnly::Yes) {
VERIFY(m_buffer.capacity() == StringBuilder::inline_capacity);
Checked<size_t> current_pointer = m_buffer.size();
current_pointer += size;
VERIFY(!current_pointer.has_overflow());
if (current_pointer <= StringBuilder::inline_capacity) {
return {};
}
return Error::from_errno(ENOMEM);
}
Checked<size_t> needed_capacity = m_buffer.size();
needed_capacity += size;
VERIFY(!needed_capacity.has_overflow());
// Prefer to completely use the existing capacity first
if (needed_capacity <= m_buffer.capacity())
return {};
Checked<size_t> expanded_capacity = needed_capacity;
expanded_capacity *= 2;
VERIFY(!expanded_capacity.has_overflow());
TRY(m_buffer.try_ensure_capacity(expanded_capacity.value()));
return {};
}
ErrorOr<StringBuilder> StringBuilder::create(size_t initial_capacity) ErrorOr<StringBuilder> StringBuilder::create(size_t initial_capacity)
{ {
StringBuilder builder; StringBuilder builder;
@ -56,9 +30,19 @@ StringBuilder::StringBuilder(size_t initial_capacity)
m_buffer.ensure_capacity(initial_capacity); m_buffer.ensure_capacity(initial_capacity);
} }
StringBuilder::StringBuilder(UseInlineCapacityOnly use_inline_capacity_only) inline ErrorOr<void> StringBuilder::will_append(size_t size)
: m_use_inline_capacity_only(use_inline_capacity_only)
{ {
Checked<size_t> needed_capacity = m_buffer.size();
needed_capacity += size;
VERIFY(!needed_capacity.has_overflow());
// Prefer to completely use the existing capacity first
if (needed_capacity <= m_buffer.capacity())
return {};
Checked<size_t> expanded_capacity = needed_capacity;
expanded_capacity *= 2;
VERIFY(!expanded_capacity.has_overflow());
TRY(m_buffer.try_ensure_capacity(expanded_capacity.value()));
return {};
} }
size_t StringBuilder::length() const size_t StringBuilder::length() const

View file

@ -23,12 +23,6 @@ public:
static ErrorOr<StringBuilder> create(size_t initial_capacity = inline_capacity); static ErrorOr<StringBuilder> create(size_t initial_capacity = inline_capacity);
explicit StringBuilder(size_t initial_capacity = inline_capacity); explicit StringBuilder(size_t initial_capacity = inline_capacity);
enum class UseInlineCapacityOnly {
Yes,
No,
};
explicit StringBuilder(UseInlineCapacityOnly use_inline_capacity_only);
~StringBuilder() = default; ~StringBuilder() = default;
ErrorOr<void> try_append(StringView); ErrorOr<void> try_append(StringView);
@ -106,7 +100,6 @@ private:
u8* data(); u8* data();
u8 const* data() const; u8 const* data() const;
UseInlineCapacityOnly m_use_inline_capacity_only { UseInlineCapacityOnly::No };
Detail::ByteBuffer<inline_capacity> m_buffer; Detail::ByteBuffer<inline_capacity> m_buffer;
}; };