ezEngine  Milestone 7
DynamicArray.h
1 #pragma once
2 
3 #include <Foundation/Containers/ArrayBase.h>
4 #include <Foundation/Memory/AllocatorWrapper.h>
5 
11 template <typename T>
12 class ezDynamicArrayBase : public ezArrayBase<T, ezDynamicArrayBase<T> >
13 {
14 protected:
16  ezDynamicArrayBase(ezAllocatorBase* pAllocator); // [tested]
17 
19  ezDynamicArrayBase(const ezDynamicArrayBase<T>& other, ezAllocatorBase* pAllocator); // [tested]
20 
22  ezDynamicArrayBase(ezDynamicArrayBase<T>&& other, ezAllocatorBase* pAllocator); // [tested]
23 
25  ezDynamicArrayBase(const ezArrayPtr<const T>& other, ezAllocatorBase* pAllocator); // [tested]
26 
28  ~ezDynamicArrayBase(); // [tested]
29 
31  void operator= (const ezDynamicArrayBase<T>& rhs); // [tested]
32 
34  void operator= (ezDynamicArrayBase<T>&& rhs); // [tested]
35 
36 public:
37 
39  void Reserve(ezUInt32 uiCapacity); // [tested]
40 
42  void Compact(); // [tested]
43 
45  ezAllocatorBase* GetAllocator() const { return m_pAllocator; }
46 
48  ezUInt64 GetHeapMemoryUsage() const; // [tested]
49 
50 private:
51  ezAllocatorBase* m_pAllocator;
52 
53  enum { CAPACITY_ALIGNMENT = 16 };
54 
55  void SetCapacity(ezUInt32 uiCapacity);
56 };
57 
58 
60 template <typename T, typename AllocatorWrapper = ezDefaultAllocatorWrapper>
62 {
63 public:
64  EZ_DECLARE_MEM_RELOCATABLE_TYPE();
65 
67  ezDynamicArray(ezAllocatorBase* pAllocator);
68 
71  explicit ezDynamicArray(const ezArrayPtr<const T>& other);
72 
75 
76  void operator=(const ezDynamicArray<T, AllocatorWrapper>& rhs);
77  void operator=(const ezDynamicArrayBase<T>& rhs);
78  void operator=(const ezArrayPtr<const T>& rhs);
79 
80  void operator=(ezDynamicArray<T, AllocatorWrapper>&& rhs);
81  void operator=(ezDynamicArrayBase<T>&& rhs);
82 };
83 
84 EZ_CHECK_AT_COMPILETIME_MSG(ezGetTypeClass<ezDynamicArray<int>>::value == 2, "dynamic array is not memory relocatable");
85 
86 #include <Foundation/Containers/Implementation/DynamicArray_inl.h>
87