pub struct BCDDFunction<F: Function>(/* private fields */);Expand description
Boolean function backed by a complement edge binary decision diagram
Implementations§
Source§impl<F: Function> BCDDFunction<F>
impl<F: Function> BCDDFunction<F>
Sourcepub fn into_inner(self) -> F
pub fn into_inner(self) -> F
Convert self into the underlying Function
Trait Implementations§
Source§impl<F: Function> BooleanFunction for BCDDFunction<F>
impl<F: Function> BooleanFunction for BCDDFunction<F>
Source§fn new_var<'id>(manager: &mut Self::Manager<'id>) -> AllocResult<Self>
fn new_var<'id>(manager: &mut Self::Manager<'id>) -> AllocResult<Self>
Get a fresh variable, i.e., a function that is true if and only if the
variable is true. This adds a new level to a decision diagram.
Source§fn f_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
fn f_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
Get the always false function
⊥ as edgeSource§fn t_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
fn t_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
Get the always true function
⊤ as edgeSource§fn not_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn not_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negation
¬edge, edge versionSource§fn not_edge_owned<'id>(
_manager: &Self::Manager<'id>,
edge: EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn not_edge_owned<'id>( _manager: &Self::Manager<'id>, edge: EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negation
¬edge, owned edge version Read moreSource§fn and_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn and_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the conjunction
lhs ∧ rhs, edge versionSource§fn or_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn or_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the disjunction
lhs ∨ rhs, edge versionSource§fn nand_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn nand_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negated conjunction
lhs ⊼ rhs, edge versionSource§fn nor_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn nor_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negated disjunction
lhs ⊽ rhs, edge versionSource§fn xor_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn xor_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the exclusive disjunction
lhs ⊕ rhs, edge versionSource§fn equiv_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn equiv_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the equivalence
lhs ↔ rhs, edge versionSource§fn imp_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn imp_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the implication
lhs → rhs, edge versionSource§fn imp_strict_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn imp_strict_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the strict implication
lhs < rhs, edge versionSource§fn ite_edge<'id>(
manager: &Self::Manager<'id>,
if_edge: &EdgeOfFunc<'id, Self>,
then_edge: &EdgeOfFunc<'id, Self>,
else_edge: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn ite_edge<'id>( manager: &Self::Manager<'id>, if_edge: &EdgeOfFunc<'id, Self>, then_edge: &EdgeOfFunc<'id, Self>, else_edge: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute
if if_edge { then_edge } else { else_edge } (edge version) Read moreSource§fn sat_count_edge<'id, N: SatCountNumber, S: BuildHasher>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
vars: LevelNo,
cache: &mut SatCountCache<N, S>,
) -> N
fn sat_count_edge<'id, N: SatCountNumber, S: BuildHasher>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, vars: LevelNo, cache: &mut SatCountCache<N, S>, ) -> N
Edge version of Self::sat_count()Source§fn pick_cube_edge<'id, 'a, I>(
manager: &'a Self::Manager<'id>,
edge: &'a EdgeOfFunc<'id, Self>,
order: impl IntoIterator<IntoIter = I>,
choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool,
) -> Option<Vec<OptBool>>where
I: ExactSizeIterator<Item = &'a EdgeOfFunc<'id, Self>>,
fn pick_cube_edge<'id, 'a, I>(
manager: &'a Self::Manager<'id>,
edge: &'a EdgeOfFunc<'id, Self>,
order: impl IntoIterator<IntoIter = I>,
choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool,
) -> Option<Vec<OptBool>>where
I: ExactSizeIterator<Item = &'a EdgeOfFunc<'id, Self>>,
Edge version of Self::pick_cube()Source§fn pick_cube_dd_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn pick_cube_dd_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Edge version of Self::pick_cube_dd()Source§fn pick_cube_dd_set_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
literal_set: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn pick_cube_dd_set_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, literal_set: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Edge version of Self::pick_cube_dd_set()Source§fn eval_edge<'id, 'a>(
manager: &'a Self::Manager<'id>,
edge: &'a EdgeOfFunc<'id, Self>,
args: impl IntoIterator<Item = (Borrowed<'a, EdgeOfFunc<'id, Self>>, bool)>,
) -> bool
fn eval_edge<'id, 'a>( manager: &'a Self::Manager<'id>, edge: &'a EdgeOfFunc<'id, Self>, args: impl IntoIterator<Item = (Borrowed<'a, EdgeOfFunc<'id, Self>>, bool)>, ) -> bool
Edge version of Self::eval()Source§fn cofactor_true(&self) -> Option<Self>
fn cofactor_true(&self) -> Option<Self>
Source§fn cofactor_false(&self) -> Option<Self>
fn cofactor_false(&self) -> Option<Self>
Source§fn not_owned(self) -> Result<Self, OutOfMemory>
fn not_owned(self) -> Result<Self, OutOfMemory>
Compute the negation
¬self, owned version Read moreSource§fn and(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn and(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the conjunction
self ∧ rhs Read moreSource§fn or(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn or(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the disjunction
self ∨ rhs Read moreSource§fn nand(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn nand(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the negated conjunction
self ⊼ rhs Read moreSource§fn nor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn nor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the negated disjunction
self ⊽ rhs Read moreSource§fn xor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn xor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the exclusive disjunction
self ⊕ rhs Read moreSource§fn equiv(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn equiv(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the equivalence
self ↔ rhs Read moreSource§fn imp(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn imp(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Source§fn imp_strict(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn imp_strict(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the strict implication
self < rhs Read moreSource§fn cofactors_edge<'a, 'id>(
manager: &'a Self::Manager<'id>,
f: &'a <Self::Manager<'id> as Manager>::Edge,
) -> Option<(Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)>
fn cofactors_edge<'a, 'id>( manager: &'a Self::Manager<'id>, f: &'a <Self::Manager<'id> as Manager>::Edge, ) -> Option<(Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)>
Source§fn cofactors_node<'a, 'id>(
tag: <Self::Manager<'id> as Manager>::EdgeTag,
node: &'a <Self::Manager<'id> as Manager>::InnerNode,
) -> (Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)
fn cofactors_node<'a, 'id>( tag: <Self::Manager<'id> as Manager>::EdgeTag, node: &'a <Self::Manager<'id> as Manager>::InnerNode, ) -> (Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)
Source§fn satisfiable(&self) -> bool
fn satisfiable(&self) -> bool
Source§fn ite(&self, then_case: &Self, else_case: &Self) -> Result<Self, OutOfMemory>
fn ite(&self, then_case: &Self, else_case: &Self) -> Result<Self, OutOfMemory>
Compute
if self { then_case } else { else_case } Read moreSource§fn sat_count<N, S>(&self, vars: u32, cache: &mut SatCountCache<N, S>) -> Nwhere
N: SatCountNumber,
S: BuildHasher,
fn sat_count<N, S>(&self, vars: u32, cache: &mut SatCountCache<N, S>) -> Nwhere
N: SatCountNumber,
S: BuildHasher,
Count the number of satisfying assignments, assuming
vars input
variables Read moreSource§fn pick_cube<'a, I>(
&'a self,
order: impl IntoIterator<IntoIter = I>,
choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool,
) -> Option<Vec<OptBool>>where
I: ExactSizeIterator<Item = &'a Self>,
fn pick_cube<'a, I>(
&'a self,
order: impl IntoIterator<IntoIter = I>,
choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool,
) -> Option<Vec<OptBool>>where
I: ExactSizeIterator<Item = &'a Self>,
Pick a cube of this function Read more
Source§fn pick_cube_dd(
&self,
choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool,
) -> Result<Self, OutOfMemory>
fn pick_cube_dd( &self, choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool, ) -> Result<Self, OutOfMemory>
Pick a symbolic cube of this function, i.e., as decision diagram Read more
Source§fn pick_cube_dd_set(&self, literal_set: &Self) -> Result<Self, OutOfMemory>
fn pick_cube_dd_set(&self, literal_set: &Self) -> Result<Self, OutOfMemory>
Pick a symbolic cube of this function, i.e., as decision diagram, using
the literals in
literal_set if there is a choice Read moreSource§fn pick_cube_uniform<'a, I, S>(
&'a self,
order: impl IntoIterator<IntoIter = I>,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>where
I: ExactSizeIterator<Item = &'a Self>,
S: BuildHasher,
fn pick_cube_uniform<'a, I, S>(
&'a self,
order: impl IntoIterator<IntoIter = I>,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>where
I: ExactSizeIterator<Item = &'a Self>,
S: BuildHasher,
Pick a random cube of this function, where each cube has the same
probability of being chosen Read more
Source§fn pick_cube_uniform_edge<'id, 'a, I, S>(
manager: &'a Self::Manager<'id>,
edge: &'a <Self::Manager<'id> as Manager>::Edge,
order: impl IntoIterator<IntoIter = I>,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>
fn pick_cube_uniform_edge<'id, 'a, I, S>( manager: &'a Self::Manager<'id>, edge: &'a <Self::Manager<'id> as Manager>::Edge, order: impl IntoIterator<IntoIter = I>, cache: &mut SatCountCache<F64, S>, rng: &mut WyRand, ) -> Option<Vec<OptBool>>
Edge version of Self::pick_cube_uniform()Source§impl<F: Function> BooleanFunctionQuant for BCDDFunction<F>
impl<F: Function> BooleanFunctionQuant for BCDDFunction<F>
Source§fn restrict_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn restrict_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Restrict a set of
vars to constant values, edge version Read moreSource§fn forall_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn forall_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Source§fn exist_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn exist_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Source§fn unique_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn unique_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Source§fn apply_forall_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn apply_forall_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Combined application of
op and forall quantification, edge version Read moreSource§fn apply_exist_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn apply_exist_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Combined application of
op and existential quantification, edge
version Read moreSource§fn apply_unique_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn apply_unique_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Combined application of
op and unique quantification, edge version Read moreSource§fn restrict(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn restrict(&self, vars: &Self) -> Result<Self, OutOfMemory>
Restrict a set of
vars to constant values Read moreSource§fn forall(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn forall(&self, vars: &Self) -> Result<Self, OutOfMemory>
Compute the universal quantification over
vars Read moreSource§fn exist(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn exist(&self, vars: &Self) -> Result<Self, OutOfMemory>
Compute the existential quantification over
vars Read moreSource§fn unique(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn unique(&self, vars: &Self) -> Result<Self, OutOfMemory>
Compute the unique quantification over
vars Read moreSource§fn apply_forall(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_forall( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
Combined application of
op and quantification ∀x. self <op> rhs,
where <op> is any of the operations from BooleanOperator Read moreSource§fn apply_exist(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_exist( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
Combined application of
op and quantification ∃x. self <op> rhs,
where <op> is any of the operations from BooleanOperator Read moreSource§fn apply_unique(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_unique( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
Combined application of
op and quantification ∃!x. self <op> rhs,
where <op> is any of the operations from BooleanOperator Read moreSource§impl<F: Clone + Function> Clone for BCDDFunction<F>
impl<F: Clone + Function> Clone for BCDDFunction<F>
Source§fn clone(&self) -> BCDDFunction<F>
fn clone(&self) -> BCDDFunction<F>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<F: Function> From<F> for BCDDFunction<F>
impl<F: Function> From<F> for BCDDFunction<F>
Source§impl<F: Function> Function for BCDDFunction<F>
impl<F: Function> Function for BCDDFunction<F>
Source§type Manager<'__id> = <F as Function>::Manager<'__id>
type Manager<'__id> = <F as Function>::Manager<'__id>
Type of the associated manager Read more
Source§type ManagerRef = <F as Function>::ManagerRef
type ManagerRef = <F as Function>::ManagerRef
Source§fn from_edge<'__id>(
manager: &Self::Manager<'__id>,
edge: <Self::Manager<'__id> as Manager>::Edge,
) -> Self
fn from_edge<'__id>( manager: &Self::Manager<'__id>, edge: <Self::Manager<'__id> as Manager>::Edge, ) -> Self
Create a new function from a manager reference and an edge
Source§fn as_edge<'__id>(
&self,
manager: &Self::Manager<'__id>,
) -> &<Self::Manager<'__id> as Manager>::Edge
fn as_edge<'__id>( &self, manager: &Self::Manager<'__id>, ) -> &<Self::Manager<'__id> as Manager>::Edge
Converts this function into the underlying edge (as reference), checking
that it belongs to the given
manager Read moreSource§fn into_edge<'__id>(
self,
manager: &Self::Manager<'__id>,
) -> <Self::Manager<'__id> as Manager>::Edge
fn into_edge<'__id>( self, manager: &Self::Manager<'__id>, ) -> <Self::Manager<'__id> as Manager>::Edge
Converts this function into the underlying edge, checking that it
belongs to the given
manager Read moreSource§fn manager_ref(&self) -> <F as Function>::ManagerRef
fn manager_ref(&self) -> <F as Function>::ManagerRef
Clone the
ManagerRef partObtain a shared manager reference as well as the underlying edge Read more
Source§fn with_manager_exclusive<__F, __T>(&self, f: __F) -> __T
fn with_manager_exclusive<__F, __T>(&self, f: __F) -> __T
Obtain an exclusive manager reference as well as the underlying edge Read more
Source§fn from_edge_ref<'id>(
manager: &Self::Manager<'id>,
edge: &<Self::Manager<'id> as Manager>::Edge,
) -> Self
fn from_edge_ref<'id>( manager: &Self::Manager<'id>, edge: &<Self::Manager<'id> as Manager>::Edge, ) -> Self
Create a new function from a manager reference and an edge reference
Source§fn node_count(&self) -> usize
fn node_count(&self) -> usize
Count the number of nodes in this function, including terminal nodes Read more
Source§impl<F: Function> FunctionSubst for BCDDFunction<F>
impl<F: Function> FunctionSubst for BCDDFunction<F>
Source§fn substitute_edge<'id, 'a>(
manager: &'a Self::Manager<'id>,
edge: &'a EdgeOfFunc<'id, Self>,
substitution: impl Substitution<Var = Borrowed<'a, EdgeOfFunc<'id, Self>>, Replacement = Borrowed<'a, EdgeOfFunc<'id, Self>>>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn substitute_edge<'id, 'a>( manager: &'a Self::Manager<'id>, edge: &'a EdgeOfFunc<'id, Self>, substitution: impl Substitution<Var = Borrowed<'a, EdgeOfFunc<'id, Self>>, Replacement = Borrowed<'a, EdgeOfFunc<'id, Self>>>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Edge version of Self::substitute()Source§fn substitute<'a>(
&'a self,
substitution: impl Substitution<Var = &'a Self, Replacement = &'a Self>,
) -> Result<Self, OutOfMemory>
fn substitute<'a>( &'a self, substitution: impl Substitution<Var = &'a Self, Replacement = &'a Self>, ) -> Result<Self, OutOfMemory>
Source§impl<F: Ord + Function> Ord for BCDDFunction<F>
impl<F: Ord + Function> Ord for BCDDFunction<F>
Source§fn cmp(&self, other: &BCDDFunction<F>) -> Ordering
fn cmp(&self, other: &BCDDFunction<F>) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl<F: PartialOrd + Function> PartialOrd for BCDDFunction<F>
impl<F: PartialOrd + Function> PartialOrd for BCDDFunction<F>
impl<F: Eq + Function> Eq for BCDDFunction<F>
impl<F: Function> StructuralPartialEq for BCDDFunction<F>
Auto Trait Implementations§
impl<F> Freeze for BCDDFunction<F>where
F: Freeze,
impl<F> RefUnwindSafe for BCDDFunction<F>where
F: RefUnwindSafe,
impl<F> Send for BCDDFunction<F>where
F: Send,
impl<F> Sync for BCDDFunction<F>where
F: Sync,
impl<F> Unpin for BCDDFunction<F>where
F: Unpin,
impl<F> UnwindSafe for BCDDFunction<F>where
F: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
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,
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,
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,
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,
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,
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,
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,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
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) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
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
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
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.