21 template <
typename T,
size_t Capacity>
37 std::array<value_type, Capacity> m_data;
92 std::copy(init.begin(), init.end(),
begin());
152 m_data[m_tail] = value;
153 if (++m_tail == Capacity)
168 m_data[m_tail] = std::move(value);
169 if (++m_tail == Capacity)
184 auto&& retval = std::move(m_data[m_head]);
185 if (++m_head == Capacity)
195 return m_data[(m_tail + Capacity - 1) % Capacity];
199 return m_data[(m_tail + Capacity - 1) % Capacity];
204 return m_data[m_head];
208 return m_data[m_head];
213 return m_data[(m_head + index) % Capacity];
217 return m_data[(m_head + index) % Capacity];
344 return { this->m_data, this->
m_index + offset, this->m_size };
348 return { this->m_data, this->
m_index - offset, this->m_size };
374 return { m_data.data(), m_head, Capacity };
381 return { m_data.data(), m_head + m_size, Capacity };
388 return { m_data.data(), m_head, Capacity };
394 return { m_data.data(), m_head + m_size, Capacity };
401 return { m_data.data(), m_head, Capacity };
408 return { m_data.data(), m_head + m_size, Capacity };
reference operator[](size_t index)
Definition RingBuffer.hpp:211
const T * const_pointer
Definition RingBuffer.hpp:32
constexpr size_t capacity() const
capacityを取得
Definition RingBuffer.hpp:97
constexpr RingBuffer(RingBuffer &&) noexcept=default
ムーブコンストラクタ
void push(const_reference value)
バッファの先頭に要素を追加
Definition RingBuffer.hpp:146
std::reverse_iterator< iterator > reverse_iterator
Definition RingBuffer.hpp:33
T & reference
Definition RingBuffer.hpp:29
constexpr bool empty() const
Definition RingBuffer.hpp:134
reference back()
Definition RingBuffer.hpp:193
value_type pop()
バッファの末尾を取得し要素を削除
Definition RingBuffer.hpp:178
T * pointer
Definition RingBuffer.hpp:31
iterator end()
バッファの末尾イテレーターを取得
Definition RingBuffer.hpp:379
const_iterator cend() const
バッファの末尾イテレーターを取得
Definition RingBuffer.hpp:406
reverse_iterator rbegin()
Definition RingBuffer.hpp:415
reverse_iterator rend()
Definition RingBuffer.hpp:424
RingBuffer(std::initializer_list< value_type > init)
Definition RingBuffer.hpp:86
constexpr RingBuffer(const RingBuffer &)=default
コピーコンストラクタ
const_reference operator[](size_t index) const
Definition RingBuffer.hpp:215
void fill(const_reference value)
全要素を指定した値で埋める (サイズを Capacity に設定)
Definition RingBuffer.hpp:118
void resize(size_t size)
バッファサイズを変更
Definition RingBuffer.hpp:111
const_reverse_iterator crbegin() const
Definition RingBuffer.hpp:429
const_reverse_iterator rbegin() const
Definition RingBuffer.hpp:411
void push(value_type &&value)
バッファの先頭に要素を追加
Definition RingBuffer.hpp:162
T value_type
Definition RingBuffer.hpp:28
const_reverse_iterator rend() const
Definition RingBuffer.hpp:420
const_iterator cbegin() const
バッファの先頭イテレーターを取得
Definition RingBuffer.hpp:399
iterator begin()
バッファの先頭イテレーターを取得
Definition RingBuffer.hpp:372
const_iterator begin() const
バッファの先頭イテレーターを取得
Definition RingBuffer.hpp:386
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition RingBuffer.hpp:34
const_reverse_iterator crend() const
Definition RingBuffer.hpp:434
reference front()
Definition RingBuffer.hpp:202
const_reference back() const
Definition RingBuffer.hpp:197
constexpr size_t size() const
バッファサイズを取得
Definition RingBuffer.hpp:104
const_reference front() const
Definition RingBuffer.hpp:206
constexpr RingBuffer()
コンストラクタ
Definition RingBuffer.hpp:44
constexpr bool full() const
Definition RingBuffer.hpp:139
const_iterator end() const
バッファの末尾イテレーターを取得
Definition RingBuffer.hpp:392
void clear()
バッファをクリアする
Definition RingBuffer.hpp:127
constexpr RingBuffer(size_t size)
デフォルトで初期化しないコンストラクタ
Definition RingBuffer.hpp:78
const T & const_reference
Definition RingBuffer.hpp:30
Definition Typedef.hpp:94
Definition RingBuffer.hpp:221
bool operator>(const const_iterator &other) const
Definition RingBuffer.hpp:295
const_iterator operator-=(size_t offset)
Definition RingBuffer.hpp:274
pointer operator->() const
Definition RingBuffer.hpp:243
const_iterator operator+=(size_t offset)
Definition RingBuffer.hpp:269
bool operator<=(const const_iterator &other) const
Definition RingBuffer.hpp:291
bool operator<(const const_iterator &other) const
Definition RingBuffer.hpp:287
const_iterator(pointer data, size_t index, size_t size)
Definition RingBuffer.hpp:232
const_iterator operator+(size_t offset) const
Definition RingBuffer.hpp:257
const_iterator operator-(size_t offset) const
Definition RingBuffer.hpp:261
std::random_access_iterator_tag iterator_category
Definition RingBuffer.hpp:222
const_iterator & operator++()
Definition RingBuffer.hpp:247
bool operator!=(const const_iterator &other) const
Definition RingBuffer.hpp:279
pointer m_data
Definition RingBuffer.hpp:228
const_iterator & operator--()
Definition RingBuffer.hpp:252
bool operator==(const const_iterator &other) const
Definition RingBuffer.hpp:283
size_t m_index
Definition RingBuffer.hpp:229
const T & reference
Definition RingBuffer.hpp:226
std::ptrdiff_t difference_type
Definition RingBuffer.hpp:224
const T * pointer
Definition RingBuffer.hpp:225
T value_type
Definition RingBuffer.hpp:223
bool operator>=(const const_iterator &other) const
Definition RingBuffer.hpp:299
size_t m_size
Definition RingBuffer.hpp:230
difference_type operator-(const const_iterator &other) const
Definition RingBuffer.hpp:265
reference operator[](size_t offset) const
Definition RingBuffer.hpp:303
reference operator*() const
Definition RingBuffer.hpp:239
Definition RingBuffer.hpp:311
iterator operator-=(size_t offset)
Definition RingBuffer.hpp:359
reference operator*()
Definition RingBuffer.hpp:323
T value_type
Definition RingBuffer.hpp:313
iterator(pointer data, size_t index, size_t size)
Definition RingBuffer.hpp:318
difference_type operator-(const iterator &other) const
Definition RingBuffer.hpp:350
iterator operator+=(size_t offset)
Definition RingBuffer.hpp:354
reference operator[](size_t offset)
Definition RingBuffer.hpp:364
iterator operator+(size_t offset) const
Definition RingBuffer.hpp:342
std::random_access_iterator_tag iterator_category
Definition RingBuffer.hpp:312
iterator operator-(size_t offset) const
Definition RingBuffer.hpp:346
std::ptrdiff_t difference_type
Definition RingBuffer.hpp:314
iterator & operator++()
Definition RingBuffer.hpp:332
T * pointer
Definition RingBuffer.hpp:315
iterator & operator--()
Definition RingBuffer.hpp:337
pointer operator->()
Definition RingBuffer.hpp:327
T & reference
Definition RingBuffer.hpp:316