Distributed Ranges
Loading...
Searching...
No Matches
dense_row_view.hpp
1// SPDX-FileCopyrightText: Intel Corporation
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#pragma once
6
7#include <dr/detail/index.hpp>
8#include <dr/detail/iterator_adaptor.hpp>
9#include <dr/detail/matrix_entry.hpp>
10#include <iterator>
11
12namespace dr::sp {
13template <typename T, typename Iter> class dense_matrix_row_accessor {
14public:
15 using size_type = std::size_t;
16 using difference_type = std::ptrdiff_t;
17
18 using scalar_value_type = std::iter_value_t<Iter>;
19 using scalar_reference = std::iter_reference_t<Iter>;
20
22
24
25 using iterator_category = std::random_access_iterator_tag;
26
30
31 using key_type = dr::index<>;
32
33 constexpr dense_matrix_row_accessor() noexcept = default;
34 constexpr ~dense_matrix_row_accessor() noexcept = default;
36 const dense_matrix_row_accessor &) noexcept = default;
38 operator=(const dense_matrix_row_accessor &) noexcept = default;
39
40 constexpr dense_matrix_row_accessor(Iter data, std::size_t i,
41 std::size_t j) noexcept
42 : data_(data), i_(i), j_(j) {}
43
45 operator+=(difference_type offset) noexcept {
46 j_ += offset;
47 return *this;
48 }
49
50 constexpr bool operator==(const iterator_accessor &other) const noexcept {
51 return j_ == other.j_;
52 }
53
54 constexpr difference_type
55 operator-(const iterator_accessor &other) const noexcept {
56 return difference_type(j_) - difference_type(other.j_);
57 }
58
59 constexpr bool operator<(const iterator_accessor &other) const noexcept {
60 return j_ < other.j_;
61 }
62
63 constexpr reference operator*() const noexcept {
64 return reference(key_type({i_, j_}), data_[j_]);
65 }
66
67private:
68 size_type i_, j_;
69
70 Iter data_;
71};
72
73template <typename T, typename Iter>
76
77template <typename T, typename Iter> class dense_matrix_row_view {
78public:
79 using size_type = std::size_t;
80 using difference_type = std::ptrdiff_t;
81
82 using scalar_reference = std::iter_reference_t<Iter>;
83
84 using key_type = dr::index<>;
85 using map_type = T;
86
88
89 dense_matrix_row_view(Iter data, size_type row_idx, size_type size)
90 : data_(data), row_idx_(row_idx), size_(size) {}
91
92 scalar_reference operator[](size_type idx) { return data_[idx]; }
93
94 iterator begin() const { return iterator(data_, row_idx_, 0); }
95
96 iterator end() const { return iterator(data_, row_idx_, size_); }
97
98 size_type size() const noexcept { return size_; }
99
100 Iter data_;
101 size_type row_idx_;
102 size_type size_;
103};
104
105template <std::random_access_iterator Iter>
106dense_matrix_row_view(Iter, std::size_t, std::size_t)
108
109} // namespace dr::sp
Definition: index.hpp:34
Definition: iterator_adaptor.hpp:23
Definition: matrix_entry.hpp:20
Definition: matrix_entry.hpp:115
Definition: dense_row_view.hpp:13
Definition: dense_row_view.hpp:77