mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:27:46 +00:00
StringBuilder: Use a ByteBuffer internally instead of a Vector<String>.
This commit is contained in:
parent
074edffc44
commit
9d7da26b4e
6 changed files with 58 additions and 37 deletions
14
AK/Buffer.h
14
AK/Buffer.h
|
@ -47,6 +47,8 @@ public:
|
|||
m_size = size;
|
||||
}
|
||||
|
||||
void grow(size_t size);
|
||||
|
||||
private:
|
||||
enum ConstructionMode { Uninitialized, Copy, Wrap, Adopt };
|
||||
explicit Buffer(size_t); // For ConstructionMode=Uninitialized
|
||||
|
@ -87,7 +89,19 @@ inline Buffer<T>::Buffer(T* elements, size_t size, ConstructionMode mode)
|
|||
} else if (mode == Wrap) {
|
||||
m_owned = false;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void Buffer<T>::grow(size_t size)
|
||||
{
|
||||
ASSERT(size > m_size);
|
||||
ASSERT(m_owned);
|
||||
T* new_elements = static_cast<T*>(kmalloc(size * sizeof(T)));
|
||||
memcpy(new_elements, m_elements, m_size * sizeof(T));
|
||||
T* old_elements = m_elements;
|
||||
m_elements = new_elements;
|
||||
m_size = size;
|
||||
kfree(old_elements);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue