pub struct RecursiveSolver<I: Interner> { /* private fields */ }
Implementations§
Trait Implementations§
Source§impl<I: Interner> Debug for RecursiveSolver<I>
impl<I: Interner> Debug for RecursiveSolver<I>
Source§impl<I: Interner> Solver<I> for RecursiveSolver<I>
impl<I: Interner> Solver<I> for RecursiveSolver<I>
Source§fn solve(
&mut self,
program: &dyn RustIrDatabase<I>,
goal: &UCanonical<InEnvironment<Goal<I>>>,
) -> Option<Solution<I>>
fn solve( &mut self, program: &dyn RustIrDatabase<I>, goal: &UCanonical<InEnvironment<Goal<I>>>, ) -> Option<Solution<I>>
Attempts to solve the given goal, which must be in canonical
form. Returns a unique solution (if one exists). This will do
only as much work towards
goal
as it has to (and that work
is cached for future attempts). Read moreSource§fn solve_limited(
&mut self,
program: &dyn RustIrDatabase<I>,
goal: &UCanonical<InEnvironment<Goal<I>>>,
should_continue: &dyn Fn() -> bool,
) -> Option<Solution<I>>
fn solve_limited( &mut self, program: &dyn RustIrDatabase<I>, goal: &UCanonical<InEnvironment<Goal<I>>>, should_continue: &dyn Fn() -> bool, ) -> Option<Solution<I>>
Attempts to solve the given goal, which must be in canonical
form. Returns a unique solution (if one exists). This will do
only as much work towards
goal
as it has to (and that work
is cached for future attempts). In addition, the solving of the
goal can be limited by returning false
from should_continue
. Read moreSource§fn solve_multiple(
&mut self,
_program: &dyn RustIrDatabase<I>,
_goal: &UCanonical<InEnvironment<Goal<I>>>,
_f: &mut dyn FnMut(SubstitutionResult<Canonical<ConstrainedSubst<I>>>, bool) -> bool,
) -> bool
fn solve_multiple( &mut self, _program: &dyn RustIrDatabase<I>, _goal: &UCanonical<InEnvironment<Goal<I>>>, _f: &mut dyn FnMut(SubstitutionResult<Canonical<ConstrainedSubst<I>>>, bool) -> bool, ) -> bool
Attempts to solve the given goal, which must be in canonical
form. Provides multiple solutions to function
f
. This will do
only as much work towards goal
as it has to (and that work
is cached for future attempts). Read moreSource§fn has_unique_solution(
&mut self,
program: &dyn RustIrDatabase<I>,
goal: &UCanonical<InEnvironment<Goal<I>>>,
) -> bool
fn has_unique_solution( &mut self, program: &dyn RustIrDatabase<I>, goal: &UCanonical<InEnvironment<Goal<I>>>, ) -> bool
A convenience method for when one doesn’t need the actual solution,
only whether or not one exists.
Auto Trait Implementations§
impl<I> Freeze for RecursiveSolver<I>
impl<I> RefUnwindSafe for RecursiveSolver<I>where
<I as Interner>::InternedCanonicalVarKinds: RefUnwindSafe,
<I as Interner>::InternedGoal: RefUnwindSafe,
<I as Interner>::InternedProgramClauses: RefUnwindSafe,
<I as Interner>::InternedSubstitution: RefUnwindSafe,
<I as Interner>::InternedConstraints: RefUnwindSafe,
impl<I> Send for RecursiveSolver<I>where
<I as Interner>::InternedCanonicalVarKinds: Send,
<I as Interner>::InternedGoal: Send,
<I as Interner>::InternedProgramClauses: Send,
<I as Interner>::InternedSubstitution: Send,
<I as Interner>::InternedConstraints: Send,
impl<I> Sync for RecursiveSolver<I>where
<I as Interner>::InternedCanonicalVarKinds: Sync + Send,
<I as Interner>::InternedGoal: Sync + Send,
<I as Interner>::InternedProgramClauses: Sync + Send,
<I as Interner>::InternedSubstitution: Sync + Send,
<I as Interner>::InternedConstraints: Sync + Send,
impl<I> Unpin for RecursiveSolver<I>
impl<I> UnwindSafe for RecursiveSolver<I>where
<I as Interner>::InternedCanonicalVarKinds: UnwindSafe,
<I as Interner>::InternedGoal: UnwindSafe,
<I as Interner>::InternedProgramClauses: UnwindSafe,
<I as Interner>::InternedSubstitution: UnwindSafe,
<I as Interner>::InternedConstraints: 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> Cast for T
impl<T> Cast for T
Source§fn cast<U>(self, interner: <U as HasInterner>::Interner) -> Uwhere
Self: CastTo<U>,
U: HasInterner,
fn cast<U>(self, interner: <U as HasInterner>::Interner) -> Uwhere
Self: CastTo<U>,
U: HasInterner,
Cast a value to type
U
using CastTo
.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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 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>
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