liblisa::semantics::default::ops

Enum Op

pub enum Op {
Show 32 variants Hole(u16), Const(i8), Not, Crop { num_bits: u8, }, SignExtend { num_bits: u8, }, Select { num_skip: u8, num_take: u8, }, Parity, IsZero, ByteMask, BitMask, TrailingZeros, LeadingZeros, PopCount, SwapBytes { num_bits: u8, }, Add, Sub, Mul, CarrylessMul, Div, UnsignedDiv, Rem, UnsignedRem, Shl, Shr, And, Or, Xor, CmpLt, Rol { num_bits: u8, }, DepositBits, ExtractBits, IfZero,
}
Expand description

Operations in an expression.

Variants§

§

Hole(u16)

Looks up the value passed as the Nth input, and returns it.

§

Const(i8)

Converts the i8 to i128 and returns it.

§

Not

Negates all 128 bits.

§

Crop

Clears bits num_bits..128

Fields

§num_bits: u8

The number of bits to keep.

§

SignExtend

Fills bits num_bits..128 to 0 with the value in bit num_bits

Fields

§num_bits: u8

The number of bits to which the number will be cropped before sign-extending it.

§

Select

Fills bits [0..num_take] with the bits in [num_skip..num_skip + num_take], clears the bits [num_take..128]

Fields

§num_skip: u8

The number of bits to skip.

§num_take: u8

The number of bits to copy to the result, after skipping the first num_skip bits.

§

Parity

Computes NOT(XOR(bit0, bit1, bit2, bit3, bit4, bit5, bit6, bit7))

§

IsZero

If the argument is zero, returns 1i128. Otherwise, returns 0i128.

§

ByteMask

Fills bits [0..8] with bits [7, 15, 23, .., 127], clears bits [8..128].

§

BitMask

Sets bits [0..N], clears bits [N..128]. If N >= 128, sets all bits.

§

TrailingZeros

Counts the number of bits that are 0, starting from the least significant bit.

§

LeadingZeros

Counts the number of bits that are 0, starting from the most significant bit.

§

PopCount

Counts the number of ones in the value

§

SwapBytes

Clears bits [num_bits..128]. Then reverses the order of the lower (num_bits + 7) / 8 bytes.

Fields

§num_bits: u8

The number of bits to keep.

§

Add

Computes the sum of the two arguments.

§

Sub

Subtracts the second argument from the first.

§

Mul

Multiplies the two arguments.

§

CarrylessMul

Performs carry-less multiplication

§

Div

Performs a signed 128-bit division.

§

UnsignedDiv

Performs an unsigned 128-bit division.

§

Rem

Performs a signed 128-bit division, and returns the remainder.

§

UnsignedRem

Performs an unsigned 128-bit division, and returns the remainder.

§

Shl

Shifts all the bits in the first argument left by the amount specified in the second argument. The shift amount in the second argument is masked with 0x7f.

§

Shr

Shifts all the bits in the first argument right by the amount specified in the second argument. The topmost bit is copied from the previous topmost bit. So -1i128 >> x always returns -1i128. The shift amount in the second argument is masked with 0x7f.

§

And

Computes the bitwise AND of the two arguments.

§

Or

Computes the bitwise OR of the two arguments.

§

Xor

Computes the bitwise XOR of the two arguments.

§

CmpLt

Performs a signed comparison on the two arguments. Returns 1i128 if the first argument is less than the second argument. Otherwise, returns 0i128.

§

Rol

Clears bits [num_bits..128]. Rotates the lowest num_bits bits in the first argument to the left, by the amount specified in the second argument. The rotation amount in the second argument is first masked with 0xFFFFFFFF. Then the first argument is rotated by x % num_bits.

Fields

§num_bits: u8

The number of bits to which the value will be cropped before rotating it.

§

DepositBits

Performs bit deposition with source bits from the first argument, and selector bits from the second argument. Nth bit in the source bit is copied to the result at the position of the Nth set bit in the selector.

Example: Source bits 0b00001011 and selector bits: 0b11001001, yields: 0b10001001.

§

ExtractBits

Performs bit extraction with source bits from the first argument, and selector bits from the second argument. The Nth bit in the result is copied from the source bits at the position of the Nth set bit in the selector.

Example: Source bits 0b00001011 and selector bits: 0b11001001, yields: 0b0011.

§

IfZero

If the first argument is 0, the second argument is returned. Otherwise, the third argument is returned.

Implementations§

§

impl Op

pub const fn const_default() -> Self

Returns the default operation, which is A (first hole).

pub fn num_args(&self) -> usize

Returns the number of arguments the operation requires.

pub fn as_infix(&self) -> Option<&str>

Returns an infix string that can be used for printing the operation.

pub fn is_commutative(&self) -> bool

Returns true if the operation is commutative.

pub fn is_associative(&self) -> bool

Returns true if the operation is associative.

pub fn eval_from_stack<const N: usize>( &self, args: &impl Fn(usize) -> i128, top_of_stack: i128, stack: &mut ArrayVec<i128, N>, ) -> i128

Evaluates the operation on the given top_of_stack and stack.

Trait Implementations§

§

impl Clone for Op

§

fn clone(&self) -> Op

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for Op

§

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

Formats the value using the given formatter. Read more
§

impl Default for Op

§

fn default() -> Self

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

impl<'de> Deserialize<'de> for Op

§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl Display for Op

§

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

Formats the value using the given formatter. Read more
§

impl Hash for Op

§

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
§

impl JsonSchema for Op

§

fn schema_name() -> String

The name of the generated JSON Schema. Read more
§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
§

fn json_schema(gen: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
§

fn is_referenceable() -> bool

Whether JSON Schemas generated for this type should be re-used where possible using the $ref keyword. Read more
§

impl PartialEq for Op

§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl Serialize for Op

§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
§

impl Copy for Op

§

impl Eq for Op

§

impl StructuralPartialEq for Op

Auto Trait Implementations§

§

impl Freeze for Op

§

impl RefUnwindSafe for Op

§

impl Send for Op

§

impl Sync for Op

§

impl Unpin for Op

§

impl UnwindSafe for Op

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, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

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

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

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

§

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

Checks if this value is equivalent to the given key. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

§

const WITNESS: W = W::MAKE

A constant of the type witness
§

impl<T> Identity for T
where T: ?Sized,

§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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> 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
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
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§

default 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,