pub enum TreeOp {
Input(Var),
Const(f32),
Binary(BinaryOpcode, Arc<TreeOp>, Arc<TreeOp>),
Unary(UnaryOpcode, Arc<TreeOp>),
RemapAxes {
target: Arc<TreeOp>,
x: Arc<TreeOp>,
y: Arc<TreeOp>,
z: Arc<TreeOp>,
},
RemapAffine {
target: Arc<TreeOp>,
mat: Affine3<f32>,
},
}Expand description
Opcode type for trees
This is equivalent to Op, but also includes the
RemapAxes and TreeOp::RemapAffine operations for
lazy remapping.
Variants§
Input(Var)
Input (an arbitrary Var)
Const(f32)
Binary(BinaryOpcode, Arc<TreeOp>, Arc<TreeOp>)
Unary(UnaryOpcode, Arc<TreeOp>)
RemapAxes
Lazy remapping of trees
When imported into a Context, all x/y/z clauses within target will
be replaced with the provided x/y/z trees.
If the transform is affine, then RemapAffine should be preferred,
because it flattens sequences of affine transformations.
RemapAffine
Lazy affine transforms
When imported into a Context, the x/y/z clauses within target will
be transformed with the provided affine matrix.
Trait Implementations§
impl Eq for TreeOp
Source§impl PartialEq for TreeOp
TreeOp equality uses OrderedFloat semantics for comparisons
impl PartialEq for TreeOp
TreeOp equality uses OrderedFloat semantics for comparisons
This is subtle, but it ensures consistent behavior while using pointer
equality for short-circuiting recursive checks. If we instead used standard
floating-point semantics, two NAN trees would be considered equal if one
is a clone of the other (due to pointer equality) but unequal if they were
constructed separately (due to float semantics).
In addition, this makes equality reflexive, allowing us to implement Eq
(and to store values in hashmaps).
Auto Trait Implementations§
impl Freeze for TreeOp
impl RefUnwindSafe for TreeOp
impl Send for TreeOp
impl Sync for TreeOp
impl Unpin for TreeOp
impl UnsafeUnpin for TreeOp
impl UnwindSafe for TreeOp
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
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
key and return true if they are equal.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> ⓘ
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> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.