Add binary iterators
This commit is contained in:
parent
dc68d52dd4
commit
9fd45628a5
@ -24,6 +24,8 @@
|
||||
#include <cstring> //memcpy
|
||||
#include <cstddef> //ptrdiff_t
|
||||
#include <type_traits>
|
||||
#include <iterator> //reverse_iterator
|
||||
|
||||
#include "cx/utility.hpp" //max
|
||||
#include "steal.hpp"
|
||||
#include "expression.hpp"
|
||||
@ -45,6 +47,8 @@ namespace rexy{
|
||||
using const_reference = const value_type&;
|
||||
using iterator = pointer;
|
||||
using const_iterator = const_pointer;
|
||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
||||
|
||||
protected:
|
||||
pointer m_data = nullptr;
|
||||
@ -70,6 +74,19 @@ namespace rexy{
|
||||
constexpr reference operator[](size_type i)noexcept;
|
||||
constexpr const_reference operator[](size_type i)const noexcept;
|
||||
|
||||
constexpr iterator begin(void);
|
||||
constexpr const_iterator begin(void)const;
|
||||
constexpr iterator end(void);
|
||||
constexpr const_iterator end(void)const;
|
||||
constexpr const_iterator cbegin(void)const;
|
||||
constexpr const_iterator cend(void)const;
|
||||
|
||||
constexpr reverse_iterator rbegin(void);
|
||||
constexpr const_reverse_iterator rbegin(void)const;
|
||||
constexpr reverse_iterator rend(void);
|
||||
constexpr const_reverse_iterator rend(void)const;
|
||||
constexpr const_reverse_iterator crbegin(void)const;
|
||||
constexpr const_reverse_iterator crend(void)const;
|
||||
};
|
||||
template<class Allocator>
|
||||
class basic_binary : protected detail::hasallocator<Allocator>, public binary_base
|
||||
|
||||
@ -68,6 +68,43 @@ namespace rexy{
|
||||
return m_data[i];
|
||||
}
|
||||
|
||||
constexpr auto binary_base::begin(void) -> iterator{
|
||||
return m_data;
|
||||
}
|
||||
constexpr auto binary_base::begin(void)const -> const_iterator{
|
||||
return m_data;
|
||||
}
|
||||
constexpr auto binary_base::end(void) -> iterator{
|
||||
return m_data + m_size;
|
||||
}
|
||||
constexpr auto binary_base::end(void)const -> const_iterator{
|
||||
return m_data + m_size;
|
||||
}
|
||||
constexpr auto binary_base::cbegin(void)const -> const_iterator{
|
||||
return m_data;
|
||||
}
|
||||
constexpr auto binary_base::cend(void)const -> const_iterator{
|
||||
return m_data + m_size;
|
||||
}
|
||||
constexpr auto binary_base::rbegin(void) -> reverse_iterator{
|
||||
return reverse_iterator(m_data + m_size);
|
||||
}
|
||||
constexpr auto binary_base::rbegin(void)const -> const_reverse_iterator{
|
||||
return reverse_iterator(m_data + m_size);
|
||||
}
|
||||
constexpr auto binary_base::rend(void) -> reverse_iterator{
|
||||
return reverse_iterator(m_data - 1);
|
||||
}
|
||||
constexpr auto binary_base::rend(void)const -> const_reverse_iterator{
|
||||
return reverse_iterator(m_data - 1);
|
||||
}
|
||||
constexpr auto binary_base::crbegin(void)const -> const_reverse_iterator{
|
||||
return rbegin();
|
||||
}
|
||||
constexpr auto binary_base::crend(void)const -> const_reverse_iterator{
|
||||
return rend();
|
||||
}
|
||||
|
||||
template<class Allocator>
|
||||
constexpr basic_binary<Allocator>::basic_binary(void)noexcept{}
|
||||
template<class Allocator>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user