diff --git a/include/rexy/binary_base.hpp b/include/rexy/binary_base.hpp index 3866841..323e967 100644 --- a/include/rexy/binary_base.hpp +++ b/include/rexy/binary_base.hpp @@ -24,6 +24,8 @@ #include //memcpy #include //ptrdiff_t #include +#include //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; + using const_reverse_iterator = std::reverse_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 basic_binary : protected detail::hasallocator, public binary_base diff --git a/include/rexy/binary_base.tpp b/include/rexy/binary_base.tpp index a89584d..b228047 100644 --- a/include/rexy/binary_base.tpp +++ b/include/rexy/binary_base.tpp @@ -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 constexpr basic_binary::basic_binary(void)noexcept{} template