Skip to main content

Value

Enum Value 

Source
pub enum Value<D: Dialect> {
    Constant(ConstantValue, Item<D>),
    Value {
        id: Id,
        item: Item<D>,
    },
    Tmp {
        id: Id,
        item: Item<D>,
        is_declared: bool,
        is_ptr: bool,
        is_const: bool,
    },
}

Variants§

§

Constant(ConstantValue, Item<D>)

§

Value

Fields

§id: Id
§item: Item<D>
§

Tmp

Fields

§id: Id
§item: Item<D>
§is_declared: bool
§is_ptr: bool
§is_const: bool

Implementations§

Source§

impl<D: Dialect> Value<D>

Source

pub fn is_optimized(&self) -> bool

Source

pub fn tmp(item: Item<D>) -> Self

Create a temporary variable.

Also see Self::tmp_declared for a version that needs custom declaration.

Source

pub fn to_const(&mut self)

Source

pub fn reinterpret_ptr(&self, f: &mut Formatter<'_>, item: Item<D>) -> Self

Create a temporary variable with a reinterpret_cast.

Source

pub fn tmp_ptr(item: Item<D>) -> Self

Create a temporary pointer variable.

Also see Self::tmp_declared for a version that needs custom declaration.

Source

pub fn tmp_declared(item: Item<D>) -> Self

Create a temporary variable with a custom declaration.

§Notes

Calling val.fmt_left() will assume the variable already exist.

Source

pub fn optimized_args<const N: usize>(args: [Self; N]) -> OptimizedArgs<N, D>

Source

pub fn optimized(&self) -> Self

Source

pub fn index(&self, index: usize) -> IndexedValue<D>

Source

pub fn const_qualifier(&self) -> &str

Source

pub fn id(&self) -> Option<Id>

Source

pub fn declare_local_ptr_backing( &self, f: &mut Formatter<'_>, ) -> Result<bool, Error>

A value-producing op (e.g. Dot/VectorSum, or any arithmetic) whose output was allocated as a fresh mutable local ends up typed as a local pointer. Such an output can’t be declared inline via FmtLeft::fmt_left — that yields T* out = <scalar value>;, which is a type error. Instead it needs backing storage, exactly like super::Instruction::DeclareVariable.

When self is such a local pointer, this emits the backing declaration (T out_store; T* out = &out_store;) and returns true, so the caller writes the result through the pointer (*out = value;). Otherwise it emits nothing and returns false, and the caller declares the output inline.

This is only reached for freshly-created outputs (the op defines out), so it never double-declares an already-declared local.

Source

pub fn fmt_ptr(&self) -> String

Format variable for a pointer argument. Slices and buffers are already pointers, so we just leave them as is to avoid accidental double pointers

Source

pub fn fmt_ref(&self) -> String

Format variable for a reference argument. Dereferences pointers while keeping locals as is.

Source

pub fn fmt_cast_to(&self, item: Item<D>) -> String

Format an item with a specific type, casting if necessary

Source

pub fn ensure_lvalue(&self, f: &mut Formatter<'_>) -> Result<Value<D>, Error>

Ensure a variable is a named lvalue, reassigning to a temporary if necessary. This is required for reinterpreting constants.

Trait Implementations§

Source§

impl<D: Clone + Dialect> Clone for Value<D>

Source§

fn clone(&self) -> Value<D>

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<D: Dialect> Component<D> for Value<D>

Source§

fn index(&self, index: usize) -> IndexedValue<D>

Source§

fn item(&self) -> Item<D>

Source§

fn is_const(&self) -> bool

Source§

fn elem(&self) -> Elem<D>

Source§

impl<D: Copy + Dialect> Copy for Value<D>

Source§

impl<D: Debug + Dialect> Debug for Value<D>

Source§

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

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

impl<D: Dialect> Display for Value<D>

Source§

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

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

impl<D: Eq + Dialect> Eq for Value<D>

Source§

impl<D: Dialect> FmtLeft for Value<D>

Source§

impl<D: Dialect> From<&Value<D>> for AddressSpace

Source§

fn from(value: &Value<D>) -> Self

Converts to this type from the input type.
Source§

impl<D: Hash + Dialect> Hash for Value<D>

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<D: PartialEq + Dialect> PartialEq for Value<D>

Source§

fn eq(&self, other: &Value<D>) -> bool

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

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

Inequality operator !=. Read more
Source§

impl<D: PartialEq + Dialect> StructuralPartialEq for Value<D>

Auto Trait Implementations§

§

impl<D> Freeze for Value<D>

§

impl<D> RefUnwindSafe for Value<D>
where D: RefUnwindSafe,

§

impl<D> Send for Value<D>

§

impl<D> Sync for Value<D>

§

impl<D> Unpin for Value<D>
where D: Unpin,

§

impl<D> UnsafeUnpin for Value<D>

§

impl<D> UnwindSafe for Value<D>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

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> CompilationArg for T
where T: Clone + PartialEq + Eq + Hash + Debug + Send + Sync + 'static,

Source§

fn dynamic_cast<Arg>(&self) -> Arg
where 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
Source§

impl<T> CubeComptime for T
where T: Debug + Hash + Eq + Clone + Copy,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> IntoComptime for T

Source§

fn comptime(self) -> Self

Source§

impl<T> IntoEither for T

Source§

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

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.
Source§

impl<T> TuneInputs for T
where T: Clone + Send + Sync + 'static,

Source§

type At<'a> = T

The concrete input type at lifetime 'a.