Skip to main content

OutputBound

Enum OutputBound 

Source
#[non_exhaustive]
pub enum OutputBound { OneToOne, AtMost { max: usize, }, Unbounded, }
Expand description

Upper bound on how many outputs an operation produces per input element.

Declared so a caller can size a destination buffer before the operation runs. That is what makes a scan-then-scatter implementation possible: with a per-element bound, exclusive-prefix-summing the per-element counts gives every worker a disjoint write offset, so no lock, no atomic counter, and no dynamically growing vector is needed on the hot path.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

OneToOne

Exactly one output per input. The output index equals the input index.

§

AtMost

At most max outputs per input element.

Fields

§max: usize

Inclusive upper bound per element.

§

Unbounded

The output count cannot be bounded before running.

Callers must fall back to a growable collection. Kept representable and deliberately unpleasant so an operation that could declare a bound is not tempted to shrug.

Implementations§

Source§

impl OutputBound

Source

pub const fn upper_bound(self, elements: usize) -> Option<usize>

Worst-case total outputs for elements inputs, or None if unbounded or the product would overflow.

Source

pub const fn is_preallocatable(self, elements: usize) -> bool

Whether a caller can preallocate an exact destination for elements.

Source

pub fn write_offsets(self, counts: &[usize]) -> Option<(Vec<usize>, usize)>

Exclusive prefix sum of counts, plus the total.

This is the scan that turns “how many outputs does each element make?” into “where does each element write?”. Returns None if any count exceeds this bound (a provider contract violation) or the total overflows. Allocation is the caller’s single result buffer; the scan itself is a running total with no per-element allocation.

Trait Implementations§

Source§

impl Clone for OutputBound

Source§

fn clone(&self) -> Self

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 Copy for OutputBound

Source§

impl Debug for OutputBound

Source§

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

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

impl Eq for OutputBound

Source§

impl Hash for OutputBound

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for OutputBound

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for OutputBound

Auto Trait Implementations§

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<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.