Plasma Engine  2.0
Loading...
Searching...
No Matches
BlockStorage.h
1#pragma once
2
3#include <Foundation/Containers/Bitfield.h>
4#include <Foundation/Memory/LargeBlockAllocator.h>
5
7{
8 enum Enum
9 {
10 Compact,
11 FreeList
12 };
13};
14
15template <typename T, plUInt32 BlockSizeInByte, plBlockStorageType::Enum StorageType>
17{
18public:
20 {
21 public:
22 const T& operator*() const;
23 const T* operator->() const;
24
25 operator const T*() const;
26
27 void Next();
28 bool IsValid() const;
29
30 void operator++();
31
32 protected:
33 friend class plBlockStorage<T, BlockSizeInByte, StorageType>;
34
35 ConstIterator(const plBlockStorage<T, BlockSizeInByte, StorageType>& storage, plUInt32 uiStartIndex, plUInt32 uiCount);
36
37 T& CurrentElement() const;
38
40 plUInt32 m_uiCurrentIndex;
41 plUInt32 m_uiEndIndex;
42 };
43
44 class Iterator : public ConstIterator
45 {
46 public:
47 T& operator*();
48 T* operator->();
49
50 operator T*();
51
52 private:
53 friend class plBlockStorage<T, BlockSizeInByte, StorageType>;
54
55 Iterator(const plBlockStorage<T, BlockSizeInByte, StorageType>& storage, plUInt32 uiStartIndex, plUInt32 uiCount);
56 };
57
60
61 void Clear();
62
63 T* Create();
64 void Delete(T* pObject);
65 void Delete(T* pObject, T*& out_pMovedObject);
66
67 plUInt32 GetCount() const;
68 Iterator GetIterator(plUInt32 uiStartIndex = 0, plUInt32 uiCount = plInvalidIndex);
69 ConstIterator GetIterator(plUInt32 uiStartIndex = 0, plUInt32 uiCount = plInvalidIndex) const;
70
71private:
72 void Delete(T* pObject, T*& out_pMovedObject, plTraitInt<plBlockStorageType::Compact>);
73 void Delete(T* pObject, T*& out_pMovedObject, plTraitInt<plBlockStorageType::FreeList>);
74
76
78 plUInt32 m_uiCount = 0;
79
80 plUInt32 m_uiFreelistStart = plInvalidIndex;
81
82 plDynamicBitfield m_UsedEntries;
83};
84
85#include <Foundation/Memory/Implementation/BlockStorage_inl.h>
Base class for all memory allocators.
Definition Allocator.h:23
Definition BlockStorage.h:20
Definition BlockStorage.h:45
Definition BlockStorage.h:17
Definition DynamicArray.h:81
A block allocator which can only allocates blocks of memory at once.
Definition LargeBlockAllocator.h:40
Definition BlockStorage.h:7
Type traits.
Definition TypeTraits.h:12