4#ifndef TETL_LINALG_ACCESSOR_SCALED_HPP
5#define TETL_LINALG_ACCESSOR_SCALED_HPP
7#include <etl/_linalg/scaled_scalar.hpp>
8#include <etl/_type_traits/add_const.hpp>
9#include <etl/_type_traits/is_copy_constructible.hpp>
14template <
typename ScalingFactor,
typename Accessor>
15 requires(is_copy_constructible_v<
typename Accessor::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>;
29 [[
nodiscard]]
constexpr auto access(data_handle_type p, size_t i)
const noexcept -> reference
31 return reference(_scalingFactor, _nestedAccessor.access(p, i));
34 [[
nodiscard]]
constexpr auto offset(data_handle_type p, size_t i)
const noexcept ->
37 return _nestedAccessor.offset(p, i);
42 return _scalingFactor;
47 return _nestedAccessor;
51 ScalingFactor _scalingFactor;
52 Accessor _nestedAccessor;
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