36template <
typename PadPolicy,
my_size_t... Perm>
50 "Permutation must match number of dimensions");
53 "Permutations must be unique");
56 "Max value of permutation pack must be less than number of dimensions");
59 "Min value of permutation pack is not equal to 0");
102 result[PermArray[i]] = i;
123 result[i] = PadPolicy::LogicalDims[PermArray[i]];
145 result[i - 1] = result[i] * PadPolicy::PhysicalDims[i];
167 result[i] = BaseStrides[PermArray[i]];
189 result[i - 1] = result[i] * LogicalDims[i];
217 return PermArray.
at(i);
229 return InversePermArray.
at(i);
241 return LogicalDims.
at(i);
253 return BaseStrides.
at(i);
265 return Strides.
at(i);
277 return LogicalStrides.
at(i);
301 logical_flat -= idx * s;
302 offset += idx * Strides[i];
316 if (indices[i] >= LogicalDims[i])
338 flat += indices[i] * Strides[i];
351 template <
typename... Indices>
354 static_assert(
sizeof...(Indices) ==
NumDims,
"Wrong number of indices");
390 logical_flat -= idx * s;
429 physical_flat -= idx * s;
475 physical_coords[i] = idx;
476 physical_flat -= idx * s;
483 indices[i] = physical_coords[PermArray[i]];
static void error(const T &msg)
Definition error_handler.h:30
Global configuration for the tesseract tensor library.
#define my_size_t
Size/index type used throughout the library.
Definition config.h:126
#define TESSERACT_CONDITIONAL_NOEXCEPT
Definition config.h:56
#define FORCE_INLINE
Hint the compiler to always inline a function.
Definition config.h:26
consteval my_size_t max_value()
Compile-time maximum of a non-type parameter pack.
Definition helper_traits.h:49
consteval my_size_t min_value()
Compile-time minimum of a non-type parameter pack.
Definition helper_traits.h:68
consteval bool all_unique()
Check if all values in a pack are unique.
Definition helper_traits.h:133
Fixed-size array container for embedded systems.
Definition array.h:21
constexpr T & at(my_size_t i)
Definition array.h:42
Definition strided_layout_constexpr.h:9
static constexpr bool unique
Definition strided_layout_constexpr.h:10
static constexpr my_size_t max_val
Definition strided_layout_constexpr.h:11
static constexpr my_size_t min_val
Definition strided_layout_constexpr.h:12
Compile-time strided layout with optional permutation.
Definition strided_layout_constexpr.h:38
static FORCE_INLINE constexpr my_size_t inverse_perm_array(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Get inverse permutation at dimension i.
Definition strided_layout_constexpr.h:227
static FORCE_INLINE constexpr void logical_flat_to_logical_coords(my_size_t logical_flat, my_size_t(&indices)[NumDims]) TESSERACT_CONDITIONAL_NOEXCEPT
Logical flat index to logical coordinates.
Definition strided_layout_constexpr.h:378
static FORCE_INLINE constexpr my_size_t logical_stride(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Get logical stride at dimension i (for flat index decomposition).
Definition strided_layout_constexpr.h:275
static constexpr bool IsPermProvided
Definition strided_layout_constexpr.h:42
static constexpr my_size_t NumDims
Definition strided_layout_constexpr.h:39
PadPolicy PadPolicyType
Definition strided_layout_constexpr.h:44
static FORCE_INLINE constexpr my_size_t num_dims() noexcept
Get number of dimensions.
Definition strided_layout_constexpr.h:206
static FORCE_INLINE constexpr my_size_t perm_array(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Get permutation at dimension i.
Definition strided_layout_constexpr.h:215
static FORCE_INLINE constexpr my_size_t logical_coords_to_physical_flat(Indices... indices) TESSERACT_CONDITIONAL_NOEXCEPT
Logical coordinates (variadic multi-index) to physical flat index (bounds-checked).
Definition strided_layout_constexpr.h:352
static constexpr my_size_t PhysicalSize
Definition strided_layout_constexpr.h:41
static FORCE_INLINE constexpr void physical_flat_to_physical_coords(my_size_t physical_flat, my_size_t(&indices)[NumDims]) TESSERACT_CONDITIONAL_NOEXCEPT
Physical flat index to physical coordinates.
Definition strided_layout_constexpr.h:416
static FORCE_INLINE constexpr my_size_t logical_flat_to_physical_flat(my_size_t logical_flat) TESSERACT_CONDITIONAL_NOEXCEPT
Definition strided_layout_constexpr.h:290
static FORCE_INLINE constexpr my_size_t stride(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Get physical stride at dimension i (with permutation applied).
Definition strided_layout_constexpr.h:263
static FORCE_INLINE constexpr bool is_logical_index_in_bounds(const my_size_t(&indices)[NumDims]) noexcept
Check if logical multi-index is in bounds.
Definition strided_layout_constexpr.h:312
static constexpr my_size_t LogicalSize
Definition strided_layout_constexpr.h:40
static FORCE_INLINE constexpr void physical_flat_to_logical_coords(my_size_t physical_flat, my_size_t(&indices)[NumDims]) TESSERACT_CONDITIONAL_NOEXCEPT
Physical flat index to logical coordinates.
Definition strided_layout_constexpr.h:463
static FORCE_INLINE constexpr my_size_t base_stride(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Get base stride at dimension i (unpermuted, for physical decomposition).
Definition strided_layout_constexpr.h:251
static FORCE_INLINE constexpr my_size_t logical_coords_to_physical_flat(const my_size_t(&indices)[NumDims]) TESSERACT_CONDITIONAL_NOEXCEPT
Logical coordinates (Array multi-index) to physical flat index (bounds-checked).
Definition strided_layout_constexpr.h:328
static FORCE_INLINE constexpr my_size_t logical_dim(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Get logical dimension at index i (with permutation applied).
Definition strided_layout_constexpr.h:239