ArrayView cleanups

This commit is contained in:
2021-10-14 19:45:27 +02:00
parent 47417e77b7
commit 82498617f2

View File

@ -11,22 +11,61 @@ namespace cpputils {
template<typename _Tp> template<typename _Tp>
struct ArrayView struct ArrayView
{ {
typedef _Tp value_type; using value_type = _Tp;
typedef value_type* pointer; using pointer = value_type*;
typedef const value_type* const_pointer; using const_pointer = const value_type*;
typedef value_type& reference; using reference = value_type&;
typedef const value_type& const_reference; using const_reference = const value_type&;
typedef value_type* iterator; using iterator = value_type*;
typedef const value_type* const_iterator; using const_iterator = const value_type*;
typedef std::size_t size_type; using size_type = std::size_t;
typedef std::ptrdiff_t difference_type; using difference_type = std::ptrdiff_t;
typedef std::reverse_iterator<iterator> reverse_iterator; using reverse_iterator = std::reverse_iterator<iterator>;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator; using const_reverse_iterator = std::reverse_iterator<const_iterator>;
constexpr ArrayView() noexcept = default;
constexpr ArrayView(pointer begin, pointer end) noexcept : constexpr ArrayView(pointer begin, pointer end) noexcept :
m_begin{begin}, m_end{end} m_begin{begin}, m_end{end}
{} {}
constexpr ArrayView(pointer begin, std::size_t size) noexcept :
m_begin{begin}, m_end{begin + size}
{}
constexpr ArrayView(const ArrayView &other) noexcept :
m_begin{other.m_begin}, m_end{other.m_end}
{}
constexpr ArrayView(ArrayView &&other) noexcept :
m_begin{std::move(other.m_begin)}, m_end{std::move(other.m_end)}
{
other.m_begin = {};
other.m_end = {};
}
ArrayView &operator=(const ArrayView &other) noexcept
{
m_begin = other.m_begin;
m_end = other.m_end;
return *this;
}
ArrayView &operator=(ArrayView &&other) noexcept
{
m_begin = std::move(other.m_begin);
other.m_begin = {};
m_end = std::move(other.m_end);
other.m_end = {};
return *this;
}
bool operator==(const ArrayView &other) const noexcept
{
return m_begin == other.m_begin &&
m_end == other.m_end;
}
// Iterators. // Iterators.
constexpr iterator begin() noexcept constexpr iterator begin() noexcept
{ return iterator(data()); } { return iterator(data()); }
@ -120,7 +159,7 @@ struct ArrayView
{ return m_begin; } { return m_begin; }
private: private:
pointer m_begin, m_end; pointer m_begin{}, m_end{};
}; };
} // namespace cpputils } // namespace cpputils