pub enum BasePattern {
Ignore,
Identifier(Identifier),
Product(Arc<Self>, Arc<Self>),
}Expand description
Basic structure of a Simfony value for pattern matching.
Variants§
Ignore
Ignore: Match any value.
Used for matching values that are not assigned to a variable.
Identifier(Identifier)
Variable identifier: Match any value and bind it to an identifier.
Product(Arc<Self>, Arc<Self>)
Product: Match product value component-wise.
Implementations§
Source§impl BasePattern
impl BasePattern
Sourcepub fn product(left: Self, right: Self) -> Self
pub fn product(left: Self, right: Self) -> Self
Construct a product of patterns left and right.
Sourcepub fn as_identifier(&self) -> Option<&Identifier>
pub fn as_identifier(&self) -> Option<&Identifier>
Access the identifier inside an identifier pattern.
Sourcepub fn contains(&self, identifier: &Identifier) -> bool
pub fn contains(&self, identifier: &Identifier) -> bool
Check if the identifier is contained inside the pattern.
Sourcepub fn subsumes(&self, other: &Self) -> bool
pub fn subsumes(&self, other: &Self) -> bool
Check if self subsumes the other pattern.
§Subsumption
- Ignore:
_subsumes every pattern. - Identifier:
asubsumesbiffa=b - Product:
(a1, a2)subsumes(b1, b2)iffa1subsumesb1anda2subsumesb2.
§Matching
If value v matches pattern p and pattern p' subsumes p,
then v matches p'.
The subsuming pattern is more general than the subsumed pattern.
Sourcepub fn identifiers(&self) -> impl Iterator<Item = &Identifier>
pub fn identifiers(&self) -> impl Iterator<Item = &Identifier>
Get an iterator over all identifiers inside the pattern.
Sourcepub fn contains_all<'a, I>(&self, identifiers: I) -> boolwhere
I: Iterator<Item = &'a Identifier>,
pub fn contains_all<'a, I>(&self, identifiers: I) -> boolwhere
I: Iterator<Item = &'a Identifier>,
Check if all identifiers are contained inside the pattern.
Sourcepub fn covers(&self, other: &Self) -> bool
pub fn covers(&self, other: &Self) -> bool
Check if self covers the other pattern in terms of variable names.
§Coverage
Pattern p1 covers pattern p2 if p1 contains all variable names from p2.
Sourcepub fn contains_ignore(&self) -> bool
pub fn contains_ignore(&self) -> bool
Check if the pattern contains an ignore pattern.
Sourcepub fn translate(
&self,
ctx: &Context,
to: &Self,
) -> Option<PairBuilder<ProgNode>>
pub fn translate( &self, ctx: &Context, to: &Self, ) -> Option<PairBuilder<ProgNode>>
Compute a Simplicity expression that takes as input a value that matches the self pattern
and that produces as output a value that matches the to pattern.
§Panics
The to pattern contains ignore patterns: Every value matches the ignore pattern.
This means there are infinitely many translating expressions from self to to.
For instance, iden, iden & iden, (iden & iden) & iden, and so on.
We enforce a unique translation by banning ignore from the to pattern.
Trait Implementations§
Source§impl Clone for BasePattern
impl Clone for BasePattern
Source§fn clone(&self) -> BasePattern
fn clone(&self) -> BasePattern
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BasePattern
impl Debug for BasePattern
impl Eq for BasePattern
Source§impl From<&Pattern> for BasePattern
impl From<&Pattern> for BasePattern
Source§impl Hash for BasePattern
impl Hash for BasePattern
Source§impl PartialEq for BasePattern
impl PartialEq for BasePattern
impl StructuralPartialEq for BasePattern
Source§impl TreeLike for &BasePattern
impl TreeLike for &BasePattern
Source§fn n_children(&self) -> usize
fn n_children(&self) -> usize
Source§fn nth_child(&self, n: usize) -> Option<Self>
fn nth_child(&self, n: usize) -> Option<Self>
Source§fn pre_order_iter(self) -> PreOrderIter<Self>
fn pre_order_iter(self) -> PreOrderIter<Self>
Source§fn verbose_pre_order_iter(self) -> VerbosePreOrderIter<Self>
fn verbose_pre_order_iter(self) -> VerbosePreOrderIter<Self>
Source§fn post_order_iter(self) -> PostOrderIter<Self>
fn post_order_iter(self) -> PostOrderIter<Self>
Auto Trait Implementations§
impl Freeze for BasePattern
impl RefUnwindSafe for BasePattern
impl Send for BasePattern
impl Sync for BasePattern
impl Unpin for BasePattern
impl UnsafeUnpin for BasePattern
impl UnwindSafe for BasePattern
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more