8#ifndef ADOBE_CIRCULAR_QUEUE_HPP
9#define ADOBE_CIRCULAR_QUEUE_HPP
18#include <boost/operators.hpp>
214#define ADOBE_NOTHROW throw()
225bool operator==(
const circular_queue<T>& x,
const circular_queue<T>& y);
261#if !defined(ADOBE_NO_DOCUMENTATION)
288#if !defined(ADOBE_NO_DOCUMENTATION)
291 swap(x.container_m, y.container_m);
294 swap(x.is_empty_m, y.is_empty_m);
299 typedef typename std::vector<value_type> container_t;
300 typedef typename container_t::iterator iterator;
301 typedef typename container_t::const_iterator const_iterator;
304 container_t container_m;
312 typedef std::pair<const_iterator, const_iterator> const_range;
314 const_range first_range()
const {
315 return const_range(begin_m,
316 begin_m < end_m ? const_iterator(end_m) : boost::end(container_m));
319 const_range second_range()
const {
320 return const_range(begin_m < end_m ? const_iterator(end_m) : boost::begin(container_m),
331 : container_m(
capacity), begin_m(boost::begin(container_m)), end_m(boost::begin(container_m)),
334#if !defined(ADOBE_NO_DOCUMENTATION)
340 : container_m(rhs.
capacity()), begin_m(boost::begin(container_m)),
341 end_m(boost::begin(container_m)), is_empty_m(rhs.is_empty_m) {
345 end_m =
copy(rhs.first_range(), end_m);
346 end_m =
copy(rhs.second_range(), end_m);
378 *end_m = std::move(x);
380 bool was_full(
full());
382 if (++end_m == boost::end(container_m))
383 end_m = boost::begin(container_m);
395 if (++begin_m == boost::end(container_m))
396 begin_m = boost::begin(container_m);
397 is_empty_m = begin_m == end_m;
405 if (begin_m == boost::begin(container_m))
406 begin_m = boost::end(container_m);
416 return std::distance(begin_m, end_m);
418 return is_empty_m ? 0 :
capacity() - std::distance(end_m, begin_m);
430 typedef typename circular_queue<T>::const_range const_range;
435 const_range sequence1[] = {x.first_range(), x.second_range()};
436 const_range sequence2[] = {y.first_range(), y.second_range()};
A queue with a fixed capacity which supports putting back elements. Pushing more elements than there ...
circular_queue & operator=(circular_queue rhs)
void clear() ADOBE_NOTHROW
reference front() ADOBE_NOTHROW
size_type size() const ADOBE_NOTHROW
bool empty() const ADOBE_NOTHROW
circular_queue(std::size_t capacity=0)
void putback() ADOBE_NOTHROW
friend void swap(circular_queue &x, circular_queue &y)
void pop_front() ADOBE_NOTHROW
friend bool operator==(const circular_queue &x, const circular_queue &y)
size_type capacity() const ADOBE_NOTHROW
bool full() const ADOBE_NOTHROW
const T & const_reference
size_type max_size() const ADOBE_NOTHROW
bool empty(const any_regular_t &x)
segmented_iterator< typename boost::range_iterator< R >::type > make_segmented_iterator(R &r)
boost::iterator_range< segmented_iterator< typename boost::range_iterator< R >::type > > make_segmented_range(R &r)
OutputIterator copy(const InputRange &range, OutputIterator result)
copy implementation
bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate pred)
void swap(any_regular_t &x, any_regular_t &y)
bool operator==(const any_regular_t &x, const any_regular_t &y)
void push_back(array_t &v, T x)
void swap(adobe::extents_t::slice_t &x, adobe::extents_t::slice_t &y) BOOST_NOEXCEPT