Skip to main content

LutLang

Enum LutLang 

Source
pub enum LutLang {
Show 14 variants Const(bool), Program(u64), DC, Var(Symbol), Nor([Id; 2]), Mux([Id; 3]), And([Id; 2]), Xor([Id; 2]), Not([Id; 1]), Lut(Box<[Id]>), Bus(Box<[Id]>), Reg([Id; 4]), Arg([Id; 1]), Cycle([Id; 1]),
}
Expand description

Definitions of e-node types. Programs are the only node type that is not a net/signal.

Variants§

§

Const(bool)

§

Program(u64)

§

DC

§

Var(Symbol)

§

Nor([Id; 2])

§

Mux([Id; 3])

§

And([Id; 2])

§

Xor([Id; 2])

§

Not([Id; 1])

§

Lut(Box<[Id]>)

§

Bus(Box<[Id]>)

§

Reg([Id; 4])

§

Arg([Id; 1])

§

Cycle([Id; 1])

Implementations§

Source§

impl LutLang

Source

pub const MAX_LUT_SIZE: usize = 6

Maximum size allowed for a LUT. This cannot be made larger due to us using u64 to represent LUTs. FPGAs generally do not support greater than 6-LUTs so this limit should hopefully be sufficient forever.

Source

pub fn verify_rec(&self, expr: &RecExpr<Self>) -> Result<(), String>

Recursively verify the grammar of a LutLang expression expr rooted at self

Source

pub fn get_program(&self, expr: &RecExpr<Self>) -> Result<u64, String>

Extract the program from a LutLang::Lut contained in expression expr

Source

pub fn get_program_in_egraph( &self, egraph: &EGraph<LutLang, LutAnalysis>, ) -> Result<u64, String>

Extract the program from a LutLang::Lut contained in egraph

Source

pub fn get_operand_classes( &self, _egraph: &EGraph<LutLang, LutAnalysis>, ) -> Result<Vec<Id>, String>

Extract the operand class ids from a LutLang::Lut contained in egraph This filters out unwanted leaf nodes, like Programs.

Source

pub fn get_lut_size(&self) -> Result<usize, String>

Returns the fan-in of a LutLang::Lut

Source

pub fn eval( expr: &RecExpr<Self>, inputs: &HashMap<String, bool>, ) -> Result<BitVec, String>

This funcion evaluates the expr as combinational logic under given inputs

Source

pub fn deep_equals(&self, other: &Self, expr: &RecExpr<Self>) -> bool

Since variables/leaves can be duplicated in expressions, we sometimes need to do deep checks for equality. This function returns true if the two nodes with children contained in expr are equal.

Source

pub fn func_equiv(expr: &RecExpr<Self>, other: &RecExpr<Self>) -> Check

Given two expressions and a set of input values, this funcion returns true if they represent the same combinational logic

Source

pub fn get_prim_name(&self) -> Option<String>

Returns the Verilog primitive name for a node type

Trait Implementations§

Source§

impl Analysis<LutLang> for LutAnalysis

Source§

type Data = LutAnalysisData

The per-EClass data for this analysis.
Source§

fn merge(&mut self, to: &mut Self::Data, from: Self::Data) -> DidMerge

Defines how to merge two Datas when their containing EClasses merge. Read more
Source§

fn make( egraph: &mut EGraph<LutLang, Self>, enode: &LutLang, _id: Id, ) -> Self::Data

Makes a new Analysis data for a given e-node that will go into the given e-class. Read more
Source§

fn remake(egraph: &mut EGraph<L, Self>, enode: &L, id: Id) -> Self::Data

Same as Analysis::make, but called during rebuilding. Read more
Source§

fn pre_union( egraph: &EGraph<L, Self>, id1: Id, id2: Id, justification: &Option<Justification>, )

An optional hook that allows inspection before a union occurs. When explanations are enabled, it gives two ids that represent the two particular terms being unioned, not the canonical ids for the two eclasses. It also gives a justification for the union when explanations are enabled. Read more
Source§

fn modify(egraph: &mut EGraph<L, Self>, id: Id)

A hook that allows the modification of the EGraph. Read more
Source§

fn allow_ematching_cycles(&self) -> bool

Whether or not e-matching should allow finding cycles. Read more
Source§

impl Applier<LutLang, LutAnalysis> for CombineAlikeInputs

Source§

fn apply_one( &self, egraph: &mut EGraph<LutLang, LutAnalysis>, eclass: Id, subst: &Subst, searcher_ast: Option<&PatternAst<LutLang>>, rule_name: Symbol, ) -> Vec<Id>

Apply a single substitution. Read more
Source§

fn apply_matches( &self, egraph: &mut EGraph<L, N>, matches: &[SearchMatches<'_, L>], rule_name: GlobalSymbol, ) -> Vec<Id>

Apply many substitutions. Read more
Source§

fn get_pattern_ast(&self) -> Option<&RecExpr<ENodeOrVar<L>>>

For patterns, get the ast directly as a reference.
Source§

fn vars(&self) -> Vec<Var>

Returns a list of variables that this Applier assumes are bound. Read more
Source§

impl Applier<LutLang, LutAnalysis> for FuseCut

Source§

fn apply_one( &self, egraph: &mut EGraph<LutLang, LutAnalysis>, eclass: Id, subst: &Subst, searcher_ast: Option<&PatternAst<LutLang>>, rule_name: Symbol, ) -> Vec<Id>

Apply a single substitution. Read more
Source§

fn apply_matches( &self, egraph: &mut EGraph<L, N>, matches: &[SearchMatches<'_, L>], rule_name: GlobalSymbol, ) -> Vec<Id>

Apply many substitutions. Read more
Source§

fn get_pattern_ast(&self) -> Option<&RecExpr<ENodeOrVar<L>>>

For patterns, get the ast directly as a reference.
Source§

fn vars(&self) -> Vec<Var>

Returns a list of variables that this Applier assumes are bound. Read more
Source§

impl Applier<LutLang, LutAnalysis> for PermuteInput

Source§

fn apply_one( &self, egraph: &mut EGraph<LutLang, LutAnalysis>, eclass: Id, subst: &Subst, searcher_ast: Option<&PatternAst<LutLang>>, rule_name: Symbol, ) -> Vec<Id>

Apply a single substitution. Read more
Source§

fn apply_matches( &self, egraph: &mut EGraph<L, N>, matches: &[SearchMatches<'_, L>], rule_name: GlobalSymbol, ) -> Vec<Id>

Apply many substitutions. Read more
Source§

fn get_pattern_ast(&self) -> Option<&RecExpr<ENodeOrVar<L>>>

For patterns, get the ast directly as a reference.
Source§

fn vars(&self) -> Vec<Var>

Returns a list of variables that this Applier assumes are bound. Read more
Source§

impl Applier<LutLang, LutAnalysis> for ShannonCondense

Source§

fn apply_one( &self, egraph: &mut EGraph<LutLang, LutAnalysis>, eclass: Id, subst: &Subst, searcher_ast: Option<&PatternAst<LutLang>>, rule_name: Symbol, ) -> Vec<Id>

Apply a single substitution. Read more
Source§

fn apply_matches( &self, egraph: &mut EGraph<L, N>, matches: &[SearchMatches<'_, L>], rule_name: GlobalSymbol, ) -> Vec<Id>

Apply many substitutions. Read more
Source§

fn get_pattern_ast(&self) -> Option<&RecExpr<ENodeOrVar<L>>>

For patterns, get the ast directly as a reference.
Source§

fn vars(&self) -> Vec<Var>

Returns a list of variables that this Applier assumes are bound. Read more
Source§

impl Applier<LutLang, LutAnalysis> for ShannonExpand

Available on crate feature dyn_decomp only.
Source§

fn apply_one( &self, egraph: &mut EGraph<LutLang, LutAnalysis>, eclass: Id, subst: &Subst, searcher_ast: Option<&PatternAst<LutLang>>, rule_name: Symbol, ) -> Vec<Id>

Apply a single substitution. Read more
Source§

fn apply_matches( &self, egraph: &mut EGraph<L, N>, matches: &[SearchMatches<'_, L>], rule_name: GlobalSymbol, ) -> Vec<Id>

Apply many substitutions. Read more
Source§

fn get_pattern_ast(&self) -> Option<&RecExpr<ENodeOrVar<L>>>

For patterns, get the ast directly as a reference.
Source§

fn vars(&self) -> Vec<Var>

Returns a list of variables that this Applier assumes are bound. Read more
Source§

impl Canonical for LutLang

Source§

fn expr_is_canonical(expr: &RecExpr<Self>) -> bool

Returns true if the expression is canonical.
Source§

fn canonicalize_expr(expr: RecExpr<Self>) -> RecExpr<Self>

Returns a canonicalization of the expression.
Source§

fn verify_expr(expr: &RecExpr<Self>) -> Result<(), String>

Verify that the expression does not have any extra syntax errors.
Source§

impl CircuitLang for LutLang

Source§

fn var(sym: Symbol) -> Self

Returns a fresh variable with name sym.
Source§

fn bus(ids: impl Iterator<Item = Id>) -> Self

Capture multiple expressions in a single node
Source§

fn int(x: u64) -> Option<Self>

Returns a node that stores a constant integer parameter if the Lang supports it
Source§

fn is_bus(&self) -> bool

Returns true is the node is a bus
Source§

fn is_lut(&self) -> bool

Returns true is the node is a lookup table
Source§

fn get_int(&self) -> Option<u64>

Returns an integer if the node stores one
Source§

fn get_var(&self) -> Option<Symbol>

Returns the symbol of the node, if is a variable
Source§

impl Clone for LutLang

Source§

fn clone(&self) -> LutLang

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<A, B> CostFunction<LutLang> for ConjunctiveCostFn<A, B>
where A: CostFunction<LutLang, Cost = i64>, B: CostFunction<LutLang, Cost = i64>,

Source§

type Cost = i64

The Cost type. It only requires PartialOrd so you can use floating point types, but failed comparisons (NaNs) will result in a panic.
Source§

fn cost<C>(&mut self, enode: &LutLang, costs: C) -> Self::Cost
where C: FnMut(Id) -> Self::Cost,

Calculates the cost of an enode whose children are Costs. Read more
Source§

fn cost_rec(&mut self, expr: &RecExpr<L>) -> Self::Cost

Calculates the total cost of a RecExpr. Read more
Source§

impl CostFunction<LutLang> for DepthCostFn

Source§

type Cost = i64

The Cost type. It only requires PartialOrd so you can use floating point types, but failed comparisons (NaNs) will result in a panic.
Source§

fn cost<C>(&mut self, enode: &LutLang, costs: C) -> Self::Cost
where C: FnMut(Id) -> Self::Cost,

Calculates the cost of an enode whose children are Costs. Read more
Source§

fn cost_rec(&mut self, expr: &RecExpr<L>) -> Self::Cost

Calculates the total cost of a RecExpr. Read more
Source§

impl CostFunction<LutLang> for GateCostFn

Source§

type Cost = u64

The Cost type. It only requires PartialOrd so you can use floating point types, but failed comparisons (NaNs) will result in a panic.
Source§

fn cost<C>(&mut self, enode: &LutLang, costs: C) -> Self::Cost
where C: FnMut(Id) -> Self::Cost,

Calculates the cost of an enode whose children are Costs. Read more
Source§

fn cost_rec(&mut self, expr: &RecExpr<L>) -> Self::Cost

Calculates the total cost of a RecExpr. Read more
Source§

impl CostFunction<LutLang> for KLUTCostFn

Source§

type Cost = u64

The Cost type. It only requires PartialOrd so you can use floating point types, but failed comparisons (NaNs) will result in a panic.
Source§

fn cost<C>(&mut self, enode: &LutLang, costs: C) -> Self::Cost
where C: FnMut(Id) -> Self::Cost,

Calculates the cost of an enode whose children are Costs. Read more
Source§

fn cost_rec(&mut self, expr: &RecExpr<L>) -> Self::Cost

Calculates the total cost of a RecExpr. Read more
Source§

impl Debug for LutLang

Source§

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

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

impl Display for LutLang

Source§

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

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

impl EquivCheck for LutLang

Source§

fn check_expr(expr: &RecExpr<Self>, other: &RecExpr<Self>) -> Check

Check if expr and other are equivalent.
Source§

impl Explanable for LutLang

Source§

fn get_explanations<A>( expr: &RecExpr<Self>, other: &RecExpr<Self>, runner: &mut Runner<Self, A>, ) -> Result<Vec<Explanation<Self>>, String>
where A: Analysis<Self>,

Get a list of explanations for the relevant sub-terms in expr and other using the egraph in runnner.
Source§

impl Extractable for LutLang

Source§

fn depth_cost_fn() -> impl CostFunction<Self, Cost = i64>

Returns the depth cost function for the language.
Source§

fn cell_cost_with_reg_weight_fn( cut_size: usize, w: u64, ) -> impl CostFunction<Self>

Returns the area cost function for the language, only selecting cells with fewer than cut_size inputs. Additionally, registers have a parameterized weight w.
Source§

fn exact_area_cost_fn() -> impl CostFunction<Self>

Returns the cost function using real cell areas.
Source§

fn filter_cost_fn(set: HashSet<String>) -> impl CostFunction<Self>

Returns a cost function used for extracting only certain types nodes.
Source§

fn cell_cost_fn(cut_size: usize) -> impl CostFunction<Self>

Returns the area cost function for the language, only selecting cells with fewer than cut_size inputs. In this case, registers have weight 1.
Source§

impl FromOp for LutLang

Source§

type Error = FromOpError

The error type returned by from_op if its arguments do not represent a valid e-node.
Source§

fn from_op(op: &str, children: Vec<Id>) -> Result<Self, Self::Error>

Parse an e-node with operator op and children children.
Source§

impl Hash for LutLang

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 Language for LutLang

Source§

type Discriminant = Discriminant<LutLang>

Type representing the cases of this language. Read more
Source§

fn discriminant(&self) -> Self::Discriminant

Return the Discriminant of this node.
Source§

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

Returns true if this enode matches another enode. This should only consider the operator and the arity, not the children Ids.
Source§

fn children(&self) -> &[Id]

Returns the children of this e-node.
Source§

fn children_mut(&mut self) -> &mut [Id]

Returns a mutable slice of the children of this e-node.
Source§

fn for_each<F>(&self, f: F)
where F: FnMut(Id),

Runs a given function on each child Id.
Source§

fn for_each_mut<F>(&mut self, f: F)
where F: FnMut(&mut Id),

Runs a given function on each child Id, allowing mutation of that Id.
Source§

fn try_for_each<E, F>(&self, f: F) -> Result<(), E>
where F: FnMut(Id) -> Result<(), E>,

Runs a falliable function on each child, stopping if the function returns an error.
Source§

fn len(&self) -> usize

Returns the number of the children this enode has. Read more
Source§

fn is_leaf(&self) -> bool

Returns true if this enode has no children.
Source§

fn update_children<F>(&mut self, f: F)
where F: FnMut(Id) -> Id,

Runs a given function to replace the children.
Source§

fn map_children<F>(self, f: F) -> Self
where F: FnMut(Id) -> Id,

Creates a new enode with children determined by the given function.
Source§

fn fold<F, T>(&self, init: T, f: F) -> T
where F: FnMut(T, Id) -> T,

Folds over the children, given an initial accumulator.
Source§

fn all<F>(&self, f: F) -> bool
where F: FnMut(Id) -> bool,

Returns true if the predicate is true on all children. Does not short circuit.
Source§

fn any<F>(&self, f: F) -> bool
where F: FnMut(Id) -> bool,

Returns true if the predicate is true on any children. Does not short circuit.
Source§

fn join_recexprs<F, Expr>(&self, child_recexpr: F) -> RecExpr<Self>
where F: FnMut(Id) -> Expr, Expr: AsRef<[Self]>,

Make a RecExpr by mapping this enodes children to other RecExprs. Read more
Source§

fn build_recexpr<F>(&self, get_node: F) -> RecExpr<Self>
where F: FnMut(Id) -> Self,

Build a RecExpr from an e-node. Read more
Source§

fn try_build_recexpr<F, Err>(&self, get_node: F) -> Result<RecExpr<Self>, Err>
where F: FnMut(Id) -> Result<Self, Err>,

Same as Language::build_recexpr, but fallible.
Source§

impl LogicCell<PrimitiveCell> for LutLang

Source§

fn get_cell(&self, params: &[(Identifier, Parameter)]) -> Option<PrimitiveCell>

Returns the instantiable cell type associated with this logic node
Source§

impl LogicFunc<LutLang> for PrimitiveCell

Source§

fn get_logic_func(&self, ind: usize, children: &[Id]) -> Option<LutLang>

Get the logic function/variant associated with the output at position ind. The children IDs are set to children.
Source§

impl Ord for LutLang

Source§

fn cmp(&self, other: &LutLang) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for LutLang

Source§

fn eq(&self, other: &LutLang) -> 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.
Source§

impl PartialOrd for LutLang

Source§

fn partial_cmp(&self, other: &LutLang) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Report<LutLang> for SynthReport

Source§

fn new<A>( input: &RecExpr<LutLang>, output: &RecExpr<LutLang>, extract_time: f64, runner: &Runner<LutLang, A>, ) -> Result<Self, String>
where A: Analysis<LutLang>,

Create a new Report comparing a pre-optimized input and a post-optimized output.
Source§

fn with_name(self, name: &str) -> Self

Rewrite the module name of the Report.
Source§

impl VerilogEmission for LutLang

Source§

fn get_gate_type(&self) -> Option<PrimitiveType>

Returns the primitive type (i.e. the logic) of the language node
Source§

fn get_output_ids(expr: &RecExpr<Self>) -> Vec<Id>

Returns all the ids which need to be mapped to Verilog outputs
Source§

fn get_var(&self) -> Option<String>

Returns the variable name if the node is an input
Source§

fn get_verilog_primitive( &self, lookup: impl Fn(&Id) -> Option<String>, fresh_prim_name: impl Fn() -> String, fresh_signal_name: impl Fn() -> String, ) -> Result<Option<SVPrimitive>, String>

Returns the fully connected SVPrimitive for this node. All the predecessors of this node must be already defined with lookup
Source§

fn is_var(&self) -> bool

Returns true if the node is an input/variable
Source§

impl VerilogParsing for LutLang

Source§

fn get_expr<'a>( signal: &'a str, module: &'a SVModule, expr: &mut RecExpr<LutLang>, map: &mut HashMap<&'a str, Id>, ) -> Result<Id, String>

Compile the Verilog signal signal in module into the expr.
Source§

fn map_inputs<'a>( prim: &'a SVPrimitive, module: &'a SVModule, expr: &mut RecExpr<Self>, map: &mut HashMap<&'a str, Id>, ) -> Result<HashMap<&'a str, Id>, String>

Returns a mapping of the inputs to prim while also updating the root map as wel
Source§

impl Eq for LutLang

Source§

impl StructuralPartialEq for LutLang

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<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

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

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

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.