tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
accessor_scaled.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_SCALED_HPP
5#define TETL_LINALG_ACCESSOR_SCALED_HPP
6
7#include <etl/_linalg/scaled_scalar.hpp>
8#include <etl/_type_traits/add_const.hpp>
9#include <etl/_type_traits/is_copy_constructible.hpp>
10
11namespace etl::linalg {
12
13/// \ingroup linalg
14template <typename ScalingFactor, typename Accessor>
15 requires(is_copy_constructible_v<typename Accessor::reference>)
17 using reference
18 = detail::scaled_scalar<ScalingFactor, typename Accessor::reference, typename Accessor::element_type>;
19 using element_type = add_const_t<typename reference::value_type>;
20 using data_handle_type = typename Accessor::data_handle_type;
21 using offset_policy = accessor_scaled<ScalingFactor, typename Accessor::offset_policy>;
22
23 constexpr accessor_scaled(ScalingFactor const& s, Accessor const& a)
24 : _scalingFactor{s}
25 , _nestedAccessor{a}
26 {
27 }
28
29 [[nodiscard]] constexpr auto access(data_handle_type p, size_t i) const noexcept -> reference
30 {
31 return reference(_scalingFactor, _nestedAccessor.access(p, i));
32 }
33
34 [[nodiscard]] constexpr auto offset(data_handle_type p, size_t i) const noexcept ->
35 typename offset_policy::data_handle_type
36 {
37 return _nestedAccessor.offset(p, i);
38 }
39
40 [[nodiscard]] constexpr auto scaling_factor() const -> ScalingFactor
41 {
42 return _scalingFactor;
43 }
44
45 [[nodiscard]] constexpr auto nested_accessor() const -> Accessor
46 {
47 return _nestedAccessor;
48 }
49
50private:
51 ScalingFactor _scalingFactor;
52 Accessor _nestedAccessor;
53};
54
55} // namespace etl::linalg
56
57#endif // TETL_LINALG_ACCESSOR_SCALED_HPP
Definition accessor_conjugate.hpp:13
Definition adjacent_find.hpp:9
Definition accessor_scaled.hpp:16
constexpr auto nested_accessor() const -> Accessor
Definition accessor_scaled.hpp:45
constexpr accessor_scaled(ScalingFactor const &s, Accessor const &a)
Definition accessor_scaled.hpp:23
constexpr auto access(data_handle_type p, size_t i) const noexcept -> reference
Definition accessor_scaled.hpp:29
constexpr auto scaling_factor() const -> ScalingFactor
Definition accessor_scaled.hpp:40
constexpr auto offset(data_handle_type p, size_t i) const noexcept -> typename offset_policy::data_handle_type
Definition accessor_scaled.hpp:34