pub struct PropagationContext<'a> { /* private fields */ }Expand description
Provides information about the state of the solver to a propagator.
Domains can be read through the implementation of [ReadDomains], and changes to the state can
be made via Self::post.
Implementations§
Source§impl<'a> PropagationContext<'a>
impl<'a> PropagationContext<'a>
Sourcepub fn register_predicate(&mut self, predicate: Predicate) -> PredicateId
pub fn register_predicate(&mut self, predicate: Predicate) -> PredicateId
Register the propagator to be enqueued when the provided Predicate becomes true.
Returns the PredicateId assigned to the provided predicate, which will be provided
to [Propagator::notify_predicate_id_satisfied].
Sourcepub fn unregister_predicate(&mut self, predicate_id: PredicateId)
pub fn unregister_predicate(&mut self, predicate_id: PredicateId)
Stop being enqueued for the given predicate.
Sourcepub fn register_domain_event(
&mut self,
var: impl IntegerVariable,
domain_events: DomainEvents,
local_id: LocalId,
)
pub fn register_domain_event( &mut self, var: impl IntegerVariable, domain_events: DomainEvents, local_id: LocalId, )
Subscribes the propagator to the given DomainEvents.
See [PropagatorConstructorContext::register] for more information.
Sourcepub fn unregister_domain_event(
&mut self,
var: impl IntegerVariable,
local_id: LocalId,
)
pub fn unregister_domain_event( &mut self, var: impl IntegerVariable, local_id: LocalId, )
Stop being enqueued for events on the given integer variable.
Sourcepub fn get_predicate(&mut self, predicate_id: PredicateId) -> Predicate
pub fn get_predicate(&mut self, predicate_id: PredicateId) -> Predicate
Get the Predicate for a given PredicateId.
Sourcepub fn get_id(&mut self, predicate: Predicate) -> PredicateId
pub fn get_id(&mut self, predicate: Predicate) -> PredicateId
Get a PredicateId for the given Predicate.
If no ID exists, one will be created.
pub fn reborrow(&mut self) -> PropagationContext<'_>
Source§impl PropagationContext<'_>
impl PropagationContext<'_>
Sourcepub fn post(
&mut self,
predicate: Predicate,
reason: impl Into<Reason>,
inference_code: &InferenceCode,
) -> Result<(), EmptyDomainConflict>
pub fn post( &mut self, predicate: Predicate, reason: impl Into<Reason>, inference_code: &InferenceCode, ) -> Result<(), EmptyDomainConflict>
Assign the truth-value of the given Predicate to true in the current partial
assignment.
If the truth-value is already true, then this is a no-op. Alternatively, if the
truth-value is false, then a conflict is triggered and the EmptyDomain error is
returned. At that point, no-more propagation should happen.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for PropagationContext<'a>
impl<'a> RefUnwindSafe for PropagationContext<'a>
impl<'a> Send for PropagationContext<'a>
impl<'a> Sync for PropagationContext<'a>
impl<'a> Unpin for PropagationContext<'a>
impl<'a> !UnwindSafe for PropagationContext<'a>
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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 moreSource§impl<T> ProblemSolution for Twhere
T: HasAssignments,
impl<T> ProblemSolution for Twhere
T: HasAssignments,
Source§fn num_domains(&self) -> usize
fn num_domains(&self) -> usize
Returns the number of defined DomainIds.
fn get_integer_value<Var>(&self, var: Var) -> i32where
Var: IntegerVariable,
fn get_literal_value(&self, literal: Literal) -> bool
Source§impl<T> ReadDomains for Twhere
T: HasAssignments,
impl<T> ReadDomains for Twhere
T: HasAssignments,
Source§fn evaluate_predicate(&self, predicate: Predicate) -> Option<bool>
fn evaluate_predicate(&self, predicate: Predicate) -> Option<bool>
Predicate is assigned (either true or false) or is
currently unassigned.Source§fn evaluate_literal(&self, literal: Literal) -> Option<bool>
fn evaluate_literal(&self, literal: Literal) -> Option<bool>
Literal is assigned (either true or false) or is
currently unassigned.Source§fn get_holes_at_current_checkpoint<Var>(
&self,
var: &Var,
) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
fn get_holes_at_current_checkpoint<Var>(
&self,
var: &Var,
) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
Source§fn get_holes<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
fn get_holes<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
var (including ones which were
created at previous decision levels).Source§fn is_fixed<Var>(&self, var: &Var) -> boolwhere
Var: IntegerVariable,
fn is_fixed<Var>(&self, var: &Var) -> boolwhere
Var: IntegerVariable,
true if the domain of the given variable is singleton (i.e., the variable is
fixed).Source§fn lower_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
fn lower_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
var.Source§fn lower_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
fn lower_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
Source§fn upper_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
fn upper_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
var.Source§fn upper_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
fn upper_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
Source§fn contains<Var>(&self, var: &Var, value: i32) -> boolwhere
Var: IntegerVariable,
fn contains<Var>(&self, var: &Var, value: i32) -> boolwhere
Var: IntegerVariable,
value is in the domain of var.Source§fn contains_at_trail_position<Var>(
&self,
var: &Var,
value: i32,
trail_position: usize,
) -> boolwhere
Var: IntegerVariable,
fn contains_at_trail_position<Var>(
&self,
var: &Var,
value: i32,
trail_position: usize,
) -> boolwhere
Var: IntegerVariable,
Source§fn iterate_domain<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
fn iterate_domain<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
Iterator over the values in the domain of the provided var (including the
lower-bound and upper-bound values).Source§fn is_decision_predicate(&self, predicate: Predicate) -> bool
fn is_decision_predicate(&self, predicate: Predicate) -> bool
Source§fn is_initial_bound(&self, predicate: Predicate) -> bool
fn is_initial_bound(&self, predicate: Predicate) -> bool
Predicate is an initial bound of its domain.Source§fn read_trailed_integer(&self, trailed_integer: TrailedInteger) -> i64
fn read_trailed_integer(&self, trailed_integer: TrailedInteger) -> i64
TrailedInteger.Source§fn new_trailed_integer(&mut self, initial_value: i64) -> TrailedInteger
fn new_trailed_integer(&mut self, initial_value: i64) -> TrailedInteger
TrailedInteger assigned to the provided initial_value.Source§fn write_trailed_integer(&mut self, trailed_integer: TrailedInteger, value: i64)
fn write_trailed_integer(&mut self, trailed_integer: TrailedInteger, value: i64)
TrailedInteger to the provided value.Source§fn get_checkpoint(&self) -> usize
fn get_checkpoint(&self) -> usize
Source§fn initial_lower_bound(&self, var: DomainId) -> i32
fn initial_lower_bound(&self, var: DomainId) -> i32
var at the time of its creation.Source§fn initial_upper_bound(&self, var: DomainId) -> i32
fn initial_upper_bound(&self, var: DomainId) -> i32
var at the time of its creation.Source§fn initial_holes(&self, var: DomainId) -> Vec<i32>
fn initial_holes(&self, var: DomainId) -> Vec<i32>
var.