tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
accessor_conjugate.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2023 Tobias Hienzsch
3
4#ifndef TETL_LINALG_ACCESSOR_CONJUGATE_HPP
5#define TETL_LINALG_ACCESSOR_CONJUGATE_HPP
6
7#include <etl/_linalg/conjugated_scalar.hpp>
8#include <etl/_type_traits/add_const.hpp>
9#include <etl/_type_traits/conditional.hpp>
10#include <etl/_type_traits/is_arithmetic.hpp>
11#include <etl/_type_traits/remove_cv.hpp>
12
13namespace etl::linalg {
14
15/// \ingroup linalg
16template <typename Accessor>
18 using reference = conditional_t<
19 is_arithmetic_v<remove_cv_t<typename Accessor::element_type>>,
20 typename Accessor::reference,
21 detail::conjugated_scalar<typename Accessor::reference, remove_cv_t<typename Accessor::element_type>>
22 >;
23 using element_type = add_const_t<conditional_t<
24 is_arithmetic_v<remove_cv_t<typename Accessor::element_type>>,
25 typename Accessor::element_type,
26 typename reference::value_type
27 >>;
28 using data_handle_type = typename Accessor::data_handle_type;
29 using offset_policy = conditional_t<
30 is_arithmetic_v<remove_cv_t<typename Accessor::element_type>>,
31 typename Accessor::offset_policy,
32 accessor_conjugate<typename Accessor::offset_policy>
33 >;
34
35 constexpr accessor_conjugate(Accessor a)
36 : _nestedAccessor(a)
37 {
38 }
39
40 [[nodiscard]] constexpr auto
41 access(data_handle_type p, size_t i) const noexcept(noexcept(reference(_nestedAccessor.access(p, i)))) -> reference
42 {
43 return reference(_nestedAccessor.access(p, i));
44 }
45
46 [[nodiscard]] constexpr auto
47 offset(data_handle_type p, size_t i) const noexcept(noexcept(_nestedAccessor.offset(p, i))) ->
48 typename offset_policy::data_handle_type
49 {
50 _nestedAccessor.offset(p, i);
51 }
52
53 [[nodiscard]] constexpr auto nested_accessor() const -> Accessor
54 {
55 return _nestedAccessor;
56 }
57
58private:
59 Accessor _nestedAccessor;
60};
61
62} // namespace etl::linalg
63
64#endif // TETL_LINALG_ACCESSOR_CONJUGATE_HPP
Definition accessor_conjugate.hpp:13
Definition adjacent_find.hpp:9
Definition accessor_conjugate.hpp:17
constexpr auto nested_accessor() const -> Accessor
Definition accessor_conjugate.hpp:53
constexpr accessor_conjugate(Accessor a)
Definition accessor_conjugate.hpp:35
constexpr auto offset(data_handle_type p, size_t i) const noexcept(noexcept(_nestedAccessor.offset(p, i))) -> typename offset_policy::data_handle_type
Definition accessor_conjugate.hpp:47
constexpr auto access(data_handle_type p, size_t i) const noexcept(noexcept(reference(_nestedAccessor.access(p, i)))) -> reference
Definition accessor_conjugate.hpp:41