forked from Ferdi265/cxx-ring-buffer
fix iterator constructor noexceptness
This commit is contained in:
@ -14,16 +14,14 @@ private:
|
|||||||
using reference = typename std::iterator_traits<ring_buffer_iterator>::reference;
|
using reference = typename std::iterator_traits<ring_buffer_iterator>::reference;
|
||||||
using pointer = typename std::iterator_traits<ring_buffer_iterator>::pointer;
|
using pointer = typename std::iterator_traits<ring_buffer_iterator>::pointer;
|
||||||
|
|
||||||
Container* container;
|
Container *container_ptr;
|
||||||
size_type front;
|
size_type front;
|
||||||
size_type index;
|
size_type index;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ring_buffer_iterator() = default;
|
ring_buffer_iterator() = default;
|
||||||
~ring_buffer_iterator() = default;
|
~ring_buffer_iterator() = default;
|
||||||
CONSTEXPR ring_buffer_iterator(Container& container, size_type front = 0, size_type index = 0)
|
CONSTEXPR ring_buffer_iterator(Container &container, size_type front = 0, size_type index = 0) NOEXCEPT : container_ptr(&container), front(front), index(index) {}
|
||||||
NOEXCEPT(noexcept(container(&container)))
|
|
||||||
: container(&container), front(front), index(index) {}
|
|
||||||
ring_buffer_iterator(const ring_buffer_iterator&) = default;
|
ring_buffer_iterator(const ring_buffer_iterator&) = default;
|
||||||
ring_buffer_iterator(ring_buffer_iterator&&) = default;
|
ring_buffer_iterator(ring_buffer_iterator&&) = default;
|
||||||
ring_buffer_iterator& operator=(const ring_buffer_iterator&) = default;
|
ring_buffer_iterator& operator=(const ring_buffer_iterator&) = default;
|
||||||
@ -37,20 +35,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
CONSTEXPR ring_buffer_iterator operator+(difference_type n) const NOEXCEPT {
|
CONSTEXPR ring_buffer_iterator operator+(difference_type n) const NOEXCEPT {
|
||||||
return {container, front, index + n};
|
return {container_ptr, front, index + n};
|
||||||
}
|
}
|
||||||
CONSTEXPR ring_buffer_iterator operator-(difference_type n) const NOEXCEPT {
|
CONSTEXPR ring_buffer_iterator operator-(difference_type n) const NOEXCEPT {
|
||||||
return {container, front, index - n};
|
return {container_ptr, front, index - n};
|
||||||
}
|
}
|
||||||
|
|
||||||
CONSTEXPR reference operator*() COND_NOEXCEPT(noexcept(container->begin()) && noexcept(container->size())) {
|
CONSTEXPR reference operator*() COND_NOEXCEPT(noexcept(container_ptr->begin()) &&noexcept(container_ptr->size())) {
|
||||||
return *(container->begin() + (front + index) % container->size());
|
return *(container_ptr->begin() + (front + index) % container_ptr->size());
|
||||||
}
|
}
|
||||||
CONSTEXPR pointer operator->() COND_NOEXCEPT(noexcept(container->begin()) && noexcept(container->size())) {
|
CONSTEXPR pointer operator->() COND_NOEXCEPT(noexcept(container_ptr->begin()) &&noexcept(container_ptr->size())) {
|
||||||
return &**this;
|
return &**this;
|
||||||
}
|
}
|
||||||
CONSTEXPR reference operator[](difference_type n) COND_NOEXCEPT(noexcept(container->begin()) && noexcept(container->size())) {
|
CONSTEXPR reference operator[](difference_type n) COND_NOEXCEPT(noexcept(container_ptr->begin()) &&noexcept(container_ptr->size())) {
|
||||||
return *(*this + n);
|
return *(*this + n);
|
||||||
}
|
}
|
||||||
|
|
||||||
CONSTEXPR ring_buffer_iterator& operator++() NOEXCEPT {
|
CONSTEXPR ring_buffer_iterator& operator++() NOEXCEPT {
|
||||||
@ -112,16 +110,14 @@ private:
|
|||||||
using reference = typename std::iterator_traits<ring_buffer_const_iterator>::reference;
|
using reference = typename std::iterator_traits<ring_buffer_const_iterator>::reference;
|
||||||
using pointer = typename std::iterator_traits<ring_buffer_const_iterator>::pointer;
|
using pointer = typename std::iterator_traits<ring_buffer_const_iterator>::pointer;
|
||||||
|
|
||||||
const Container* container;
|
const Container *container_ptr;
|
||||||
size_type front;
|
size_type front;
|
||||||
size_type index;
|
size_type index;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ring_buffer_const_iterator() = default;
|
ring_buffer_const_iterator() = default;
|
||||||
~ring_buffer_const_iterator() = default;
|
~ring_buffer_const_iterator() = default;
|
||||||
CONSTEXPR ring_buffer_const_iterator(const Container& container, size_type front = 0, size_type index = 0)
|
CONSTEXPR ring_buffer_const_iterator(const Container &container, size_type front = 0, size_type index = 0) NOEXCEPT : container_ptr(&container), front(front), index(index) {}
|
||||||
NOEXCEPT(noexcept(container(&container)))
|
|
||||||
: container(&container), front(front), index(index) {}
|
|
||||||
ring_buffer_const_iterator(const ring_buffer_const_iterator&) = default;
|
ring_buffer_const_iterator(const ring_buffer_const_iterator&) = default;
|
||||||
ring_buffer_const_iterator(ring_buffer_const_iterator&&) = default;
|
ring_buffer_const_iterator(ring_buffer_const_iterator&&) = default;
|
||||||
ring_buffer_const_iterator& operator=(const ring_buffer_const_iterator&) = default;
|
ring_buffer_const_iterator& operator=(const ring_buffer_const_iterator&) = default;
|
||||||
@ -135,20 +131,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
CONSTEXPR ring_buffer_const_iterator operator+(difference_type n) const NOEXCEPT {
|
CONSTEXPR ring_buffer_const_iterator operator+(difference_type n) const NOEXCEPT {
|
||||||
return {container, front, index + n};
|
return {container_ptr, front, index + n};
|
||||||
}
|
}
|
||||||
CONSTEXPR ring_buffer_const_iterator operator-(difference_type n) const NOEXCEPT {
|
CONSTEXPR ring_buffer_const_iterator operator-(difference_type n) const NOEXCEPT {
|
||||||
return {container, front, index - n};
|
return {container_ptr, front, index - n};
|
||||||
}
|
}
|
||||||
|
|
||||||
CONSTEXPR reference operator*() const COND_NOEXCEPT(noexcept(container->cbegin()) && noexcept(container->size())) {
|
CONSTEXPR reference operator*() const COND_NOEXCEPT(noexcept(container_ptr->cbegin()) &&noexcept(container_ptr->size())) {
|
||||||
return *(container->cbegin() + (front + index) % container->size());
|
return *(container_ptr->cbegin() + (front + index) % container_ptr->size());
|
||||||
}
|
}
|
||||||
CONSTEXPR pointer operator->() const COND_NOEXCEPT(noexcept(container->cbegin()) && noexcept(container->size())) {
|
CONSTEXPR pointer operator->() const COND_NOEXCEPT(noexcept(container_ptr->cbegin()) &&noexcept(container_ptr->size())) {
|
||||||
return &**this;
|
return &**this;
|
||||||
}
|
}
|
||||||
CONSTEXPR reference operator[](difference_type n) COND_NOEXCEPT(noexcept(container->cbegin()) && noexcept(container->size())) {
|
CONSTEXPR reference operator[](difference_type n) COND_NOEXCEPT(noexcept(container_ptr->cbegin()) &&noexcept(container_ptr->size())) {
|
||||||
return *(*this + n);
|
return *(*this + n);
|
||||||
}
|
}
|
||||||
|
|
||||||
CONSTEXPR ring_buffer_const_iterator& operator++() NOEXCEPT {
|
CONSTEXPR ring_buffer_const_iterator& operator++() NOEXCEPT {
|
||||||
|
Reference in New Issue
Block a user