7#include <initializer_list>
14template<
class T,
size_t N>
19 Ring(std::initializer_list<T> list) {
20 assert(list.size() == N);
21 std::copy(list.begin(), list.end(), array_.begin());
34 T&
front() {
return array_[first_]; }
35 const T&
front()
const {
return array_[first_]; }
38 return array_[(first_ + i) % N];
42 return array_[(first_ + i) % N];
53 auto res = array_[first_];
54 array_[first_] = item;
55 first_ = (first_ + 1) % N;
62 swap(r1.array_, r2.array_);
63 swap(r1.first_, r2.first_);
67 std::array<T, N> array_;
77 Ring(std::initializer_list<T> list)
78 : item_(*list.begin()) {}
91 const T&
front()
const {
return item_; }
114 swap(r1.item_, r2.item_);
127 Ring(std::initializer_list<T> list) {
128 assert(list.size() == 2);
129 std::copy(list.begin(), list.end(), array_.begin());
143 const T&
front()
const {
return array_[0]; }
158 auto res = array_[0];
159 array_[0] = array_[1];
167 swap(r1.array_, r2.array_);
171 std::array<T, 2> array_;
Ring & operator=(Ring other) noexcept
Ring(const Ring &)=default
const T & operator[](size_t i) const
friend void swap(Ring &r1, Ring &r2) noexcept
Ring(std::initializer_list< T > list)
const T & operator[](size_t i) const
Ring & operator=(Ring other) noexcept
friend void swap(Ring &r1, Ring &r2) noexcept
Ring(std::initializer_list< T > list)
Ring & operator=(Ring other) noexcept
const T & operator[](size_t i) const
T put(T item)
Puts item into buffer.
friend void swap(Ring &r1, Ring &r2) noexcept
Ring(std::initializer_list< T > list)