10#include <stratax/core/dtypes/Concepts.hpp>
11#include <stratax/core/ArrayBase.hpp>
12#include <stratax/core/Shape.hpp>
13#include <stratax/indexing/Indexing.hpp>
15namespace stratax::container {
124 template<
typename... Rest>
125 requires ((std::is_integral_v<Rest>) && ...)
128 std::array<
size_type,
sizeof...(Rest) + 1> indices{
133 return (*
this)[indexing::offset(this->
strides(), indices)];
146 template<
typename... Rest>
147 requires ((std::is_integral_v<Rest>) && ...)
150 std::array<
size_type,
sizeof...(Rest) + 1> indices{
155 return (*
this)[indexing::offset(this->
strides(), indices)];
189 template<
typename... Rest>
190 requires ((std::is_integral_v<Rest>) && ...)
214 template<
typename... Rest>
215 requires ((std::is_integral_v<Rest>) && ...)
Arbitrary-rank owning array of numeric values.
typename core::ArrayBase< T >::difference_type difference_type
Signed type used for checked indices and iterator distances.
reference at(difference_type first, Rest... rest)
Returns an element using checked variadic indices.
void swap(Tensor &other) noexcept
Exchanges storage and layout metadata with other.
typename core::ArrayBase< T >::pointer pointer
Mutable element pointer type.
Tensor(const core::Shape &shape, const_reference value)
Constructs a tensor filled with copies of value.
typename core::ArrayBase< T >::reverse_iterator reverse_iterator
Mutable reverse iterator type.
typename core::ArrayBase< T >::reference reference
Mutable element reference type.
typename core::ArrayBase< T >::const_pointer const_pointer
Read-only element pointer type.
reference at(const std::vector< difference_type > &raw_indices)
Returns an element using checked vector-based indices.
Tensor()
Constructs an empty rank-one tensor with shape {0}.
typename core::ArrayBase< T >::value_type value_type
Stored element type inherited from ArrayBase.
const_reference operator()(size_type first, Rest... rest) const
Returns an element using unchecked variadic indices.
typename core::ArrayBase< T >::const_reverse_iterator const_reverse_iterator
Read-only reverse iterator type.
friend void swap(Tensor &lhs, Tensor &rhs) noexcept
Exchanges two tensors using argument-dependent lookup.
const_reference operator()(const std::vector< size_type > &indices) const
Returns an element using unchecked vector-based indices.
typename core::ArrayBase< T >::size_type size_type
Unsigned type used for element counts and normalized indices.
reference operator()(size_type first, Rest... rest)
Returns an element using unchecked variadic indices.
typename core::ArrayBase< T >::iterator iterator
Mutable contiguous random-access iterator type.
typename core::ArrayBase< T >::const_iterator const_iterator
Read-only contiguous random-access iterator type.
typename core::ArrayBase< T >::const_reference const_reference
Read-only element reference type.
const_reference at(difference_type first, Rest... rest) const
Returns an element using checked variadic indices.
reference operator()(const std::vector< size_type > &indices)
Returns an element using unchecked vector-based indices.
Tensor(const core::Shape &shape)
Constructs value-initialized storage for an arbitrary shape.
const_reference at(const std::vector< difference_type > &raw_indices) const
Returns an element using checked vector-based indices.
Shared owning storage and layout base for Stratax array containers.
typename Buffer< T >::value_type value_type
Stored element type.
typename Buffer< value_type >::pointer pointer
Mutable element pointer type.
typename Buffer< value_type >::const_reference const_reference
Read-only element reference type.
ArrayBase(const Shape &shape)
Constructs value-initialized storage for shape.
const Shape & shape() const noexcept
Returns the logical shape metadata.
typename Buffer< value_type >::reverse_iterator reverse_iterator
Mutable reverse iterator type.
typename Buffer< value_type >::const_reverse_iterator const_reverse_iterator
Read-only reverse iterator type.
typename Buffer< value_type >::const_pointer const_pointer
Read-only element pointer type.
size_type normalized_flat_offset(const IndexContainer &raw_indices) const
Converts checked signed multidimensional indices to a flat offset.
typename Buffer< value_type >::difference_type difference_type
Signed type used for checked indices and iterator distances.
typename Buffer< value_type >::iterator iterator
Mutable contiguous random-access iterator type.
typename Buffer< value_type >::const_iterator const_iterator
Read-only contiguous random-access iterator type.
typename Buffer< value_type >::reference reference
Mutable element reference type.
const Shape & strides() const noexcept
Returns the row-major stride metadata.
void swap(ArrayBase &other) noexcept
Exchanges storage and layout metadata with other.
typename Buffer< value_type >::size_type size_type
Unsigned type used for element counts and indices.
Stores the dimensions of a multidimensional array.