Skip to main content

Minor

Struct Minor 

Source
pub struct Minor<C: ?Sized, U> { /* private fields */ }
Expand description

Processor-minor, data-major serial composition.

Minor changes only the loop nest used by block() and inplace(). Scalar process() and the signal semantics are unchanged.

Without Minor, tuple and array composition are stage-major: one stage runs over the whole slice and then the next stage runs over the whole slice. With Minor, the outer loop is over samples and each sample is pushed through the wrapped stages before moving to the next sample.

Use this when:

  • the wrapped stages are small and fine-grained
  • per-stage state/configuration is small enough to keep hot while stepping sample by sample
  • there is little value in preserving each stage’s own block()/inplace() specialization
  • tuple composition must cross an intermediate type where the downstream stage is not SplitInplace over that type

Avoid this when:

  • a stage has a meaningful block() specialization that benefits from seeing a long contiguous slice
  • SIMD or autovectorization needs stage-major contiguous data
  • cache behavior is dominated by streaming through data rather than by keeping tiny stage state hot
  • an explicit scratch buffer via Major is a better fit

In short: Minor trades stage-wise streaming locality for per-sample stage locality. It is often good for tiny recursive stages, but it can be the wrong choice for stages whose slice path exists to improve cache use or SIMD.

Implementations§

Source§

impl<C, U> Minor<C, U>

Source

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

Create a Minor wrapper around an existing composition.

Source

pub fn into_inner(self) -> C

Consume the wrapper and return the inner composition.

Source

pub fn inner(&self) -> &C

Borrow the wrapped composition.

Trait Implementations§

Source§

impl<C: Clone + ?Sized, U: Clone> Clone for Minor<C, U>

Source§

fn clone(&self) -> Minor<C, 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<C: Copy + ?Sized, U: Copy> Copy for Minor<C, U>

Source§

impl<C: Debug + ?Sized, U: Debug> Debug for Minor<C, U>

Source§

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

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

impl<C: Default + ?Sized, U: Default> Default for Minor<C, U>

Source§

fn default() -> Minor<C, U>

Returns the “default value” for a type. Read more
Source§

impl<X, U, C, S> SplitInplace<X, S> for Minor<C, U>
where X: Copy, Self: SplitProcess<X, X, S>,

Source§

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

Source§

impl<X: Copy, C, S> SplitProcess<X, X, [S]> for Minor<[C], X>
where C: SplitProcess<X, X, S>,

A chain of multiple small filters of the same type

Source§

fn process(&self, state: &mut [S], x: X) -> X

Process an input into an output Read more
Source§

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

Process a block of inputs Read more
Source§

impl<X: Copy, U: Copy, Y, C0, C1, S0, S1> SplitProcess<X, Y, (S0, S1)> for Minor<(C0, C1), U>
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 S, x: &[X], y: &mut [Y])

Process a block of inputs Read more
Source§

impl<X: Copy, Y: Copy, C, S, const N: usize> SplitProcess<X, Y, [S; N]> for Minor<[C; N], Y>
where C: SplitProcess<X, Y, S> + SplitProcess<Y, Y, S>,

A chain of multiple small filters of the same type

Source§

fn process(&self, state: &mut [S; N], x: X) -> Y

Process an input into an output Read more
Source§

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

Process a block of inputs Read more

Auto Trait Implementations§

§

impl<C, U> Freeze for Minor<C, U>
where C: Freeze + ?Sized,

§

impl<C, U> RefUnwindSafe for Minor<C, U>

§

impl<C, U> Send for Minor<C, U>
where C: Send + ?Sized, U: Send,

§

impl<C, U> Sync for Minor<C, U>
where C: Sync + ?Sized, U: Sync,

§

impl<C, U> Unpin for Minor<C, U>
where C: Unpin + ?Sized, U: Unpin,

§

impl<C, U> UnsafeUnpin for Minor<C, U>
where C: UnsafeUnpin + ?Sized,

§

impl<C, U> UnwindSafe for Minor<C, U>
where C: 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.