NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
iiterator.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_INTERFACE_IITERATOR_HPP__
2#define NEFORCE_CORE_INTERFACE_IITERATOR_HPP__
3
10
12NEFORCE_BEGIN_NAMESPACE__
13
19
28template <typename Iterator>
29struct iiterator {
30private:
31 constexpr Iterator& derived() noexcept { return static_cast<Iterator&>(*this); }
32
33 constexpr const Iterator& derived() const noexcept { return static_cast<const Iterator&>(*this); }
34
35public:
40 NEFORCE_NODISCARD constexpr decltype(auto) operator*() const noexcept { return derived().dereference(); }
41
46 NEFORCE_NODISCARD constexpr decltype(auto) operator->() const noexcept { return &(derived().dereference()); }
47
52 constexpr Iterator& operator++() noexcept {
53 derived().increment();
54 return derived();
55 }
56
61 constexpr Iterator operator++(int) noexcept {
62 Iterator temp = derived();
63 derived().increment();
64 return temp;
65 }
66
71 constexpr Iterator& operator--() noexcept {
72 derived().decrement();
73 return derived();
74 }
75
80 constexpr Iterator operator--(int) noexcept {
81 Iterator temp = derived();
82 derived().decrement();
83 return temp;
84 }
85
91 template <typename Distance>
92 constexpr Iterator& operator+=(Distance n) noexcept {
93 derived().advance(n);
94 return derived();
95 }
96
102 template <typename Distance>
103 NEFORCE_NODISCARD constexpr Iterator operator+(Distance n) const noexcept {
104 Iterator temp = derived();
105 temp.advance(n);
106 return temp;
107 }
108
115 template <typename Distance>
116 NEFORCE_NODISCARD friend constexpr Iterator operator+(Distance n, const iiterator& it) noexcept {
117 return it.derived() + n;
118 }
119
125 template <typename Distance>
126 constexpr Iterator& operator-=(Distance n) noexcept {
127 derived().advance(-n);
128 return derived();
129 }
130
137 template <typename T>
138 NEFORCE_NODISCARD constexpr enable_if_t<!is_same_v<T, Iterator>, Iterator> operator-(const T n) const noexcept {
139 Iterator temp = derived();
140 temp.advance(-n);
141 return temp;
142 }
143
149 NEFORCE_NODISCARD constexpr decltype(auto) operator-(const Iterator& other) const noexcept {
150 return derived().distance_to(other);
151 }
152
158 NEFORCE_NODISCARD constexpr bool operator==(const Iterator& rhs) const noexcept { return derived().equal(rhs); }
159
165 NEFORCE_NODISCARD constexpr bool operator!=(const Iterator& rhs) const noexcept { return !(*this == rhs); }
166
172 NEFORCE_NODISCARD constexpr bool operator<(const Iterator& rhs) const noexcept { return derived().less_than(rhs); }
173
179 NEFORCE_NODISCARD constexpr bool operator>(const Iterator& rhs) const noexcept { return rhs < derived(); }
180
186 NEFORCE_NODISCARD constexpr bool operator<=(const Iterator& rhs) const noexcept { return !(derived() > rhs); }
187
193 NEFORCE_NODISCARD constexpr bool operator>=(const Iterator& rhs) const noexcept { return !(derived() < rhs); }
194};
195 // CRTPInterfaces
197
198NEFORCE_END_NAMESPACE__
199#endif // NEFORCE_CORE_INTERFACE_IITERATOR_HPP__
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名
迭代器接口模板
NEFORCE_NODISCARD constexpr enable_if_t<!is_same_v< T, Iterator >, Iterator > operator-(const T n) const noexcept
减法操作符
constexpr Iterator & operator++() noexcept
前置递增操作符
NEFORCE_NODISCARD constexpr bool operator==(const Iterator &rhs) const noexcept
相等比较操作符
constexpr Iterator & operator-=(Distance n) noexcept
复合减法赋值操作符
NEFORCE_NODISCARD constexpr Iterator operator+(Distance n) const noexcept
加法操作符
constexpr Iterator & operator+=(Distance n) noexcept
复合加法赋值操作符
constexpr Iterator & operator--() noexcept
前置递减操作符
constexpr Iterator operator--(int) noexcept
后置递减操作符
NEFORCE_NODISCARD constexpr bool operator>=(const Iterator &rhs) const noexcept
大于等于比较操作符
NEFORCE_NODISCARD friend constexpr Iterator operator+(Distance n, const iiterator &it) noexcept
友元加法操作符
constexpr Iterator operator++(int) noexcept
后置递增操作符
NEFORCE_NODISCARD constexpr bool operator<=(const Iterator &rhs) const noexcept
小于等于比较操作符
NEFORCE_NODISCARD constexpr bool operator<(const Iterator &rhs) const noexcept
小于比较操作符
NEFORCE_NODISCARD constexpr bool operator!=(const Iterator &rhs) const noexcept
不等比较操作符
NEFORCE_NODISCARD constexpr bool operator>(const Iterator &rhs) const noexcept
大于比较操作符
类型萃取