Skip to main content

Major

Struct Major 

Source
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
  • Minor already 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§

Source§

impl<P, U> Major<P, U>

Source

pub const fn new(inner: P) -> Self

Create a Major wrapper around an existing composition.

Source

pub fn into_inner(self) -> P

Consume the wrapper and return the inner composition.

Source

pub fn inner(&self) -> &P

Borrow the wrapped composition.

Trait Implementations§

Source§

impl<P: Clone + ?Sized, U: Clone> Clone for Major<P, U>

Source§

fn clone(&self) -> Major<P, U>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<P: Copy + ?Sized, U: Copy> Copy for Major<P, U>

Source§

impl<P: Debug + ?Sized, U: Debug> Debug for Major<P, U>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<P: Default + ?Sized, U: Default> Default for Major<P, U>

Source§

fn default() -> Major<P, U>

Returns the “default value” for a type. Read more
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>,

Source§

fn inplace(&self, state: &mut (S0, S1), xy: &mut [X])

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>,

Source§

fn process(&self, state: &mut (S0, S1), x: X) -> Y

Process an input into an output Read more
Source§

fn block(&self, state: &mut (S0, S1), x: &[X], y: &mut [Y])

Process a block of inputs Read more

Auto Trait Implementations§

§

impl<P, U> Freeze for Major<P, U>
where P: Freeze + ?Sized,

§

impl<P, U> RefUnwindSafe for Major<P, U>

§

impl<P, U> Send for Major<P, U>
where P: Send + ?Sized, U: Send,

§

impl<P, U> Sync for Major<P, U>
where P: Sync + ?Sized, U: Sync,

§

impl<P, U> Unpin for Major<P, U>
where P: Unpin + ?Sized, U: Unpin,

§

impl<P, U> UnsafeUnpin for Major<P, U>
where P: UnsafeUnpin + ?Sized,

§

impl<P, U> UnwindSafe for Major<P, U>
where P: UnwindSafe + ?Sized, U: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'a, X, S, T, const L: usize> SplitViewInplace<ViewMut<'a, X, FrameMajor, L>, S> for T
where X: Copy, T: SplitInplace<X, S>, S: ?Sized,

Source§

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
where X: Copy, T: SplitProcess<X, Y, S>, S: ?Sized,

Source§

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.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.