pub struct Major<P: ?Sized, U> { /* private fields */ }Expand description
Stage-major slice composition with explicit scratch storage.
Major keeps ordinary scalar process() semantics but changes block() and
inplace() to process the pipeline in chunks through an explicit
intermediate buffer. Each stage sees a contiguous scratch slice before the
next stage runs.
Use this when:
- stages have useful
block()implementations that should see long slices - stage-major traversal is better for cache behavior than sample-by-sample traversal
- an intermediate type change makes plain inplace composition impossible
- preserving SIMD/autovectorization opportunities across slice stages matters
Avoid it when:
- stages are tiny and re-entering them per scratch chunk costs more than it saves
- the intermediate buffer would be large or awkward to materialize
Minoralready fits because the hot working set is tiny and per-sample stage locality dominates
In short: Major preserves stage-wise slice processing and pays for that
with explicit scratch.
Implementations§
Trait Implementations§
impl<P: Copy + ?Sized, U: Copy> Copy for Major<P, U>
Source§impl<X: Copy, U: Copy + Default, C0, C1, S0, S1, const N: usize> SplitInplace<X, (S0, S1)> for Major<(C0, C1), [U; N]>where
C0: SplitProcess<X, U, S0>,
C1: SplitProcess<U, X, S1>,
impl<X: Copy, U: Copy + Default, C0, C1, S0, S1, const N: usize> SplitInplace<X, (S0, S1)> for Major<(C0, C1), [U; N]>where
C0: SplitProcess<X, U, S0>,
C1: SplitProcess<U, X, S1>,
Source§impl<X: Copy, U: Copy + Default, Y, C0, C1, S0, S1, const N: usize> SplitProcess<X, Y, (S0, S1)> for Major<(C0, C1), [U; N]>where
C0: SplitProcess<X, U, S0>,
C1: SplitProcess<U, Y, S1>,
impl<X: Copy, U: Copy + Default, Y, C0, C1, S0, S1, const N: usize> SplitProcess<X, Y, (S0, S1)> for Major<(C0, C1), [U; N]>where
C0: SplitProcess<X, U, S0>,
C1: SplitProcess<U, Y, S1>,
Auto Trait Implementations§
impl<P, U> Freeze for Major<P, U>
impl<P, U> RefUnwindSafe for Major<P, U>
impl<P, U> Send for Major<P, U>
impl<P, U> Sync for Major<P, U>
impl<P, U> Unpin for Major<P, U>
impl<P, U> UnsafeUnpin for Major<P, U>where
P: UnsafeUnpin + ?Sized,
impl<P, U> UnwindSafe for Major<P, U>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<'a, X, S, T, const L: usize> SplitViewInplace<ViewMut<'a, X, FrameMajor, L>, S> for T
impl<'a, X, S, T, const L: usize> SplitViewInplace<ViewMut<'a, X, FrameMajor, L>, S> for T
Source§fn inplace_view(&self, state: &mut S, xy: ViewMut<'a, X, FrameMajor, L>)
fn inplace_view(&self, state: &mut S, xy: ViewMut<'a, X, FrameMajor, L>)
Process one typed view in place.
Source§impl<'a, 'b, X, Y, S, T, const L: usize> SplitViewProcess<View<'a, X, FrameMajor, L>, ViewMut<'b, Y, FrameMajor, L>, S> for T
impl<'a, 'b, X, Y, S, T, const L: usize> SplitViewProcess<View<'a, X, FrameMajor, L>, ViewMut<'b, Y, FrameMajor, L>, S> for T
Source§fn process_view(
&self,
state: &mut S,
x: View<'a, X, FrameMajor, L>,
y: ViewMut<'b, Y, FrameMajor, L>,
)
fn process_view( &self, state: &mut S, x: View<'a, X, FrameMajor, L>, y: ViewMut<'b, Y, FrameMajor, L>, )
Process one typed input view into one typed output view.