ezEngine  Milestone 7
StaticRingBuffer.h
1 #pragma once
2 
3 #include <Foundation/Containers/StaticArray.h>
4 
8 template <typename T, ezUInt32 Capacity>
10 {
11 public:
12  EZ_CHECK_AT_COMPILETIME_MSG(Capacity > 1, "ORLY?");
13 
15  ezStaticRingBuffer(); // [tested]
16 
19 
21  ~ezStaticRingBuffer(); // [tested]
22 
24  void operator=(const ezStaticRingBuffer<T, Capacity>& rhs); // [tested]
25 
27  bool operator==(const ezStaticRingBuffer<T, Capacity>& rhs) const; // [tested]
28 
30  bool operator!=(const ezStaticRingBuffer<T, Capacity>& rhs) const; // [tested]
31 
33  void PushBack(const T& element); // [tested]
34 
36  void PopFront(ezUInt32 uiElements = 1); // [tested]
37 
39  const T& PeekFront() const; // [tested]
40 
42  T& PeekFront(); // [tested]
43 
45  const T& operator[](ezUInt32 uiIndex) const; // [tested]
46 
48  T& operator[](ezUInt32 uiIndex); // [tested]
49 
51  ezUInt32 GetCount() const; // [tested]
52 
54  bool IsEmpty() const; // [tested]
55 
57  bool CanAppend(ezUInt32 uiElements = 1); // [tested]
58 
60  void Clear(); // [tested]
61 
62 private:
63  T* GetStaticArray();
64 
66  struct : ezAligned<EZ_ALIGNMENT_OF(T)>
67  {
68  ezUInt8 m_Data[Capacity * sizeof(T)];
69  };
70 
71  T* m_pElements;
72  ezUInt32 m_uiCount;
73  ezUInt32 m_uiFirstElement;
74 };
75 
76 #include <Foundation/Containers/Implementation/StaticRingBuffer_inl.h>
77 
78