hermes_simd_core/tensor/layout.rs
1//! Layout marker ZSTs and the sealed `Layout` trait.
2//!
3//! Only [`RowMajor`] and [`ColMajor`] implement `Layout`; the `crate::private::Sealed`
4//! supertrait prevents external implementations.
5
6/// Row-major (C-order) layout marker ZST.
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub struct RowMajor;
9
10/// Column-major (Fortran-order) layout marker ZST.
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub struct ColMajor;
13
14/// Sealed marker trait for tensor layout ZSTs.
15///
16/// External crates cannot implement this trait — the `crate::private::Sealed` supertrait
17/// is `pub(crate)` only. Only `RowMajor` and `ColMajor` satisfy `Layout`.
18/// `TensorView<_, _, _, L>` requires `L: Layout`, preventing accidental use of
19/// arbitrary unit types as layout parameters.
20pub trait Layout: crate::private::Sealed + Copy + 'static {}
21
22impl crate::private::Sealed for RowMajor {}
23impl crate::private::Sealed for ColMajor {}
24impl Layout for RowMajor {}
25impl Layout for ColMajor {}