2#ifndef DSY_RINGBUFFER_H
3#define DSY_RINGBUFFER_H
17template <
typename T,
size_t size>
24 inline void Init() { read_ptr_ = write_ptr_ = 0; }
27 inline size_t capacity()
const {
return size; }
32 return (read_ptr_ - write_ptr_ - 1) % size;
36 inline size_t readable()
const {
return (write_ptr_ - read_ptr_) % size; }
39 inline bool isEmpty()
const {
return write_ptr_ == read_ptr_; }
56 size_t w = write_ptr_;
58 write_ptr_ = (w + 1) % size;
77 T result = buffer_[r];
78 read_ptr_ = (r + 1) % size;
83 inline void Flush() { write_ptr_ = read_ptr_; }
94 read_ptr_ = (write_ptr_ + 1 + n) % size;
103 size_t r = read_ptr_;
104 size_t read = num_elements;
110 std::copy(&buffer_[r], &buffer_[r + read], destination);
111 if(read != num_elements)
114 &buffer_[0], &buffer_[num_elements - read], destination + read);
116 read_ptr_ = (r + num_elements) % size;
123 inline void Overwrite(
const T* source,
size_t num_elements)
125 size_t w = write_ptr_;
126 size_t written = num_elements;
128 if(w + written > size)
132 std::copy(source, source + written, &buffer_[w]);
133 if(written != num_elements)
135 std::copy(source + written, source + num_elements, &buffer_[0]);
138 write_ptr_ = (w + num_elements) % size;
123 inline void Overwrite(
const T* source,
size_t num_elements) {
…}
146 num_elements = num_elements < free ? num_elements : free;
147 write_ptr_ = write_ptr_ + num_elements;
148 if(write_ptr_ > size)
149 write_ptr_ = write_ptr_ - size;
158 volatile size_t read_ptr_;
159 volatile size_t write_ptr_;
175 inline void Write(T v) { (void)(v); }
180 inline T
Read() {
return T(0); }
186 (void)(num_elements);
188 inline void Overwrite(
const T* source,
size_t num_elements)
191 (void)(num_elements);
188 inline void Overwrite(
const T* source,
size_t num_elements) {
…}
180 inline T
Read() {
return T(0); } {
…}
175 inline void Write(T v) { (void)(v); } {
…}
void Init()
Definition ringbuffer.h:171
T ImmediateRead()
Definition ringbuffer.h:181
size_t capacity() const
Definition ringbuffer.h:172
T Read()
Definition ringbuffer.h:180
RingBuffer()
Definition ringbuffer.h:169
void Overwrite(const T *source, size_t num_elements)
Definition ringbuffer.h:188
void Write(T v)
Definition ringbuffer.h:175
size_t writable() const
Definition ringbuffer.h:173
void Flush()
Definition ringbuffer.h:182
void ImmediateRead(T *destination, size_t num_elements)
Definition ringbuffer.h:183
size_t readable() const
Definition ringbuffer.h:174
void Overwrite(T v)
Definition ringbuffer.h:176
Definition ringbuffer.h:19
T ImmediateRead()
Definition ringbuffer.h:74
T Read()
Definition ringbuffer.h:64
size_t writable() const
Definition ringbuffer.h:30
void Overwrite(const T *source, size_t num_elements)
Definition ringbuffer.h:123
bool isEmpty() const
Definition ringbuffer.h:39
void Init()
Definition ringbuffer.h:24
void Overwrite(T v)
Definition ringbuffer.h:54
T * GetMutableBuffer()
Definition ringbuffer.h:154
void Flush()
Definition ringbuffer.h:83
size_t readable() const
Definition ringbuffer.h:36
void Write(T v)
Definition ringbuffer.h:44
RingBuffer()
Definition ringbuffer.h:21
void Swallow(size_t n)
Definition ringbuffer.h:88
void ImmediateRead(T *destination, size_t num_elements)
Definition ringbuffer.h:101
void Advance(size_t num_elements)
Definition ringbuffer.h:142
size_t capacity() const
Definition ringbuffer.h:27
Hardware defines and helpers for daisy field platform.
Definition index.h:2