libbmb
Modern implementation of STL
Loading...
Searching...
No Matches
vector_iterator.h
Go to the documentation of this file.
1#pragma once
8#include <cstddef>
9
10#include "utils/iterators.h"
11#include "utils/type_traits.h"
12
13namespace bmb {
14namespace detail {
15
21template <typename T, bool IsConst>
23private:
24 using Self = BaseVectorIter;
25
26public:
32
34 : ptr_(nullptr) {};
35
37 : ptr_(ptr) {};
38
39 // Want a conversion non-const -> const underlying value
40 operator BaseVectorIter<T, true>() const { return BaseVectorIter<T, true>(ptr_); }
41
42 pointer operator->() const { return ptr_; }
43 reference operator*() const { return *ptr_; }
44
46 ++ptr_;
47 return *this;
48 }
49
51 Self copy = *this;
52 ++ptr_;
53 return copy;
54 }
55
57 ptr_ += n;
58 return *this;
59 }
60
62 return Self{ptr_ + n};
63 }
64
66 return Self{it.ptr_ + n};
67 }
68
70 --ptr_;
71 return *this;
72 }
73
75 Self copy = *this;
76 --ptr_;
77 return copy;
78 }
79
81 ptr_ -= n;
82 return *this;
83 }
84
85 Self operator-(difference_type n) { return {ptr_ - n}; }
86
88 const Self& rhs) { return lhs.ptr_ - rhs.ptr_; }
89
90 auto operator<=>(const Self& other) const = default;
91
92private:
93 pointer ptr_;
94};
95
96} // namespace detail
97} // namespace bmb
contiguous iterator for Vector. Trivial iterator-wrapper for pointer to array(aka T*)
Definition vector_iterator.h:22
Self & operator+=(difference_type n)
Definition vector_iterator.h:56
reference operator*() const
Definition vector_iterator.h:43
auto operator<=>(const Self &other) const =default
BaseVectorIter(pointer ptr)
Definition vector_iterator.h:36
Self operator+(difference_type n)
Definition vector_iterator.h:61
conditional_t< IsConst, const T, T > & reference
Definition vector_iterator.h:28
Self & operator-=(difference_type n)
Definition vector_iterator.h:80
friend difference_type operator-(const Self &lhs, const Self &rhs)
Definition vector_iterator.h:87
ptrdiff_t difference_type
Definition vector_iterator.h:30
pointer operator->() const
Definition vector_iterator.h:42
conditional_t< IsConst, const T, T > * pointer
Definition vector_iterator.h:29
friend Self operator+(difference_type n, const Self &it)
Definition vector_iterator.h:65
Self & operator--()
Definition vector_iterator.h:69
Self & operator++()
Definition vector_iterator.h:45
BaseVectorIter()
Definition vector_iterator.h:33
remove_const_t< T > value_type
Definition vector_iterator.h:27
Self operator++(int)
Definition vector_iterator.h:50
Self operator-(difference_type n)
Definition vector_iterator.h:85
Self operator--(int)
Definition vector_iterator.h:74
Definition algo_base.h:14
conditional< Cond, IfTrue, IfFalse >::type conditional_t
conditional_t
Definition type_traits.h:197
remove_const< T >::type remove_const_t
remove_const_t
Definition type_traits.h:162
constexpr T && forward(remove_ref_t< T > &value) noexcept
Forward a lvalue.
Definition move.h:33
contiguous_iter_tag
Definition iterators.h:28