public class FixedIntVarImpl extends AbstractVariable implements IntVar
Modifier and Type | Field and Description |
---|---|
protected int |
constante |
protected IStateBool |
empty |
_plugexpl, mIdx, modificationEvents, monitors, MSG_BOUND, MSG_EMPTY, MSG_INST, MSG_LOW, MSG_REMOVE, MSG_UNKNOWN, MSG_UPP, name, solver
Constructor and Description |
---|
FixedIntVarImpl(String name,
int constante,
Solver solver) |
Modifier and Type | Method and Description |
---|---|
void |
addMonitor(IVariableMonitor monitor)
Build and add a monitor to the monitor list of
this . |
boolean |
contains(int value)
Checks if a value
v belongs to the domain of this |
void |
contradiction(ICause cause,
IEventType event,
String message)
Throws a contradiction exception based on
|
void |
createDelta()
Create a delta, if necessary, in order to observe removed values of a this.
|
IntVar |
duplicate()
Duplicate
this . |
void |
duplicate(Solver solver,
gnu.trove.map.hash.THashMap<Object,Object> identitymap)
Duplicate
this (which naturally adds it into solver ). |
NoDelta |
getDelta()
Return the delta domain of this
|
int |
getDomainSize()
Returns the size of the domain of
this |
int |
getLB()
Retrieves the lower bound of the variable
|
DisposableRangeIterator |
getRangeIterator(boolean bottomUp)
Retrieves an iterator over ranges (or intervals) of
this . |
int |
getTypeAndKind()
Return a MASK composed of 2 main information: TYPE and KIND.
|
int |
getUB()
Retrieves the upper bound of the variable
|
int |
getValue()
Retrieves the current value of the variable if instantiated, otherwier the lower bound.
|
DisposableValueIterator |
getValueIterator(boolean bottomUp)
Retrieves an iterator over values of
this . |
boolean |
hasEnumeratedDomain()
Indicates wether (or not)
this has an enumerated domain (represented in extension)
or not (only bounds) |
boolean |
instantiateTo(int value,
ICause cause)
Instantiates the domain of
this to value . |
boolean |
isInstantiated()
Indicates whether
this is instantiated (see implemtations to know what instantiation means). |
boolean |
isInstantiatedTo(int value)
Checks wether
this is instantiated to val |
IIntDeltaMonitor |
monitorDelta(ICause propagator)
Allow to monitor removed values of
this . |
int |
nextValue(int v)
Returns the next value just after v in
this . |
void |
notifyMonitors(IEventType event)
Notify monitors of observed variable modifications
|
void |
notifyPropagators(IEventType event,
ICause cause)
If
this has changed, then notify all of its observers. |
void |
notifyViews(IEventType event,
ICause cause)
Notify views of observed variable modifications
|
int |
previousValue(int v)
Returns the previous value just befor v in
this . |
void |
recordMask(int mask)
Analysis propagator event reaction on this, and adapt this
|
boolean |
removeInterval(int from,
int to,
ICause cause)
Removes values between [
from, to ] from the domain of this . |
boolean |
removeValue(int value,
ICause cause)
Removes
value from the domain of this . |
void |
subscribeView(IView view) |
String |
toString() |
boolean |
updateLowerBound(int value,
ICause cause)
Updates the lower bound of the domain of
this to value . |
boolean |
updateUpperBound(int value,
ICause cause)
Updates the upper bound of the domain of
this to value . |
compareTo, getId, getIndexInPropagator, getName, getNbProps, getPIndices, getPropagator, getPropagators, getSolver, getViews, isBool, link, removeMonitor, unlink
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getIndexInPropagator, getName, getNbProps, getPIndices, getPropagator, getPropagators, getSolver, getViews, link, removeMonitor, unlink
compareTo
protected final int constante
protected IStateBool empty
public boolean removeValue(int value, ICause cause) throws ContradictionException
IntVar
value
from the domain of this
. The instruction comes from propagator
.
value
is out of the domain, nothing is done and the return value is false
,value
leads to a dead-end (domain wipe-out),
a ContradictionException
is thrown,value
from the domain can be done safely,
the event type is created (the original event can be promoted) and observers are notified
and the return value is true
removeValue
in interface IntVar
value
- value to remove from the domain (int)cause
- removal releaserContradictionException
- if the domain become empty due to this actionpublic boolean removeInterval(int from, int to, ICause cause) throws ContradictionException
IntVar
from, to
] from the domain of this
. The instruction comes from propagator
.
false
,value
leads to a dead-end (domain wipe-out),
a ContradictionException
is thrown,value
from the domain can be done safely,
the event type is created (the original event can be promoted) and observers are notified
and the return value is true
removeInterval
in interface IntVar
from
- lower bound of the interval to remove (int)to
- upper bound of the interval to remove(int)cause
- removal releaserContradictionException
- if the domain become empty due to this actionpublic boolean instantiateTo(int value, ICause cause) throws ContradictionException
IntVar
this
to value
. The instruction comes from propagator
.
this
is already instantiated to value
,
nothing is done and the return value is false
,this
is already instantiated to another value,
then a ContradictionException
is thrown,this
is restricted to value
and the observers are notified
and the return value is true
.instantiateTo
in interface IntVar
value
- instantiation value (int)cause
- instantiation releaserContradictionException
- if the domain become empty due to this actionpublic boolean updateLowerBound(int value, ICause cause) throws ContradictionException
IntVar
this
to value
.
The instruction comes from propagator
.
value
is smaller than the lower bound of the domain, nothing is done and the return value is false
,value
leads to a dead-end (domain wipe-out),
a ContradictionException
is thrown,value
can be done safely,
the event type is created (the original event can be promoted) and observers are notified
and the return value is true
updateLowerBound
in interface IntVar
value
- new lower bound (included)cause
- updating releaserContradictionException
- if the domain become empty due to this actionpublic boolean updateUpperBound(int value, ICause cause) throws ContradictionException
IntVar
this
to value
.
The instruction comes from propagator
.
value
is greater than the upper bound of the domain, nothing is done and the return value is false
,value
leads to a dead-end (domain wipe-out),
a ContradictionException
is thrown,value
can be done safely,
the event type is created (the original event can be promoted) and observers are notified
and the return value is true
updateUpperBound
in interface IntVar
value
- new upper bound (included)cause
- update releaserContradictionException
- if the domain become empty due to this actionpublic boolean contains(int value)
IntVar
v
belongs to the domain of this
public boolean isInstantiatedTo(int value)
IntVar
this
is instantiated to val
isInstantiatedTo
in interface IntVar
value
- intthis
is instantiated to val
, false otherwisepublic int getValue()
IntVar
public int getLB()
IntVar
public int getUB()
IntVar
public int getDomainSize()
IntVar
this
getDomainSize
in interface IntVar
public int nextValue(int v)
IntVar
this
.
If no such value exists, returns Integer.MAX_VALUE;
To iterate over the values in a IntVar
,
use the following loop:
int ub = iv.getUB(); for (int i = iv.getLB(); i <= ub; i = iv.nextValue(i)) { // operate on value i here }
public int previousValue(int v)
IntVar
this
.
If no such value exists, returns Integer.MIN_VALUE;
To iterate over the values in a IntVar
,
use the following loop:
int lb = iv.getLB(); for (int i = iv.getUB(); i >= lb; i = iv.previousValue(i)) { // operate on value i here }
previousValue
in interface IntVar
v
- the value to start checking (exclusive)public boolean hasEnumeratedDomain()
IntVar
this
has an enumerated domain (represented in extension)
or not (only bounds)hasEnumeratedDomain
in interface IntVar
true
if the domain is enumerated, false
otherwise.public NoDelta getDelta()
Variable
public boolean isInstantiated()
Variable
this
is instantiated (see implemtations to know what instantiation means).isInstantiated
in interface Variable
true
if this
is instantiatedpublic void addMonitor(IVariableMonitor monitor)
Variable
this
.
The monitor is inactive at the creation and must be activated (by the engine propagation).addMonitor
in interface Variable
addMonitor
in class AbstractVariable
monitor
- a variable monitorpublic void subscribeView(IView view)
subscribeView
in interface Variable
subscribeView
in class AbstractVariable
public void recordMask(int mask)
Variable
recordMask
in interface Variable
recordMask
in class AbstractVariable
mask
- event maskpublic IIntDeltaMonitor monitorDelta(ICause propagator)
IntVar
this
.monitorDelta
in interface IntVar
propagator
- the cause that requires to monitor deltapublic void createDelta()
Variable
createDelta
in interface Variable
public void notifyPropagators(IEventType event, ICause cause) throws ContradictionException
Variable
this
has changed, then notify all of its observers.notifyPropagators
in interface Variable
notifyPropagators
in class AbstractVariable
event
- event on this objectcause
- object which leads to the modification of this objectContradictionException
- if a contradiction occurs during notificationpublic void notifyMonitors(IEventType event) throws ContradictionException
Variable
notifyMonitors
in interface Variable
event
- the event which occurred on the variableContradictionException
public void notifyViews(IEventType event, ICause cause) throws ContradictionException
Variable
notifyViews
in interface Variable
notifyViews
in class AbstractVariable
event
- the event which occurred on the variableContradictionException
public String toString()
toString
in class AbstractVariable
public void contradiction(ICause cause, IEventType event, String message) throws ContradictionException
Variable
contradiction
in interface Variable
cause
- ICause causing the exceptionevent
- event causing the contradictionmessage
- the detailed message @throws ContradictionException expected behaviorContradictionException
public int getTypeAndKind()
Variable
int type = var.getTypeAndKind() & Variable.TYPE;To get the KIND of a variable:
int kind = var.getTypeAndKind() & Variable.KIND;To check a specific type or kind of a variable:
boolean isVar = (var.getTypeAndKind() & Variable.VAR) !=0; boolean isInt = (var.getTypeAndKind() & Variable.INT) !=0;
getTypeAndKind
in interface Variable
public void duplicate(Solver solver, gnu.trove.map.hash.THashMap<Object,Object> identitymap)
Variable
this
(which naturally adds it into solver
).public DisposableValueIterator getValueIterator(boolean bottomUp)
IntVar
this
.
The values can be iterated in a bottom-up way or top-down way.
To bottom-up iterate over the values in a IntVar
,
use the following loop:
DisposableValueIterator vit = var.getValueIterator(true); while(vit.hasNext()){ int v = vit.next(); // operate on value v here } vit.dispose();To top-down iterate over the values in a
IntVar
,
use the following loop:
DisposableValueIterator vit = var.getValueIterator(false); while(vit.hasPrevious()){ int v = vit.previous(); // operate on value v here } vit.dispose();Using both previous and next can lead to unexpected behaviour.
getValueIterator
in interface IntVar
bottomUp
- way to iterate over values. true
means from lower bound to upper bound,
false
means from upper bound to lower bound.this
.public DisposableRangeIterator getRangeIterator(boolean bottomUp)
IntVar
this
.
The ranges can be iterated in a bottom-up way or top-down way.
To bottom-up iterate over the values in a IntVar
,
use the following loop:
DisposableRangeIterator rit = var.getRangeIterator(true); while (rit.hasNext()) { int from = rit.min(); int to = rit.max(); // operate on range [from,to] here rit.next(); } rit.dispose();To top-down iterate over the values in a
IntVar
,
use the following loop:
DisposableRangeIterator rit = var.getRangeIterator(false); while (rit.hasPrevious()) { int from = rit.min(); int to = rit.max(); // operate on range [from,to] here rit.previous(); } rit.dispose();Using both previous and next can lead to unexpected behaviour.
getRangeIterator
in interface IntVar
bottomUp
- way to iterate over ranges. true
means from lower bound to upper bound,
false
means from upper bound to lower bound.this
.Copyright © 2015. All rights reserved.