ezEngine  Milestone 7
ArrayMap.h
1 #pragma once
2 
3 #include <Foundation/Containers/DynamicArray.h>
4 
11 template<typename KEY, typename VALUE>
13 {
15 
16 public:
17  struct Pair
18  {
19  KEY key;
20  VALUE value;
21 
22  EZ_DETECT_TYPE_CLASS(KEY, VALUE);
23 
24  EZ_FORCE_INLINE bool operator<(const Pair& rhs) const
25  {
26  return key < rhs.key;
27  }
28 
29  EZ_FORCE_INLINE bool operator==(const Pair& rhs) const
30  {
31  return key == rhs.key;
32  }
33  };
34 
36  ezArrayMapBase(ezAllocatorBase* pAllocator); // [tested]
37 
39  ezArrayMapBase(const ezArrayMapBase& rhs, ezAllocatorBase* pAllocator); // [tested]
40 
42  void operator=(const ezArrayMapBase& rhs); // [tested]
43 
45  ezUInt32 GetCount() const; // [tested]
46 
48  bool IsEmpty() const; // [tested]
49 
51  void Clear(); // [tested]
52 
54  ezUInt32 Insert(const KEY& key, const VALUE& value); // [tested]
55 
57  void Sort() const; // [tested]
58 
61  ezUInt32 Find(const KEY& key) const; // [tested]
62 
65  ezUInt32 LowerBound(const KEY& key) const; // [tested]
66 
69  ezUInt32 UpperBound(const KEY& key) const; // [tested]
70 
72  const KEY& GetKey(ezUInt32 index) const; // [tested]
73 
75  const VALUE& GetValue(ezUInt32 index) const; // [tested]
76 
78  VALUE& GetValue(ezUInt32 index); // [tested]
79 
81  VALUE& FindOrAdd(const KEY& key, bool* bExisted = nullptr); // [tested]
82 
84  VALUE& operator[](const KEY& key); // [tested]
85 
87  const Pair& operator[](ezUInt32 index) const; // [tested]
88 
94  void RemoveAt(ezUInt32 index, bool bKeepSorted = false);
95 
101  bool Remove(const KEY& key, bool bKeepSorted = false); // [tested]
102 
104  bool Contains(const KEY& key) const; // [tested]
105 
107  void Reserve(ezUInt32 size); // [tested]
108 
110  void Compact(); // [tested]
111 
113  bool operator==(const ezArrayMapBase<KEY, VALUE>& rhs) const; // [tested]
114 
116  bool operator!=(const ezArrayMapBase<KEY, VALUE>& rhs) const; // [tested]
117 
119  ezUInt64 GetHeapMemoryUsage() const { return m_Data.GetHeapMemoryUsage(); } // [tested]
120 
121 private:
122 
123  mutable bool m_bSorted;
124  mutable ezDynamicArray<Pair> m_Data;
125 };
126 
128 template<typename KEY, typename VALUE, typename AllocatorWrapper = ezDefaultAllocatorWrapper>
129 class ezArrayMap : public ezArrayMapBase<KEY, VALUE>
130 {
131  EZ_DECLARE_MEM_RELOCATABLE_TYPE();
132 
133 public:
134 
135  ezArrayMap();
136  ezArrayMap(ezAllocatorBase* pAllocator);
137 
140 
141  void operator=(const ezArrayMap<KEY, VALUE, AllocatorWrapper>& rhs);
142  void operator=(const ezArrayMapBase<KEY, VALUE>& rhs);
143 };
144 
145 #include <Foundation/Containers/Implementation/ArrayMap_inl.h>
146