25#ifndef _GLIBCXX_SIMD_ITERATOR_H
26#define _GLIBCXX_SIMD_ITERATOR_H 1
29#pragma GCC system_header
32#if __cplusplus >= 202400L
34#include "simd_details.h"
36namespace std _GLIBCXX_VISIBILITY(default)
38_GLIBCXX_BEGIN_NAMESPACE_VERSION
46 template <
typename _Vp>
49 friend class __iterator<const _Vp>;
51 template <
typename,
typename>
52 friend class _VecBase;
54 template <
size_t,
typename>
55 friend class _MaskBase;
57 _Vp* _M_data =
nullptr;
59 __simd_size_type _M_offset = 0;
62 __iterator(_Vp& __d, __simd_size_type __off)
63 : _M_data(&__d), _M_offset(__off)
67 using value_type =
typename _Vp::value_type;
69 using iterator_category = input_iterator_tag;
71 using iterator_concept = random_access_iterator_tag;
73 using difference_type = __simd_size_type;
75 constexpr __iterator() =
default;
78 __iterator(
const __iterator &) =
default;
81 operator=(
const __iterator &) =
default;
84 __iterator(
const __iterator<remove_const_t<_Vp>> &__i)
requires is_const_v<_Vp>
85 : _M_data(__i._M_data), _M_offset(__i._M_offset)
90 {
return (*_M_data)[_M_offset]; }
102 __iterator r = *
this;
107 constexpr __iterator&
117 __iterator r = *
this;
122 constexpr __iterator&
123 operator+=(difference_type __x)
129 constexpr __iterator&
130 operator-=(difference_type __x)
137 operator[](difference_type __i)
const
138 {
return (*_M_data)[_M_offset + __i]; }
140 constexpr friend bool operator==(__iterator __a, __iterator __b) =
default;
142 constexpr friend bool operator==(__iterator __a, std::default_sentinel_t)
noexcept
143 {
return __a._M_offset == _Vp::size.value; }
145 constexpr friend auto operator<=>(__iterator __a, __iterator __b)
146 {
return __a._M_offset <=> __b._M_offset; }
148 constexpr friend __iterator
149 operator+(
const __iterator& __it, difference_type __x)
150 {
return __iterator(*__it._M_data, __it._M_offset + __x); }
152 constexpr friend __iterator
153 operator+(difference_type __x,
const __iterator& __it)
154 {
return __iterator(*__it._M_data, __it._M_offset + __x); }
156 constexpr friend __iterator
157 operator-(
const __iterator& __it, difference_type __x)
158 {
return __iterator(*__it._M_data, __it._M_offset - __x); }
160 constexpr friend difference_type
161 operator-(__iterator __a, __iterator __b)
162 {
return __a._M_offset - __b._M_offset; }
164 constexpr friend difference_type
165 operator-(__iterator __it, std::default_sentinel_t)
noexcept
166 {
return __it._M_offset - difference_type(_Vp::size.value); }
168 constexpr friend difference_type
169 operator-(std::default_sentinel_t, __iterator __it)
noexcept
170 {
return difference_type(_Vp::size.value) - __it._M_offset; }
173_GLIBCXX_END_NAMESPACE_VERSION
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
constexpr complex< _Tp > operator-(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x minus y.
constexpr complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
ISO C++ entities toplevel namespace is std.