Add binary iterators

This commit is contained in:
rexy712 2020-08-12 14:33:12 -07:00
parent dc68d52dd4
commit 9fd45628a5
2 changed files with 54 additions and 0 deletions

View File

@ -24,6 +24,8 @@
#include <cstring> //memcpy #include <cstring> //memcpy
#include <cstddef> //ptrdiff_t #include <cstddef> //ptrdiff_t
#include <type_traits> #include <type_traits>
#include <iterator> //reverse_iterator
#include "cx/utility.hpp" //max #include "cx/utility.hpp" //max
#include "steal.hpp" #include "steal.hpp"
#include "expression.hpp" #include "expression.hpp"
@ -45,6 +47,8 @@ namespace rexy{
using const_reference = const value_type&; using const_reference = const value_type&;
using iterator = pointer; using iterator = pointer;
using const_iterator = const_pointer; using const_iterator = const_pointer;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
protected: protected:
pointer m_data = nullptr; pointer m_data = nullptr;
@ -70,6 +74,19 @@ namespace rexy{
constexpr reference operator[](size_type i)noexcept; constexpr reference operator[](size_type i)noexcept;
constexpr const_reference operator[](size_type i)const 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> template<class Allocator>
class basic_binary : protected detail::hasallocator<Allocator>, public binary_base class basic_binary : protected detail::hasallocator<Allocator>, public binary_base

View File

@ -68,6 +68,43 @@ namespace rexy{
return m_data[i]; 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> template<class Allocator>
constexpr basic_binary<Allocator>::basic_binary(void)noexcept{} constexpr basic_binary<Allocator>::basic_binary(void)noexcept{}
template<class Allocator> template<class Allocator>