public abstract class IntView<I extends IntVar> extends AbstractVariable implements IView, IntVar
ArExpression.Operator
Modifier and Type | Field and Description |
---|---|
protected IntDelta |
delta
To store removed values
|
protected I |
var
Observed variable
|
mIdx, model, monitors, MSG_EMPTY, MSG_INST, name, propagators
MAX_INT_BOUND, MIN_INT_BOUND
BOOL, CSTE, INT, KIND, REAL, SET, TYPE, VAR, VIEW
NO_CHILD
Modifier and Type | Method and Description |
---|---|
int |
compareTo(Variable o) |
void |
createDelta()
Create a delta, if necessary, in order to observe removed values of a this.
|
protected boolean |
doInstantiateVar(int value)
Action to execute on
var when this view requires to instantiate it |
protected boolean |
doRemoveIntervalFromVar(int from,
int to)
Action to execute on
var when this view requires to remove an interval from it |
protected boolean |
doRemoveValueFromVar(int value)
Action to execute on
var when this view requires to remove a value from it |
protected boolean |
doUpdateLowerBoundOfVar(int value)
Action to execute on
var when this view requires to update its lower bound |
protected boolean |
doUpdateUpperBoundOfVar(int value)
Action to execute on
var when this view requires to update its upper bound |
void |
forEachIntVar(Consumer<IntVar> action)
Apply an action on each variable declared on the scope of this cause, if any.
|
IDelta |
getDelta()
Return the delta domain of this
|
int |
getDomainSize()
Returns the size of this domain, that is the number of elements in this domain.
|
int |
getRange()
Returns the range of this domain, that is, the difference between the upper bound and the lower bound.
|
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.
|
DisposableValueIterator |
getValueIterator(boolean bottomUp)
Retrieves an iterator over values of
this . |
IntVar |
getVariable()
Return the basis variable
|
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). |
Iterator<Integer> |
iterator() |
void |
notify(IEventType event)
To notify a view that the variable is observed has been modified.
|
boolean |
removeAllValuesBut(IntIterableSet values,
ICause cause)
Removes all values from the domain of
this except those in values . |
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 . |
boolean |
removeValues(IntIterableSet values,
ICause cause)
Removes the value in
values from the domain of this . |
IEventType |
transformEvent(IEventType evt) |
boolean |
updateBounds(int lb,
int ub,
ICause cause)
Updates the lower bound and the upper bound of the domain of
this to, resp. |
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 . |
addMonitor, asBoolVar, asIntVar, asRealVar, asSetVar, clearEvents, contradiction, createScheduler, getCause, getDindex, getEvtScheduler, getId, getIndexInPropagator, getMask, getModel, getName, getNbProps, getNbViews, getPIndices, getPropagator, getPropagators, getView, isAConstant, isBool, link, notifyMonitors, notifyPropagators, notifyViews, removeMonitor, setPIndice, storeEvents, subscribeView, swapOnActivate, swapOnPassivate, toString, unlink
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
explain, justifyEvent
contains, getLB, getNoChild, getUB, getValue, intVar, isBool, isExpressionLeaf, isInstantiatedTo, monitorDelta, nextValue, nextValueOut, previousValue, previousValueOut
addMonitor, asBoolVar, asIntVar, asRealVar, asSetVar, clearEvents, contradiction, getCause, getDindex, getEnvironment, getEvtScheduler, getIndexInPropagator, getMask, getModel, getName, getNbProps, getNbViews, getPIndices, getPropagator, getPropagators, getView, isAConstant, link, notifyMonitors, notifyPropagators, notifyViews, removeMonitor, setPIndice, storeEvents, subscribeView, swapOnActivate, swapOnPassivate, unlink
forEach, spliterator
abs, add, add, add, dist, dist, div, div, eq, eq, eq, extractVar, ge, ge, getExpressionChild, getModel, gt, gt, ieval, le, le, lt, lt, max, max, max, min, min, min, mod, mod, mul, mul, mul, ne, ne, neg, pow, pow, sqr, sub, sub
protected IntDelta delta
protected boolean doInstantiateVar(int value) throws ContradictionException
var
when this view requires to instantiate itvalue
- value before modification of the viewvar
has been modifiedContradictionException
- if modification failsprotected boolean doUpdateLowerBoundOfVar(int value) throws ContradictionException
var
when this view requires to update its lower boundvalue
- value before modification of the viewvar
has been modifiedContradictionException
- if modification failsprotected boolean doUpdateUpperBoundOfVar(int value) throws ContradictionException
var
when this view requires to update its upper boundvalue
- value before modification of the viewvar
has been modifiedContradictionException
- if modification failsprotected boolean doRemoveValueFromVar(int value) throws ContradictionException
var
when this view requires to remove a value from itvalue
- value before modification of the viewvar
has been modifiedContradictionException
- if modification failsprotected boolean doRemoveIntervalFromVar(int from, int to) throws ContradictionException
var
when this view requires to remove an interval from itfrom
- first value of the interval before modification of the viewto
- last value of the interval before modification of the viewvar
has been modifiedContradictionException
- if modification failspublic 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 removeValues(IntIterableSet values, ICause cause) throws ContradictionException
IntVar
values
from the domain of this
. The instruction comes from propagator
.
false
,ContradictionException
is thrown,values
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
removeValues
in interface IntVar
values
- set of ordered values to removecause
- removal releaseContradictionException
- 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 removeAllValuesBut(IntIterableSet values, ICause cause) throws ContradictionException
IntVar
this
except those in values
. The instruction comes from propagator
.
ContradictionException
is thrown,false
,values
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
removeAllValuesBut
in interface IntVar
values
- set of ordered values to keep in the domaincause
- removal releaseContradictionException
- 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 updateBounds(int lb, int ub, ICause cause) throws ContradictionException
IntVar
this
to, resp. lb
and ub
.
The instruction comes from propagator
.
lb
is smaller than the lower bound of the domain
and ub
is greater than the upper bound of the domain,
nothing is done and the return value is false
,
lb
, or updating the upper bound to ub
leads to a dead-end (domain wipe-out),
or if lb
is strictly greater than ub
,
a ContradictionException
is thrown,lb
and/or the upper bound to ub
can be done safely 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
updateBounds
in interface IntVar
lb
- new lower bound (included)ub
- new upper bound (included)cause
- update releaserContradictionException
- if the domain become empty due to this actionpublic 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 IntVar getVariable()
IView
getVariable
in interface IView
public int getDomainSize()
IntVar
getDomainSize
in interface IntVar
public int getRange()
IntVar
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 boolean isInstantiated()
Variable
this
is instantiated (see implemtations to know what instantiation means).isInstantiated
in interface Variable
true
if this
is instantiatedpublic IDelta getDelta()
Variable
public void createDelta()
Variable
createDelta
in interface Variable
public int compareTo(Variable o)
compareTo
in interface Comparable<Variable>
compareTo
in class AbstractVariable
public void notify(IEventType event) throws ContradictionException
IView
notify
in interface IView
event
- the event received by the observed variableContradictionException
- if a failure occurspublic IEventType transformEvent(IEventType evt)
transformEvent
in interface IntVar
evt
- original eventpublic 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
.public void forEachIntVar(Consumer<IntVar> action)
ICause
forEachIntVar
in interface ICause
forEachIntVar
in interface IntVar
action
- action to perform on each variable declared in this cause.Copyright © 2018. All rights reserved.