C++ named requirements: AccessorPolicy (since C++23) (original) (raw)

AccessorPolicy defines how elements are accessed from a given data handle to such elements and an index. It is used as a policy in std::mdspan to specify the access to a reference of an element using an underlying 1D index.

Contents

[edit] Requirements

A type A satisfies AccessorPolicy if it models copyable, and the following are true:

And, given the following types and values, the expressions shown in the table below are valid and have the indicated semantics:

[edit] Legend

Type Definition
A an accessor policy type
OP an offset policy type
Value Definition
a a value of type (possibly const-qualified) A
p a value of type (possibly const-qualified) A::data_handle_type
i, j, n values of type std::size_t

[edit] Member types

Type Definition Requirements
A::element_type unspecified A complete object type that is not an abstract class type
A::data_handle_type unspecified[1] Models copyable The following values are all true: std::is_nothrow_move_constructible_v <typename A::data_handle_type> std::is_nothrow_move_assignable_v <typename A::data_handle_type> std::is_nothrow_swappable_v <typename A::data_handle_type>
A::reference unspecified[2] std::common_reference_with<typename A::reference&&, typename A::element_type&> is true
A::offset_policy OP Satisfies the requirements of AccessorPolicy std::constructible_from<OP, const A&> is true typename OP​::​element_type and typename A​::​element_type are the same type
  1. Not required to be element_type*.
  2. Not required to be element_type&.

[edit] Member functions

Expression Return type Semantics
a.access(p, i) typename A::reference The expression is equality-preserving.
a.offset(p, i) typename A::offset_policy ::data_handle_type A value q such that for b being A::offset_policy(a), and any integer n for which [​0​, n) is an accessible range (see below) of p and a. [​0​, n - i) is an accessible range of q and b; and b.access(q, j) provides access to the same element as a.access(p, i + j), for every j in the range [​0​, n - i). The expression is equality-preserving.

[edit] Accessible range

A range of indices [​0​, N) is an accessible range of a given data handle and an accessor if, for each index in the range, the access member function produces a valid reference to an element.

[edit] Standard library

The following standard library types satisfy AccessorPolicy requirements:

| | a type for indexed access to elements of mdspan (class template) [edit] | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | | a type for aligned access to elements of mdspan (class template) [edit] | | Defined in namespace std::linalg | | | std::mdspan accessor policy whose reference represents the product of a scaling factor that is fixed and its nested std::mdspan accessor's reference (class template) [edit] | | | std::mdspan accessor policy whose reference represents the complex conjugate of its nested std::mdspan accessor's reference (class template) [edit] |