49 typedef const T& const_reference;
50 typedef size_t size_type;
52 explicit circular_buffer(
const size_type n): buffer_(n), size_(n), contents_size_(0), head_(0), tail_(0) {}
57 assert(contents_size_ == size_);
60 return buffer_[tail_];
66 if (contents_size_ == 0) {
67 buffer_[tail_] = item;
71 buffer_[tail_] = item;
73 if (contents_size_ == size_)
79 buffer_[tail_] = item;
83 inline reference
front() {
return buffer_[head_]; }
86 inline const_reference
front()
const {
return buffer_[head_]; }
89 inline reference
back() {
return buffer_[tail_]; }
92 inline const_reference
back()
const {
return buffer_[tail_]; }
98 return buffer_[(head_ + i) % size_];
105 return buffer_[(head_ + i) % size_];
111 head_ = tail_ = contents_size_ = 0;
116 inline size_type
size()
const {
return size_; }
122 if (head_ == size_) head_ = 0;
128 if (tail_ == size_) tail_ = 0;
132 std::vector<T> buffer_;
134 size_type contents_size_;
const_reference back() const
Access the last element.
Definition: circular_buffer.hpp:92
void clear()
Removes all elements.
Definition: circular_buffer.hpp:109
const_reference operator[](size_type i) const
Accesses the element.
Definition: circular_buffer.hpp:95
reference back()
Accesses the last element.
Definition: circular_buffer.hpp:89
circular_buffer(const size_type n)
Definition: circular_buffer.hpp:52
reference front()
Accesses the first element.
Definition: circular_buffer.hpp:83
size_type size() const
Counts the number of elements.
Definition: circular_buffer.hpp:116
A minimal implementation of circular buffer class.
Definition: circular_buffer.hpp:45
reference next()
Get next element in the circular buffer.
Definition: circular_buffer.hpp:55
const_reference front() const
Accesses the first element.
Definition: circular_buffer.hpp:86
void push_back(const value_type &item)
Add new last element.
Definition: circular_buffer.hpp:64