constexpr all the... deques
This commit is contained in:
@@ -58,16 +58,16 @@ class ring_iterator {
|
||||
//! \name Constructor / Destructor
|
||||
//! @{
|
||||
public:
|
||||
ring_iterator(const Iter_t base =nullptr) noexcept :
|
||||
constexpr ring_iterator(const Iter_t base =nullptr) noexcept :
|
||||
base_(base), iter_(base) { }
|
||||
|
||||
ring_iterator(const Iter_t base, size_t elem) noexcept :
|
||||
constexpr ring_iterator(const Iter_t base, size_t elem) noexcept :
|
||||
base_(base), iter_(base + elem) { }
|
||||
|
||||
ring_iterator(const ring_iterator& it) noexcept :
|
||||
constexpr ring_iterator(const ring_iterator& it) noexcept :
|
||||
base_(it.base_), iter_(it.iter_) { }
|
||||
|
||||
ring_iterator& operator= (const ring_iterator& it) noexcept {
|
||||
constexpr ring_iterator& operator= (const ring_iterator& it) noexcept {
|
||||
base_ = it.base_;
|
||||
iter_ = it.iter_;
|
||||
return *this;
|
||||
@@ -77,18 +77,21 @@ class ring_iterator {
|
||||
//! \name Forward iterator requirements
|
||||
//! @{
|
||||
public:
|
||||
reference operator*() const noexcept {
|
||||
constexpr reference operator*() const noexcept {
|
||||
return *iter_;
|
||||
}
|
||||
pointer operator->() const noexcept {
|
||||
|
||||
constexpr pointer operator->() const noexcept {
|
||||
return iter_;
|
||||
}
|
||||
ring_iterator& operator++() noexcept {
|
||||
|
||||
constexpr ring_iterator& operator++() noexcept {
|
||||
if (static_cast<size_t>(++iter_ - base_) >= N)
|
||||
iter_ = base_;
|
||||
return *this;
|
||||
}
|
||||
ring_iterator operator++(int) noexcept {
|
||||
|
||||
constexpr ring_iterator operator++(int) noexcept {
|
||||
ring_iterator it = *this;
|
||||
if (static_cast<size_t>(++iter_ - base_) >= N)
|
||||
iter_ = base_;
|
||||
@@ -99,12 +102,12 @@ class ring_iterator {
|
||||
//! \name Bidirectional iterator requirements
|
||||
//! @{
|
||||
public:
|
||||
ring_iterator& operator--() noexcept {
|
||||
constexpr ring_iterator& operator--() noexcept {
|
||||
if (--iter_ < base_)
|
||||
iter_ = base_ + N -1;
|
||||
return *this;
|
||||
}
|
||||
ring_iterator operator--(int) noexcept {
|
||||
constexpr ring_iterator operator--(int) noexcept {
|
||||
ring_iterator it = *this;
|
||||
if (--iter_ < base_)
|
||||
iter_ = base_ + N -1;
|
||||
@@ -114,33 +117,34 @@ class ring_iterator {
|
||||
|
||||
//! \name Random access iterator requirements
|
||||
//! @{
|
||||
reference operator[](difference_type n) const noexcept {
|
||||
constexpr reference operator[](difference_type n) const noexcept {
|
||||
difference_type k = iter_ - base_; // ptrdiff from base_
|
||||
return (static_cast<size_t>(k + n) < N) ?
|
||||
base_[k + n] : // on range
|
||||
base_[k + n - N]; // out of range, loop
|
||||
}
|
||||
ring_iterator& operator+=(difference_type n) noexcept {
|
||||
constexpr ring_iterator& operator+=(difference_type n) noexcept {
|
||||
difference_type k = iter_ - base_; // ptrdiff from base_
|
||||
iter_ += (static_cast<size_t>(k + n) < N) ?
|
||||
n : // on range
|
||||
n - N; // out of range, loop
|
||||
return *this;
|
||||
}
|
||||
ring_iterator operator+(difference_type n) const noexcept {
|
||||
|
||||
constexpr ring_iterator operator+(difference_type n) const noexcept {
|
||||
difference_type k = iter_ - base_; // ptrdiff from base_
|
||||
return (static_cast<size_t>(k + n) < N) ?
|
||||
ring_iterator(base_, k + n) : // on range
|
||||
ring_iterator(base_, k + n - N); // out of range, loop
|
||||
}
|
||||
ring_iterator& operator-=(difference_type n) noexcept {
|
||||
constexpr ring_iterator& operator-=(difference_type n) noexcept {
|
||||
difference_type k = iter_ - base_; // ptrdiff from base_
|
||||
iter_ -= ((k - n) < 0)?
|
||||
n - N: // out of range, loop
|
||||
n; // on range
|
||||
return *this;
|
||||
}
|
||||
ring_iterator operator-(difference_type n) const noexcept {
|
||||
constexpr ring_iterator operator-(difference_type n) const noexcept {
|
||||
difference_type k = iter_ - base_; // ptrdiff from base_
|
||||
return ((k - n) < 0) ?
|
||||
ring_iterator(base_, k - n + N) : // out of range, loop
|
||||
@@ -150,13 +154,13 @@ class ring_iterator {
|
||||
|
||||
//! \name Data members and access
|
||||
//! @{
|
||||
const Iter_t& base() const noexcept {
|
||||
constexpr const Iter_t& base() const noexcept {
|
||||
return base_;
|
||||
}
|
||||
const Iter_t& iter() const noexcept {
|
||||
constexpr const Iter_t& iter() const noexcept {
|
||||
return iter_;
|
||||
}
|
||||
size_t size() noexcept {
|
||||
constexpr size_t size() noexcept {
|
||||
return N;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user