aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd/include
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-03-23 11:19:30 +0100
committerFelix Morgner <felix.morgner@ost.ch>2026-03-23 11:19:30 +0100
commitbb7a6bd989b748a29c1a1e68807da2dd3176186a (patch)
tree26cc7927fc672c6bfd8d8e5011667964679ce1e4 /libs/kstd/include
parent730a1b83fe02e6249c20cbdd24b0c097c7c57b49 (diff)
downloadteachos-bb7a6bd989b748a29c1a1e68807da2dd3176186a.tar.xz
teachos-bb7a6bd989b748a29c1a1e68807da2dd3176186a.zip
kstd: fix push/emplace_back bug in vector
Diffstat (limited to 'libs/kstd/include')
-rw-r--r--libs/kstd/include/kstd/vector6
1 files changed, 6 insertions, 0 deletions
diff --git a/libs/kstd/include/kstd/vector b/libs/kstd/include/kstd/vector
index b2cce0b..1242489 100644
--- a/libs/kstd/include/kstd/vector
+++ b/libs/kstd/include/kstd/vector
@@ -594,12 +594,14 @@ namespace kstd
{
auto new_capacity = m_capacity == 0 ? 1 : m_capacity * 2;
auto new_data = allocate_n(new_capacity);
+ auto old_size = size();
std::allocator_traits<allocator_type>::construct(m_allocator, new_data + m_size, value);
uninitialized_move_with_allocator(begin(), new_data, size());
destroy_n(begin(), size());
deallocate();
m_data = new_data;
m_capacity = new_capacity;
+ m_size = old_size;
}
else
{
@@ -615,12 +617,14 @@ namespace kstd
{
auto new_capacity = m_capacity == 0 ? 1 : m_capacity * 2;
auto new_data = allocate_n(new_capacity);
+ auto old_size = size();
std::allocator_traits<allocator_type>::construct(m_allocator, new_data + m_size, std::move(value));
uninitialized_move_with_allocator(begin(), new_data, size());
destroy_n(begin(), size());
deallocate();
m_data = new_data;
m_capacity = new_capacity;
+ m_size = old_size;
}
else
{
@@ -637,12 +641,14 @@ namespace kstd
{
auto new_capacity = m_capacity == 0 ? 1 : m_capacity * 2;
auto new_data = allocate_n(new_capacity);
+ auto old_size = size();
std::allocator_traits<allocator_type>::construct(m_allocator, new_data + m_size, std::forward<Args>(args)...);
uninitialized_move_with_allocator(begin(), new_data, size());
destroy_n(begin(), size());
deallocate();
m_data = new_data;
m_capacity = new_capacity;
+ m_size = old_size;
}
else
{