pub enum Monoid {
Sum,
Prod,
Max,
Min,
}Expand description
An identity and an associative operation, used by everything that merges values.
Variants§
Sum
acc + val, identity 0.
Prod
acc * val, identity 1.
Max
max(acc, val), identity the lowest value of the element.
Min
min(acc, val), identity the highest value of the element.
Implementations§
Source§impl Monoid
impl Monoid
Sourcepub fn identity<E: Numeric>(monoid: Monoid) -> E
pub fn identity<E: Numeric>(monoid: Monoid) -> E
This monoid’s identity element; a masked read past an operand’s extent must return it.
Sourcepub fn reduce<E: Numeric, N: Size>(
v: Vector<E, N>,
width: usize,
monoid: Monoid,
) -> E
pub fn reduce<E: Numeric, N: Size>( v: Vector<E, N>, width: usize, monoid: Monoid, ) -> E
A vector’s first width components combined into one value.
Sourcepub fn __expand_identity<E: Numeric>(
scope: &Scope,
monoid: Monoid,
) -> <E as CubeType>::ExpandType
pub fn __expand_identity<E: Numeric>( scope: &Scope, monoid: Monoid, ) -> <E as CubeType>::ExpandType
This monoid’s identity element; a masked read past an operand’s extent must return it.
Sourcepub fn __expand_reduce<E: Numeric, N: Size>(
scope: &Scope,
v: <Vector<E, N> as CubeType>::ExpandType,
width: usize,
monoid: Monoid,
) -> <E as CubeType>::ExpandType
pub fn __expand_reduce<E: Numeric, N: Size>( scope: &Scope, v: <Vector<E, N> as CubeType>::ExpandType, width: usize, monoid: Monoid, ) -> <E as CubeType>::ExpandType
A vector’s first width components combined into one value.
Source§impl Monoid
monoid.combine(a, b), hand-written since a comptime-only type has no {Name}Expand.
impl Monoid
monoid.combine(a, b), hand-written since a comptime-only type has no {Name}Expand.
pub fn combine<T: Carrier>(self, lhs: T, rhs: T) -> T
pub fn __expand_combine_method<T: Carrier>( self, scope: &Scope, lhs: T::ExpandType, rhs: T::ExpandType, ) -> T::ExpandType
Trait Implementations§
Source§impl AsMutExpand for Monoid
impl AsMutExpand for Monoid
fn __expand_ref_mut_method(&mut self, _scope: &Scope) -> &mut Self
fn __expand_as_mut_method(&mut self, scope: &Scope) -> &mut T
Source§impl AsRefExpand for Monoid
impl AsRefExpand for Monoid
fn __expand_ref_method(&self, _scope: &Scope) -> &Self
fn __expand_as_ref_method(&self, scope: &Scope) -> &T
impl Copy for Monoid
Source§impl CubeDebug for Monoid
impl CubeDebug for Monoid
Source§fn set_debug_name(&self, scope: &Scope, name: &'static str)
fn set_debug_name(&self, scope: &Scope, name: &'static str)
Set the debug name of this type’s expansion. Should do nothing for types that don’t appear
at runtime
impl Eq for Monoid
Source§impl ExpandTypeClone for Monoid
impl ExpandTypeClone for Monoid
Source§fn clone_unchecked(&self) -> Self
fn clone_unchecked(&self) -> Self
Unchecked clone that only clones the conceptual runtime value. Should only be used in cases
where each copy is used in a mutually exclusive branch (i.e. match, runtime enums). This is
intentionally separated from Rust’s
Clone semantics and should only be used for the
conceptual expand values, never real data. Using two values in the same branch is undefined
behaviour.Source§impl IntoExpand for Monoid
impl IntoExpand for Monoid
impl StructuralPartialEq for Monoid
Auto Trait Implementations§
impl Freeze for Monoid
impl RefUnwindSafe for Monoid
impl Send for Monoid
impl Sync for Monoid
impl Unpin for Monoid
impl UnsafeUnpin for Monoid
impl UnwindSafe for Monoid
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneExpand for Twhere
T: Clone,
impl<T> CloneExpand for Twhere
T: Clone,
fn __expand_clone_method(&self, _: &Scope) -> T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> CompilationArg for T
impl<T> CompilationArg for T
Source§fn dynamic_cast<Arg>(&self) -> Argwhere
Arg: CompilationArg,
fn dynamic_cast<Arg>(&self) -> Argwhere
Arg: CompilationArg,
Compilation args should be the same even with different element types. However, it isn’t
possible to enforce it with the type system. So, we make the compilation args serializable
and dynamically cast them. Read more
impl<T> CubeComptime for T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<K, Q> Equivalent<Q> for K
impl<K, Q> Equivalent<Q> for K
Source§fn equivalent(&self, key: &Q) -> bool
fn equivalent(&self, key: &Q) -> bool
Compare self to
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more