46 template<COperationMode auto OperationMode>
50 template<CWriteDirection auto WriteDirection, COperationMode auto OperationMode>
56 template<uint32_t MaxWindow,
79 template<uint32_t MaxWindow,
105 [[nodiscard]]
inline uint32_t
GetTotalSize()
const {
return Base::mRing + MaxWindow; }
106 [[nodiscard]]
inline uint32_t
GetRingSize()
const {
return Base::mRing; }
108 inline void Reset() { UpdateWriteIndex(0); }
113 UpdateWriteIndex(newWriteIndex);
119 const Index currentIndex = mIndex;
121 UpdateWriteIndex(newWriteIndex);
128 UpdateWriteIndex(newWriteIndex);
134 const Index currentIndex = mIndex;
136 UpdateWriteIndex(newWriteIndex);
141 [[nodiscard]]
inline uint32_t
GetOffset(uint32_t offset)
const
148 inline void UpdateWriteIndex(uint32_t newIndex)
160 template<uint32_t MaxWindow,
161 RingImpl::CWriteDirection
auto WriteDirection,
162 RingImpl::COperationMode
auto OperationMode>
requires(MaxWindow <= 1)
182 [[nodiscard]]
inline uint32_t
GetTotalSize()
const {
return Base::mRing; }
183 [[nodiscard]]
inline uint32_t
GetRingSize()
const {
return Base::mRing; }
185 inline void Reset() { mIndex = { 0 }; }
189 mIndex = Base::IncrementIndex(mIndex);
195 const Index currentIndex = mIndex;
196 mIndex = Base::IncrementIndex(mIndex);
202 mIndex = Base::DecrementIndex(mIndex);
208 const Index currentIndex = mIndex;
209 mIndex = Base::DecrementIndex(mIndex);
213 [[nodiscard]]
inline uint32_t
GetOffset(int32_t offset)
const
215 return Base::GetOffset(mIndex, offset);
240 inline uint32_t
Wrap(uint32_t index)
const {
return (index & mSizeMask); }
255 inline uint32_t
Wrap(uint32_t index)
const {
return (index % mRing); }
261 template<CWriteDirection auto WriteDirection, COperationMode auto OperationMode>
275 return WrapBase::Wrap(index + 1u);
280 return WrapBase::Wrap((int32_t(index) - 1));
284 inline uint32_t
GetOffset(uint32_t index, uint32_t offset)
const
288 return WrapBase::Wrap(index + WrapBase::mRing - offset);
292 return WrapBase::Wrap(index + WrapBase::mRing + offset);
309 const uint32_t mirrorOff = (int32_t(index - maxWindow) >> 31) & WrapBase::mRing;
310 return (index + mirrorOff);
uint32_t GetOffset(int32_t offset) const
Definition AbstractIndex.h:213
uint32_t GetRingSize() const
Definition AbstractIndex.h:183
AbstractRingIndex(uint32_t minSize)
Definition AbstractIndex.h:172
void Reset()
Definition AbstractIndex.h:185
Index GetCurrent() const
Definition AbstractIndex.h:184
uint32_t GetTotalSize() const
Get total size of the ring buffer.
Definition AbstractIndex.h:182
AbstractRingIndex(const AbstractRingIndex &)=default
uint32_t Index
Definition AbstractIndex.h:169
AbstractRingIndex & operator=(const AbstractRingIndex &)=default
Forward declaration.
Definition AbstractIndex.h:83
Index operator++()
Definition AbstractIndex.h:110
uint32_t GetRingSize() const
Definition AbstractIndex.h:106
AbstractRingIndex(uint32_t minSize)
Definition AbstractIndex.h:95
void Reset()
Definition AbstractIndex.h:108
uint32_t GetOffset(uint32_t offset) const
Get the index of the sample at an offset from the WriteIndex.
Definition AbstractIndex.h:141
Index GetCurrent() const
Definition AbstractIndex.h:107
Index operator--()
Definition AbstractIndex.h:125
uint32_t GetTotalSize() const
Get total size of the ring buffer including MaxWindow mirror length.
Definition AbstractIndex.h:105
AbstractRingIndex(const AbstractRingIndex &)=default
AbstractRingIndex & operator=(const AbstractRingIndex &)=default
Base class for Ring-like indexing operations.
Definition AbstractIndex.h:263
AbstarctRingBase & operator=(const AbstarctRingBase &)=default
uint32_t GetOffset(uint32_t index, uint32_t offset) const
Get the index of the sample at an offset from the WriteIndex.
Definition AbstractIndex.h:284
uint32_t GetMirrorIndex(uint32_t index, uint32_t maxWindow) const
Definition AbstractIndex.h:298
uint32_t IncrementIndex(uint32_t index) const
Definition AbstractIndex.h:273
AbstarctRingBase(const AbstarctRingBase &)=default
AbstarctRingBase(uint32_t minSize)
Definition AbstractIndex.h:268
uint32_t DecrementIndex(uint32_t index) const
Definition AbstractIndex.h:278
uint32_t Wrap(uint32_t index) const
Definition AbstractIndex.h:255
AbstractRingWrap(const AbstractRingWrap &)=default
AbstractRingWrap(uint32_t minSize)
Definition AbstractIndex.h:250
uint32_t mRing
Definition AbstractIndex.h:258
AbstractRingWrap & operator=(const AbstractRingWrap &)=default
AbstractRingWrap & operator=(const AbstractRingWrap &)=default
uint32_t mRing
Definition AbstractIndex.h:243
uint32_t Wrap(uint32_t index) const
Definition AbstractIndex.h:240
AbstractRingWrap(uint32_t minSize)
Definition AbstractIndex.h:235
AbstractRingWrap(const AbstractRingWrap &)=default
uint32_t mSizeMask
Definition AbstractIndex.h:244
Base class that implements the wrap around logic for the OperationMode.
Definition AbstractIndex.h:47
Definition AbstractIndex.h:42
Definition AbstractIndex.h:43
EWriteDirection
Definition AbstractIndex.h:37
EOperationMode
Definition AbstractIndex.h:31
Definition AcousticMaterial.h:36
Definition ChannelMap.h:272
Definition AbstractIndex.h:89
uint32_t MirrorIndex
Definition AbstractIndex.h:91
uint32_t WriteIndex
Definition AbstractIndex.h:90