C++ Reference

C++ Reference: Routing

Detailed Description

This is the base class for all expressions that are not variables.

It provides a basic 'CastToVar()' implementation.

The class of expressions represent two types of objects: variables and subclasses of BaseIntExpr. Variables are stateful objects that provide a rich API (remove values, WhenBound...). On the other hand, subclasses of BaseIntExpr represent range-only stateless objects. That is, min(A + B) is recomputed each time as min(A) + min(B).

Furthermore, sometimes, the propagation on an expression is not complete, and Min(), Max() are not monotonic with respect to SetMin() and SetMax(). For instance, if A is a var with domain [0 .. 5], and B another variable with domain [0 .. 5], then Plus(A, B) has domain [0, 10].

If we apply SetMax(Plus(A, B), 4)), we will deduce that both A and B have domain [0 .. 4]. In that case, Max(Plus(A, B)) is 8 and not 4. To get back monotonicity, we 'cast' the expression into a variable using the Var() method (that will call CastToVar() internally). The resulting variable will be stateful and monotonic.

Finally, one should never store a pointer to a IntExpr, or BaseIntExpr in the code. The safe code should always call Var() on an expression built by the solver, and store the object as an IntVar*. This is a consequence of the stateless nature of the expressions that makes the code error-prone.

Definition at line 109 of file constraint_solveri.h.

Public Member Functions

 BaseIntExpr (Solver *const s)
 
 ~BaseIntExpr () override
 
IntVarVar () override
 Creates a variable from the expression. More...
 
virtual IntVarCastToVar ()
 
virtual int64 Min () const =0
 
virtual void SetMin (int64 m)=0
 
virtual int64 Max () const =0
 
virtual void SetMax (int64 m)=0
 
virtual void Range (int64 *l, int64 *u)
 By default calls Min() and Max(), but can be redefined when Min and Max code can be factorized. More...
 
virtual void SetRange (int64 l, int64 u)
 This method sets both the min and the max of the expression. More...
 
virtual void SetValue (int64 v)
 This method sets the value of the expression. More...
 
virtual bool Bound () const
 Returns true if the min and the max of the expression are equal. More...
 
virtual bool IsVar () const
 Returns true if the expression is indeed a variable. More...
 
IntVarVarWithName (const std::string &name)
 Creates a variable from the expression and set the name of the resulting var. More...
 
virtual void WhenRange (Demon *d)=0
 Attach a demon that will watch the min or the max of the expression. More...
 
void WhenRange (Solver::Closure closure)
 Attach a demon that will watch the min or the max of the expression. More...
 
void WhenRange (Solver::Action action)
 Attach a demon that will watch the min or the max of the expression. More...
 
virtual void Accept (ModelVisitor *const visitor) const
 Accepts the given visitor. More...
 
std::string DebugString () const override
 
Solversolver () const
 
void FreezeQueue ()
 This method freezes the propagation queue. More...
 
void UnfreezeQueue ()
 This method unfreezes the propagation queue. More...
 
void EnqueueDelayedDemon (Demon *const d)
 This method pushes the demon onto the propagation queue. More...
 
void EnqueueVar (Demon *const d)
 
void ExecuteAll (const SimpleRevFIFO< Demon * > &demons)
 
void EnqueueAll (const SimpleRevFIFO< Demon * > &demons)
 
void set_action_on_fail (Solver::Action a)
 
void reset_action_on_fail ()
 This method clears the failure callback. More...
 
void set_variable_to_clean_on_fail (IntVar *v)
 Shortcut for variable cleaner. More...
 
virtual std::string name () const
 Object naming. More...
 
void set_name (const std::string &name)
 
bool HasName () const
 Returns whether the object has been named or not. More...
 
virtual std::string BaseName () const
 Returns a base name for automatic naming. More...
 

Constructor & Destructor Documentation

◆ BaseIntExpr()

BaseIntExpr ( Solver *const  s)
inlineexplicit

Definition at line 111 of file constraint_solveri.h.

◆ ~BaseIntExpr()

~BaseIntExpr ( )
inlineoverride

Definition at line 112 of file constraint_solveri.h.

Member Function Documentation

◆ Accept()

virtual void Accept ( ModelVisitor *const  visitor) const
virtualinherited

Accepts the given visitor.

Reimplemented in IntVar.

◆ BaseName()

virtual std::string BaseName ( ) const
virtualinherited

Returns a base name for automatic naming.

Reimplemented in BooleanVar.

◆ Bound()

virtual bool Bound ( ) const
inlinevirtualinherited

Returns true if the min and the max of the expression are equal.

Reimplemented in BooleanVar.

Definition at line 3862 of file constraint_solver.h.

◆ CastToVar()

virtual IntVar* CastToVar ( )
virtual

◆ DebugString()

std::string DebugString ( ) const
inlineoverridevirtualinherited

Reimplemented from BaseObject.

Reimplemented in GlobalVehicleBreaksConstraint, BooleanVar, Pack, Assignment, SequenceVar, and Constraint.

Definition at line 3172 of file constraint_solver.h.

◆ EnqueueAll()

void EnqueueAll ( const SimpleRevFIFO< Demon * > &  demons)
inherited

◆ EnqueueDelayedDemon()

void EnqueueDelayedDemon ( Demon *const  d)
inlineinherited

This method pushes the demon onto the propagation queue.

It will be processed directly if the queue is empty. It will be enqueued according to its priority otherwise.

Definition at line 3192 of file constraint_solver.h.

◆ EnqueueVar()

void EnqueueVar ( Demon *const  d)
inlineinherited

Definition at line 3193 of file constraint_solver.h.

◆ ExecuteAll()

void ExecuteAll ( const SimpleRevFIFO< Demon * > &  demons)
inherited

◆ FreezeQueue()

void FreezeQueue ( )
inlineinherited

This method freezes the propagation queue.

It is useful when you need to apply multiple modifications at once.

Definition at line 3183 of file constraint_solver.h.

◆ HasName()

bool HasName ( ) const
inherited

Returns whether the object has been named or not.

◆ IsVar()

virtual bool IsVar ( ) const
inlinevirtualinherited

Returns true if the expression is indeed a variable.

Reimplemented in IntVar.

Definition at line 3865 of file constraint_solver.h.

◆ Max()

virtual int64 Max ( ) const
pure virtualinherited

Implemented in BooleanVar.

◆ Min()

virtual int64 Min ( ) const
pure virtualinherited

Implemented in BooleanVar.

◆ name()

virtual std::string name ( ) const
virtualinherited

Object naming.

◆ Range()

virtual void Range ( int64 *  l,
int64 *  u 
)
inlinevirtualinherited

By default calls Min() and Max(), but can be redefined when Min and Max code can be factorized.

Definition at line 3848 of file constraint_solver.h.

◆ reset_action_on_fail()

void reset_action_on_fail ( )
inlineinherited

This method clears the failure callback.

Definition at line 3206 of file constraint_solver.h.

◆ set_action_on_fail()

void set_action_on_fail ( Solver::Action  a)
inlineinherited

Definition at line 3200 of file constraint_solver.h.

◆ set_name()

void set_name ( const std::string &  name)
inherited

◆ set_variable_to_clean_on_fail()

void set_variable_to_clean_on_fail ( IntVar v)
inlineinherited

Shortcut for variable cleaner.

Definition at line 3209 of file constraint_solver.h.

◆ SetMax()

virtual void SetMax ( int64  m)
pure virtualinherited

Implemented in BooleanVar.

◆ SetMin()

virtual void SetMin ( int64  m)
pure virtualinherited

Implemented in BooleanVar.

◆ SetRange()

virtual void SetRange ( int64  l,
int64  u 
)
inlinevirtualinherited

This method sets both the min and the max of the expression.

Reimplemented in BooleanVar.

Definition at line 3853 of file constraint_solver.h.

◆ SetValue()

virtual void SetValue ( int64  v)
inlinevirtualinherited

This method sets the value of the expression.

Definition at line 3859 of file constraint_solver.h.

◆ solver()

Solver* solver ( ) const
inlineinherited

Definition at line 3179 of file constraint_solver.h.

◆ UnfreezeQueue()

void UnfreezeQueue ( )
inlineinherited

This method unfreezes the propagation queue.

All modifications that happened when the queue was frozen will be processed.

Definition at line 3187 of file constraint_solver.h.

◆ Var()

IntVar* Var ( )
overridevirtual

Creates a variable from the expression.

Implements IntExpr.

◆ VarWithName()

IntVar* VarWithName ( const std::string &  name)
inherited

Creates a variable from the expression and set the name of the resulting var.

If the expression is already a variable, then it will set the name of the expression, possibly overwriting it. This is just a shortcut to Var() followed by set_name().

◆ WhenRange() [1/3]

virtual void WhenRange ( Demon d)
pure virtualinherited

Attach a demon that will watch the min or the max of the expression.

Implemented in BooleanVar.

◆ WhenRange() [2/3]

void WhenRange ( Solver::Action  action)
inlineinherited

Attach a demon that will watch the min or the max of the expression.

Definition at line 3885 of file constraint_solver.h.

◆ WhenRange() [3/3]

void WhenRange ( Solver::Closure  closure)
inlineinherited

Attach a demon that will watch the min or the max of the expression.

Definition at line 3879 of file constraint_solver.h.


The documentation for this class was generated from the following file: