annotate DEPENDENCIES/generic/include/boost/thread/csbl/devector.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 // Copyright (C) 2013 Vicente J. Botet Escriba
Chris@102 2 //
Chris@102 3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@102 4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@102 5 //
Chris@102 6 // 2013/10 Vicente J. Botet Escriba
Chris@102 7 // Creation.
Chris@102 8
Chris@102 9 #ifndef BOOST_CSBL_DEVECTOR_HPP
Chris@102 10 #define BOOST_CSBL_DEVECTOR_HPP
Chris@102 11
Chris@102 12 #include <boost/config.hpp>
Chris@102 13
Chris@102 14 #include <boost/thread/csbl/vector.hpp>
Chris@102 15 #include <boost/move/detail/move_helpers.hpp>
Chris@102 16
Chris@102 17 namespace boost
Chris@102 18 {
Chris@102 19 namespace csbl
Chris@102 20 {
Chris@102 21 template <class T>
Chris@102 22 class devector
Chris@102 23 {
Chris@102 24 typedef vector<T> vector_type;
Chris@102 25 vector<T> data_;
Chris@102 26 std::size_t front_index_;
Chris@102 27
Chris@102 28 BOOST_COPYABLE_AND_MOVABLE(devector)
Chris@102 29
Chris@102 30 template <class U>
Chris@102 31 void priv_push_back(BOOST_FWD_REF(U) x)
Chris@102 32 { data_.push_back(boost::forward<U>(x)); }
Chris@102 33
Chris@102 34 public:
Chris@102 35 typedef typename vector_type::size_type size_type;
Chris@102 36 typedef typename vector_type::reference reference;
Chris@102 37 typedef typename vector_type::const_reference const_reference;
Chris@102 38
Chris@102 39
Chris@102 40 devector() : front_index_(0) {}
Chris@102 41 devector(devector const& x) BOOST_NOEXCEPT
Chris@102 42 : data_(x.data_),
Chris@102 43 front_index_(x.front_index_)
Chris@102 44 {}
Chris@102 45 devector(BOOST_RV_REF(devector) x) BOOST_NOEXCEPT
Chris@102 46 : data_(boost::move(x.data_)),
Chris@102 47 front_index_(x.front_index_)
Chris@102 48 {}
Chris@102 49
Chris@102 50 devector& operator=(BOOST_COPY_ASSIGN_REF(devector) x)
Chris@102 51 {
Chris@102 52 if (&x != this)
Chris@102 53 {
Chris@102 54 data_ = x.data_;
Chris@102 55 front_index_ = x.front_index_;
Chris@102 56 }
Chris@102 57 return *this;
Chris@102 58 }
Chris@102 59
Chris@102 60 devector& operator=(BOOST_RV_REF(devector) x)
Chris@102 61 BOOST_NOEXCEPT_IF(vector<T>::allocator_traits_type::propagate_on_container_move_assignment::value)
Chris@102 62 {
Chris@102 63 data_ = boost::move(x.data_);
Chris@102 64 front_index_ = x.front_index_;
Chris@102 65 return *this;
Chris@102 66 }
Chris@102 67
Chris@102 68 bool empty() const BOOST_NOEXCEPT
Chris@102 69 { return data_.size() == front_index_; }
Chris@102 70
Chris@102 71 size_type size() const BOOST_NOEXCEPT
Chris@102 72 { return data_.size() - front_index_; }
Chris@102 73
Chris@102 74 reference front() BOOST_NOEXCEPT
Chris@102 75 { return data_[front_index_]; }
Chris@102 76
Chris@102 77 const_reference front() const BOOST_NOEXCEPT
Chris@102 78 { return data_[front_index_]; }
Chris@102 79
Chris@102 80 reference back() BOOST_NOEXCEPT
Chris@102 81 { return data_.back(); }
Chris@102 82
Chris@102 83 const_reference back() const BOOST_NOEXCEPT
Chris@102 84 { return data_.back(); }
Chris@102 85
Chris@102 86 BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
Chris@102 87
Chris@102 88 void pop_front()
Chris@102 89 {
Chris@102 90 ++front_index_;
Chris@102 91 if (empty()) {
Chris@102 92 data_.clear();
Chris@102 93 front_index_=0;
Chris@102 94 }
Chris@102 95 }
Chris@102 96
Chris@102 97 };
Chris@102 98 }
Chris@102 99 }
Chris@102 100 #endif // header