|
tesseract++ 0.0.1
N-dimensional tensor library for embedded systems
|
Compile-time strided layout with optional permutation. More...
#include <strided_layout_constexpr.h>
Public Types | |
| using | PadPolicyType = PadPolicy |
Static Public Member Functions | |
| static FORCE_INLINE constexpr my_size_t | num_dims () noexcept |
| Get number of dimensions. | |
| static FORCE_INLINE constexpr my_size_t | perm_array (my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT |
| Get permutation at dimension i. | |
| static FORCE_INLINE constexpr my_size_t | inverse_perm_array (my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT |
| Get inverse permutation at dimension i. | |
| 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). | |
| 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). | |
| static FORCE_INLINE constexpr my_size_t | stride (my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT |
| Get physical stride at dimension i (with permutation applied). | |
| 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). | |
| static FORCE_INLINE constexpr my_size_t | logical_flat_to_physical_flat (my_size_t logical_flat) TESSERACT_CONDITIONAL_NOEXCEPT |
| 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. | |
| 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). | |
| template<typename... Indices> | |
| 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). | |
| 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. | |
| 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. | |
| 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. | |
Static Public Attributes | |
| static constexpr my_size_t | NumDims = PadPolicy::NumDims |
| static constexpr my_size_t | LogicalSize = PadPolicy::LogicalSize |
| static constexpr my_size_t | PhysicalSize = PadPolicy::PhysicalSize |
| static constexpr bool | IsPermProvided = sizeof...(Perm) > 0 |
Compile-time strided layout with optional permutation.
| PadPolicy | Padding PadPolicy (e.g., SimdPaddingPadPolicy<T, Dims...>) |
| Perm | Optional permutation indices (empty = identity) |
All computations happen at compile-time. Zero runtime overhead.
Usage: StridedLayoutConstExpr<PadPolicy> // no permutation (identity) StridedLayoutConstExpr<PadPolicy, 1, 0> // transposed StridedLayoutConstExpr<PadPolicy, 2, 0, 1> // custom permutation
| using StridedLayoutConstExpr< PadPolicy, Perm >::PadPolicyType = PadPolicy |
|
inlinestaticconstexpr |
Get base stride at dimension i (unpermuted, for physical decomposition).
| i |
| if | i >= NumDims |

|
inlinestaticconstexpr |
Get inverse permutation at dimension i.
| i |
| if | i >= NumDims |

|
inlinestaticconstexprnoexcept |
Check if logical multi-index is in bounds.
|
inlinestaticconstexpr |
Logical coordinates (Array multi-index) to physical flat index (bounds-checked).
| if | any index is out of bounds for its logical dimension |

|
inlinestaticconstexpr |
Logical coordinates (variadic multi-index) to physical flat index (bounds-checked).
| Indices |
| indices |
| if | any index is out of bounds for its logical dimension |

|
inlinestaticconstexpr |
Get logical dimension at index i (with permutation applied).
| i |
| if | i >= NumDims |

|
inlinestaticconstexpr |
Logical flat index to logical coordinates.
Decomposes a flat index into multi-dimensional coordinates using LogicalStrides (row-major order in logical space).
Input must be in range [0, LogicalSize).
Example: 3x4 matrix, logical flat 7: LogicalStrides = [4, 1] 7 / 4 = 1, 7 - 4 = 3 3 / 1 = 3 → coords (1, 3)
| logical_flat | Input flat index in logical space |
| indices | Output parameter for multi-dimensional coordinates |
| if | logical_flat is out of bounds for LogicalSize |

|
inlinestaticconstexpr |
Convert logical flat index to physical offset.
Uses forward iteration + subtraction to minimize divisions. Only N divisions instead of 2N with reverse + modulo.

|
inlinestaticconstexpr |
Get logical stride at dimension i (for flat index decomposition).
| i |
| if | i >= NumDims |

|
inlinestaticconstexprnoexcept |
Get number of dimensions.
|
inlinestaticconstexpr |
Get permutation at dimension i.
| i |
| if | i >= NumDims |

|
inlinestaticconstexpr |
Physical flat index to logical coordinates.
Decomposes a flat index into physical coordinates using BaseStrides, then applies permutation to get logical coordinates.
Input must be in range [0, PhysicalSize).
WARNING: If physical_flat is a padding location, the returned logical coords will be out-of-bounds (coord >= LogicalDims[i]).
Example: 2x3 matrix padded to 2x4, transposed [1,0], physical flat 5: BaseStrides = [4, 1], PermArray = [1, 0] Step 1 - decompose with BaseStrides: 5 / 4 = 1, 5 - 4 = 1 1 / 1 = 1 → physical coords (1, 1) Step 2 - apply permutation: logical[0] = physical[PermArray[0]] = physical[1] = 1 logical[1] = physical[PermArray[1]] = physical[0] = 1 → logical coords (1, 1)
| physical_flat | |
| indices | Output parameter for logical multi-dimensional coordinates |
| if | physical_flat is out of bounds for PhysicalSize |

|
inlinestaticconstexpr |
Physical flat index to physical coordinates.
Decomposes a flat index into multi-dimensional coordinates using BaseStrides (row-major order in physical memory).
Input must be in range [0, PhysicalSize).
WARNING: If physical_flat is a padding location, the returned coords will also be in the padding area.
Example: 2x3 matrix padded to 2x4, physical flat 7: BaseStrides = [4, 1] 7 / 4 = 1, 7 - 4 = 3 3 / 1 = 3 → coords (1, 3) ← column 3 is padding (LogicalDims[1] = 3)
| physical_flat | |
| indices | Output parameter for multi-dimensional coordinates |
| if | physical_flat is out of bounds for PhysicalSize |

|
inlinestaticconstexpr |
Get physical stride at dimension i (with permutation applied).
| i |
| if | i >= NumDims |

|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |