diff options
Diffstat (limited to 'src/util/allocator.h')
| -rw-r--r-- | src/util/allocator.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/util/allocator.h b/src/util/allocator.h index 63fc94a..5fc5aa6 100644 --- a/src/util/allocator.h +++ b/src/util/allocator.h @@ -312,14 +312,16 @@ struct LIST { if( idx >= size ) return; - if constexpr( !__is_trivially_destructible(T) ) { - data[idx].~T(); - memset( &data[idx], 0, sizeof(T) ); - } - - for( U32 i = idx; i < size - 1; i++ ) + for( U32 i = idx; i + 1 < size; ++i ) data[i] = data[i + 1]; + U32 last = size - 1; + + if constexpr( !__is_trivially_destructible(T) ) + data[last].~T(); + + memset( &data[last], 0, sizeof(T) ); + if( --size < capacity / 4 ) shrink(); } |
