Files
cppdraft_translate/cppdraft/simd/iterator.md
2025-10-25 03:02:53 +03:00

7.4 KiB
Raw Blame History

[simd.iterator]

29 Numerics library [numerics]

29.10 Data-parallel types [simd]

29.10.6 Class template simd-iterator [simd.iterator]

🔗

namespace std::simd {templateclass simd-iterator { // exposition only V* data_ = nullptr; // exposition only**simd-size-type offset_ = 0; // exposition onlyconstexpr simd-iterator(V& d, simd-size-type off) noexcept; // exposition onlypublic:using value_type = typename V::value_type; using iterator_category = input_iterator_tag; using iterator_concept = random_access_iterator_tag; using difference_type = simd-size-type; constexpr simd-iterator() = default; constexpr simd-iterator(const simd-iterator&) = default; constexpr simd-iterator& operator=(const simd-iterator&) = default; constexpr simd-iterator(const simd-iterator<remove_const_t>&) requires is_const_v; constexpr value_type operator*() const; constexpr simd-iterator& operator++(); constexpr simd-iterator operator++(int); constexpr simd-iterator& operator--(); constexpr simd-iterator operator--(int); constexpr simd-iterator& operator+=(difference_type n); constexpr simd-iterator& operator-=(difference_type n); constexpr value_type operator[](difference_type n) const; friend constexpr bool operator==(simd-iterator a, simd-iterator b) = default; friend constexpr bool operator==(simd-iterator a, default_sentinel_t) noexcept; friend constexpr auto operator<=>(simd-iterator a, simd-iterator b); friend constexpr simd-iterator operator+(simd-iterator i, difference_type n); friend constexpr simd-iterator operator+(difference_type n, simd-iterator i); friend constexpr simd-iterator operator-(simd-iterator i, difference_type n); friend constexpr difference_type operator-(simd-iterator a, simd-iterator b); friend constexpr difference_type operator-(simd-iterator i, default_sentinel_t) noexcept; friend constexpr difference_type operator-(default_sentinel_t, simd-iterator i) noexcept; };}

🔗

constexpr simd-iterator(V& d, simd-size-type off) noexcept;

1

#

Effects: Initializes data_ with addressof(d) and offset_ with off.

🔗

constexpr simd-iterator(const simd-iterator<remove_const_t<V>>& i) requires is_const_v<V>;

2

#

Effects: Initializes data_ with i.data_ and offset_ with i.offset_.

🔗

constexpr value_type operator*() const;

3

#

Effects: Equivalent to: return (**data_*)[offset_];

🔗

constexpr simd-iterator& operator++();

4

#

Effects: Equivalent to: return *this += 1;

🔗

constexpr simd-iterator operator++(int);

5

#

Effects: Equivalent to:simd-iterator tmp = *this;*this += 1;return tmp;

🔗

constexpr simd-iterator& operator--();

6

#

Effects: Equivalent to: return *this -= 1;

🔗

constexpr simd-iterator operator--(int);

7

#

Effects: Equivalent to:simd-iterator tmp = *this;*this -= 1;return tmp;

🔗

constexpr simd-iterator& operator+=(difference_type n);

8

#

Preconditions: offset_ + n is in the range [0, V::size()].

9

#

Effects: Equivalent to:offset_ += n;return *this;

🔗

constexpr simd-iterator& operator-=(difference_type n);

10

#

Preconditions: offset_ - n is in the range [0, V::size()].

11

#

Effects: Equivalent to:offset_ -= n;return *this;

🔗

constexpr value_type operator[](difference_type n) const;

12

#

Effects: Equivalent to: return (**data_*)[offset_ + n];

🔗

friend constexpr bool operator==(simd-iterator i, default_sentinel_t) noexcept;

13

#

Effects: Equivalent to: return i.offset_ == V::size();

🔗

friend constexpr auto operator<=>(simd-iterator a, simd-iterator b);

14

#

Preconditions: a.data_ == b.data_ is true.

15

#

Effects: Equivalent to: return a.offset_ <=> b.offset_;

🔗

friend constexpr simd-iterator operator+(simd-iterator i, difference_type n); friend constexpr simd-iterator operator+(difference_type n, simd-iterator i);

16

#

Effects: Equivalent to: return i += n;

🔗

friend constexpr simd-iterator operator-(simd-iterator i, difference_type n);

17

#

Effects: Equivalent to: return i -= n;

🔗

friend constexpr difference_type operator-(simd-iterator a, simd-iterator b);

18

#

Preconditions: a.data_ == b.data_ is true.

19

#

Effects: Equivalent to: return a.offset_ - b.offset_;

🔗

friend constexpr difference_type operator-(simd-iterator i, default_sentinel_t) noexcept;

20

#

Effects: Equivalent to: return i.offset_ - V::size();

🔗

friend constexpr difference_type operator-(default_sentinel_t, simd-iterator i) noexcept;

21

#

Effects: Equivalent to: return V::size() - i.offset_;