3#include "../Foundation/Span.h"
4#include "../Memory/VirtualMemory.h"
5#include "ContainersExport.h"
34 while (sizeElements > 0)
37 items[sizeElements].~T();
49 [[nodiscard]]
bool decommit() {
return virtualMemory.
decommit(sizeElements *
sizeof(T)); }
54 if (not virtualMemory.
commit(newSize *
sizeof(T)))
56 sizeElements = newSize;
61 [[nodiscard]]
bool resize(
size_t newSize)
64 const size_t oldSize = sizeElements;
65 if (newSize < oldSize)
71 }
while (idx != newSize);
75 if (newSize > oldSize)
80 placementNew(items[idx++]);
81 }
while (idx != newSize);
87 [[nodiscard]]
bool reserve(
size_t maxNumElements)
89 if (maxNumElements <= capacityElements)
93 if (virtualMemory.
reserve(
sizeof(T) * maxNumElements))
95 capacityElements = maxNumElements;
101 [[nodiscard]]
size_t capacity()
const {
return capacityElements; }
102 [[nodiscard]]
size_t size()
const {
return sizeElements; }
104 [[nodiscard]] T* data() {
return static_cast<T*
>(virtualMemory.
data()); }
105 [[nodiscard]]
const T* data()
const {
return static_cast<const T*
>(virtualMemory.
data); }
107 [[nodiscard]]
operator Span<T>() {
return {data(), sizeElements}; }
108 [[nodiscard]]
operator Span<const T>()
const {
return {data(), sizeElements}; }
110 [[nodiscard]] Span<T> toSpan() {
return {data(), sizeElements}; }
111 [[nodiscard]] Span<const T> toSpan()
const {
return {data(), sizeElements}; }
114 VirtualMemory virtualMemory;
116 size_t sizeElements = 0;
117 size_t capacityElements = 0;
#define SC_ASSERT_RELEASE(e)
Assert expression e to be true.
Definition Assert.h:48
An array using a large virtual memory reservation to keep stable addresses.
Definition VirtualArray.h:15
void clear()
Clears the stable array by calling the destructor of each element.
Definition VirtualArray.h:31
bool resize(size_t newSize)
Resizes the stable array, calling constructors or destructors as needed.
Definition VirtualArray.h:61
bool reserve(size_t maxNumElements)
Reserves memory for the stable array without initializing elements.
Definition VirtualArray.h:87
bool decommit()
De-commits unused-memory, while still keeping the original virtual reservation.
Definition VirtualArray.h:49
bool resizeWithoutInitializing(size_t newSize)
Resizes the stable array without initializing or calling destructors.
Definition VirtualArray.h:52
void release()
Releases all reserved memory.
Definition VirtualArray.h:22
bool clearAndDecommit()
Clears the array calling destructors of each element and releases virtual memory.
Definition VirtualArray.h:42
void * data()
Returns a pointer to the start of the reserved virtual memory.
Definition VirtualMemory.h:62
bool reserve(size_t maxCapacityInBytes)
Reserves a large block of virtual memory of size maxCapacityInBytes.
bool commit(size_t sizeInBytes)
Ensures at least sizeInBytes to be committed / accessible from the large maxCapacityInBytes block.
void release()
Reclaims the entire virtual memory block (reserved with VirtualMemory::reserve)
bool decommit(size_t sizeInBytes)
Reclaims all unused pages past sizeInBytes (previously committed with VirtualMemory::commit)