From Jason Turner

[linalg.conj.conjugatedaccessor]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpzo06a_vf/{from.md → to.md} +76 -0
tmp/tmpzo06a_vf/{from.md → to.md} RENAMED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class template `conjugated_accessor` <a id="linalg.conj.conjugatedaccessor">[[linalg.conj.conjugatedaccessor]]</a>
2
+
3
+ The class template `conjugated_accessor` is an `mdspan` accessor policy
4
+ which upon access produces conjugate elements. It is part of the
5
+ implementation of `conjugated` [[linalg.conj.conjugated]].
6
+
7
+ ``` cpp
8
+ namespace std::linalg {
9
+ template<class NestedAccessor>
10
+ class conjugated_accessor {
11
+ public:
12
+ using element_type =
13
+ const decltype(conj-if-needed(declval<NestedAccessor::element_type>()));
14
+ using reference = remove_const_t<element_type>;
15
+ using data_handle_type = NestedAccessor::data_handle_type;
16
+ using offset_policy = conjugated_accessor<NestedAccessor::offset_policy>;
17
+
18
+ constexpr conjugated_accessor() = default;
19
+ constexpr conjugated_accessor(const NestedAccessor& acc);
20
+ template<class OtherNestedAccessor>
21
+ explicit(!is_convertible_v<OtherNestedAccessor, NestedAccessor>)
22
+ constexpr conjugated_accessor(const conjugated_accessor<OtherNestedAccessor>& other);
23
+
24
+ constexpr reference access(data_handle_type p, size_t i) const;
25
+
26
+ constexpr typename offset_policy::data_handle_type
27
+ offset(data_handle_type p, size_t i) const;
28
+
29
+ constexpr const NestedAccessor& nested_accessor() const noexcept { return nested-accessor_; }
30
+
31
+ private:
32
+ NestedAccessor nested-accessor_{}; // exposition only
33
+ };
34
+ }
35
+ ```
36
+
37
+ *Mandates:*
38
+
39
+ - `element_type` is valid and denotes a type,
40
+ - `is_copy_constructible_v<reference>` is `true`,
41
+ - `is_reference_v<element_type>` is `false`, and
42
+ - `NestedAccessor` meets the accessor policy requirements
43
+ [[mdspan.accessor.reqmts]].
44
+
45
+ ``` cpp
46
+ constexpr conjugated_accessor(const NestedAccessor& acc);
47
+ ```
48
+
49
+ *Effects:* Direct-non-list-initializes *nested-accessor\_* with `acc`.
50
+
51
+ ``` cpp
52
+ template<class OtherNestedAccessor>
53
+ explicit(!is_convertible_v<OtherNestedAccessor, NestedAccessor>)
54
+ constexpr conjugated_accessor(const conjugated_accessor<OtherNestedAccessor>& other);
55
+ ```
56
+
57
+ *Constraints:*
58
+ `is_constructible_v<NestedAccessor, const OtherNestedAccessor&>` is
59
+ `true`.
60
+
61
+ *Effects:* Direct-non-list-initializes *nested-accessor\_* with
62
+ `other.nested_accessor()`.
63
+
64
+ ``` cpp
65
+ constexpr reference access(data_handle_type p, size_t i) const;
66
+ ```
67
+
68
+ *Returns:*
69
+ *`conj-if-needed`*`(NestedAccessor::element_type(`*`nested-accessor_`*`.access(p, i)))`
70
+
71
+ ``` cpp
72
+ constexpr typename offset_policy::data_handle_type offset(data_handle_type p, size_t i) const;
73
+ ```
74
+
75
+ *Returns:* *`nested-accessor_`*`.offset(p, i)`
76
+