/home/runner/work/HiCR/HiCR/include/hicr/frontends/channel/circularBuffer.hpp Source File
HiCR
|
circularBuffer.hpp
Go to the documentation of this file.
52 CircularBuffer(size_t capacity, __volatile__ size_t *headAdvanceCounter, __volatile__ size_t *tailAdvanceCounter)
72 [[nodiscard]] __INLINE__ size_t getHeadPosition() const noexcept { return *_headAdvanceCounter % _capacity; }
85 [[nodiscard]] __INLINE__ size_t getTailPosition() const noexcept { return *_tailAdvanceCounter % _capacity; }
109 HICR_THROW_FATAL("New buffer depth (_depth (%lu) + n (%lu) = %lu) exceeded capacity (%lu) on increase. This is probably a bug in HiCR.\n", curDepth, n, newDepth, _capacity);
128 HICR_THROW_FATAL("Circular buffer depth (%lu) smaller than number of elements (%lu) to decrease on advance tail. This is probably a bug in HiCR.\n", curDepth, n);
154 [[nodiscard]] __INLINE__ size_t getDepth() const noexcept { return calculateDepth(*_headAdvanceCounter, *_tailAdvanceCounter); }
188 [[nodiscard]] __INLINE__ bool isEmpty() const noexcept { return *_headAdvanceCounter == *_tailAdvanceCounter; }
199 HICR_THROW_FATAL("Circular buffer new head advance value is smaller than tail's (%lu < %lu). This is probably a bug in HiCR.\n", headAdvanceCounter, *_tailAdvanceCounter);
205 if (newDepth > _capacity) HICR_THROW_FATAL("Circular new buffer depth (%lu) exceeded capacity (%lu) on setHead. This is probably a bug in HiCR.\n", newDepth, _capacity);
220 HICR_THROW_FATAL("Circular buffer new tail advance value exceeds head (%lu > %lu). This is probably a bug in HiCR.\n", tailAdvanceCounter, *_headAdvanceCounter);
226 if (newDepth > _capacity) HICR_THROW_FATAL("Circular buffer new buffer depth (%lu) exceeded capacity (%lu) on setTail. This is probably a bug in HiCR.\n", newDepth, _capacity);
235 [[nodiscard]] __INLINE__ size_t getHeadAdvanceCounter() const noexcept { return *_headAdvanceCounter; }
240 [[nodiscard]] __INLINE__ size_t getTailAdvanceCounter() const noexcept { return *_tailAdvanceCounter; }
272 __INLINE__ static size_t calculateDepth(const size_t headAdvanceCounter, const size_t tailAdvanceCounter)
276 HICR_THROW_FATAL("Head index (%lu) < tail index (%lu). This is a critical bug in HiCR!\n", headAdvanceCounter, tailAdvanceCounter);
Generic class type for circular buffer.
Definition circularBuffer.hpp:42
__INLINE__ bool isEmpty() const noexcept
Definition circularBuffer.hpp:188
__INLINE__ size_t getCapacity() const noexcept
Definition circularBuffer.hpp:141
void setCachedDepth(size_t depth)
Definition circularBuffer.hpp:161
__INLINE__ size_t getHeadAdvanceCounter() const noexcept
Definition circularBuffer.hpp:235
__INLINE__ void setTail(const size_t tailAdvanceCounter)
Definition circularBuffer.hpp:216
__INLINE__ size_t getTailAdvanceCounter() const noexcept
Definition circularBuffer.hpp:240
__INLINE__ void advanceHead(const size_t n=1, bool useCachedDepth=false)
Definition circularBuffer.hpp:99
__INLINE__ size_t getDepth() const noexcept
Definition circularBuffer.hpp:154
static __INLINE__ size_t calculateDepth(const size_t headAdvanceCounter, const size_t tailAdvanceCounter)
Definition circularBuffer.hpp:272
__INLINE__ size_t getTailPosition() const noexcept
Definition circularBuffer.hpp:85
__INLINE__ void setHead(const size_t headAdvanceCounter)
Definition circularBuffer.hpp:195
__INLINE__ size_t getCachedDepth() const noexcept
Definition circularBuffer.hpp:168
CircularBuffer(size_t capacity, __volatile__ size_t *headAdvanceCounter, __volatile__ size_t *tailAdvanceCounter)
Definition circularBuffer.hpp:52
__INLINE__ void advanceTail(const size_t n=1)
Definition circularBuffer.hpp:121
__INLINE__ bool isFull() const noexcept
Definition circularBuffer.hpp:178
__INLINE__ size_t getHeadPosition() const noexcept
Definition circularBuffer.hpp:72
Provides a failure model and corresponding exception classes.
Generated by