Class IntView<I extends IntVar>

    • Field Detail

      • var

        protected final I extends IntVar var
        Observed variable
      • delta

        protected IntDelta delta
        To store removed values
    • Method Detail

      • doInstantiateVar

        protected boolean doInstantiateVar​(int value)
                                    throws ContradictionException
        Action to execute on var when this view requires to instantiate it
        Parameters:
        value - value before modification of the view
        Returns:
        true if var has been modified
        Throws:
        ContradictionException - if modification fails
      • doUpdateLowerBoundOfVar

        protected boolean doUpdateLowerBoundOfVar​(int value)
                                           throws ContradictionException
        Action to execute on var when this view requires to update its lower bound
        Parameters:
        value - value before modification of the view
        Returns:
        true if var has been modified
        Throws:
        ContradictionException - if modification fails
      • doUpdateUpperBoundOfVar

        protected boolean doUpdateUpperBoundOfVar​(int value)
                                           throws ContradictionException
        Action to execute on var when this view requires to update its upper bound
        Parameters:
        value - value before modification of the view
        Returns:
        true if var has been modified
        Throws:
        ContradictionException - if modification fails
      • doRemoveValueFromVar

        protected boolean doRemoveValueFromVar​(int value)
                                        throws ContradictionException
        Action to execute on var when this view requires to remove a value from it
        Parameters:
        value - value before modification of the view
        Returns:
        true if var has been modified
        Throws:
        ContradictionException - if modification fails
      • doRemoveIntervalFromVar

        protected boolean doRemoveIntervalFromVar​(int from,
                                                  int to)
                                           throws ContradictionException
        Action to execute on var when this view requires to remove an interval from it
        Parameters:
        from - first value of the interval before modification of the view
        to - last value of the interval before modification of the view
        Returns:
        true if var has been modified
        Throws:
        ContradictionException - if modification fails
      • removeValue

        public boolean removeValue​(int value,
                                   ICause cause)
                            throws ContradictionException
        Description copied from interface: IntVar
        Removes valuefrom the domain of this. The instruction comes from propagator.
        • If value is out of the domain, nothing is done and the return value is false,
        • if removing value leads to a dead-end (domain wipe-out), a ContradictionException is thrown,
        • otherwise, if removing 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
        Specified by:
        removeValue in interface IntVar
        Parameters:
        value - value to remove from the domain (int)
        cause - removal releaser
        Returns:
        true if the value has been removed, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • removeValues

        public boolean removeValues​(IntIterableSet values,
                                    ICause cause)
                             throws ContradictionException
        Description copied from interface: IntVar
        Removes the value in valuesfrom the domain of this. The instruction comes from propagator.
        • If all values are out of the domain, nothing is done and the return value is false,
        • if removing a value leads to a dead-end (domain wipe-out), a ContradictionException is thrown,
        • otherwise, if removing the 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
        Specified by:
        removeValues in interface IntVar
        Parameters:
        values - set of ordered values to remove
        cause - removal release
        Returns:
        true if at least a value has been removed, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • removeInterval

        public boolean removeInterval​(int from,
                                      int to,
                                      ICause cause)
                               throws ContradictionException
        Description copied from interface: IntVar
        Removes values between [from, to] from the domain of this. The instruction comes from propagator.
        • If union between values and the current domain is empty, nothing is done and the return value is false,
        • if removing a value leads to a dead-end (domain wipe-out), a ContradictionException is thrown,
        • otherwise, if removing at least a 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
        Specified by:
        removeInterval in interface IntVar
        Parameters:
        from - lower bound of the interval to remove (int)
        to - upper bound of the interval to remove(int)
        cause - removal releaser
        Returns:
        true if the value has been removed, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • removeAllValuesBut

        public boolean removeAllValuesBut​(IntIterableSet values,
                                          ICause cause)
                                   throws ContradictionException
        Description copied from interface: IntVar
        Removes all values from the domain of this except those in values. The instruction comes from propagator.
        • If all values are out of the domain, a ContradictionException is thrown,
        • if the domain is a subset of values, nothing is done and the return value is false,
        • otherwise, if removing all values but 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
        Specified by:
        removeAllValuesBut in interface IntVar
        Parameters:
        values - set of ordered values to keep in the domain
        cause - removal release
        Returns:
        true if a at least a value has been removed, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • instantiateTo

        public boolean instantiateTo​(int value,
                                     ICause cause)
                              throws ContradictionException
        Description copied from interface: IntVar
        Instantiates the domain of this to value. The instruction comes from propagator.
        • If the domain of this is already instantiated to value, nothing is done and the return value is false,
        • If the domain of this is already instantiated to another value, then a ContradictionException is thrown,
        • Otherwise, the domain of this is restricted to value and the observers are notified and the return value is true.
        Specified by:
        instantiateTo in interface IntVar
        Parameters:
        value - instantiation value (int)
        cause - instantiation releaser
        Returns:
        true if the instantiation is done, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • updateLowerBound

        public boolean updateLowerBound​(int value,
                                        ICause cause)
                                 throws ContradictionException
        Description copied from interface: IntVar
        Updates the lower bound of the domain of this to value. The instruction comes from propagator.
        • If value is smaller than the lower bound of the domain, nothing is done and the return value is false,
        • if updating the lower bound to value leads to a dead-end (domain wipe-out), a ContradictionException is thrown,
        • otherwise, if updating the lower bound to 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
        Specified by:
        updateLowerBound in interface IntVar
        Parameters:
        value - new lower bound (included)
        cause - updating releaser
        Returns:
        true if the lower bound has been updated, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • updateUpperBound

        public boolean updateUpperBound​(int value,
                                        ICause cause)
                                 throws ContradictionException
        Description copied from interface: IntVar
        Updates the upper bound of the domain of this to value. The instruction comes from propagator.
        • If value is greater than the upper bound of the domain, nothing is done and the return value is false,
        • if updating the upper bound to value leads to a dead-end (domain wipe-out), a ContradictionException is thrown,
        • otherwise, if updating the upper bound to 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
        Specified by:
        updateUpperBound in interface IntVar
        Parameters:
        value - new upper bound (included)
        cause - update releaser
        Returns:
        true if the upper bound has been updated, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • updateBounds

        public boolean updateBounds​(int lb,
                                    int ub,
                                    ICause cause)
                             throws ContradictionException
        Description copied from interface: IntVar
        Updates the lower bound and the upper bound of the domain of this to, resp. lb and ub. The instruction comes from propagator.

        • If 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,

        • if updating the lower bound to 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,
        • otherwise, if updating the lower bound to 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
        Specified by:
        updateBounds in interface IntVar
        Parameters:
        lb - new lower bound (included)
        ub - new upper bound (included)
        cause - update releaser
        Returns:
        true if the upper bound has been updated, false otherwise
        Throws:
        ContradictionException - if the domain become empty due to this action
      • getTypeAndKind

        public int getTypeAndKind()
        Description copied from interface: Variable
        Return a MASK composed of 2 main information: TYPE and KIND.
        TYPE is defined in the 3 first bits : VAR ( 1 << 0), CSTE (1 << 1) or VIEW (1 << 2)
        KIND is defined on the other bits : INT (1 << 3), BOOL (INT + 1 << 4), GRAPH (1 << 5) or META (1 << 6)

        To get the TYPE of a 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;
         
        Specified by:
        getTypeAndKind in interface Variable
        Returns:
        an int representing the type and kind of the variable
      • getVariable

        public IntVar getVariable()
        Description copied from interface: IView
        Return the basis variable
        Specified by:
        getVariable in interface IView
        Returns:
        variable observed
      • getDomainSize

        public int getDomainSize()
        Description copied from interface: IntVar
        Returns the size of this domain, that is the number of elements in this domain.
        Specified by:
        getDomainSize in interface IntVar
        Returns:
        size of the domain
      • getRange

        public int getRange()
        Description copied from interface: IntVar
        Returns the range of this domain, that is, the difference between the upper bound and the lower bound.
        Specified by:
        getRange in interface IntVar
        Returns:
        the range of this domain
      • hasEnumeratedDomain

        public boolean hasEnumeratedDomain()
        Description copied from interface: IntVar
        Indicates wether (or not) this has an enumerated domain (represented in extension) or not (only bounds)
        Specified by:
        hasEnumeratedDomain in interface IntVar
        Returns:
        true if the domain is enumerated, false otherwise.
      • isInstantiated

        public boolean isInstantiated()
        Description copied from interface: Variable
        Indicates whether this is instantiated (see implemtations to know what instantiation means).
        Specified by:
        isInstantiated in interface Variable
        Returns:
        true if this is instantiated
      • getDelta

        public IDelta getDelta()
        Description copied from interface: Variable
        Return the delta domain of this
        Specified by:
        getDelta in interface Variable
        Returns:
        the delta domain of the variable
      • createDelta

        public void createDelta()
        Description copied from interface: Variable
        Create a delta, if necessary, in order to observe removed values of a this. If the delta already exists, has no effect.
        Specified by:
        createDelta in interface Variable
      • transformEvent

        public IEventType transformEvent​(IEventType evt)
        Specified by:
        transformEvent in interface IntVar
        Parameters:
        evt - original event
        Returns:
        transforms the original event wrt this IntVar
      • getValueIterator

        public DisposableValueIterator getValueIterator​(boolean bottomUp)
        Description copied from interface: IntVar
        Retrieves an iterator over values of 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.
        Specified by:
        getValueIterator in interface IntVar
        Parameters:
        bottomUp - way to iterate over values. true means from lower bound to upper bound, false means from upper bound to lower bound.
        Returns:
        a disposable iterator over values of this.
      • getRangeIterator

        public DisposableRangeIterator getRangeIterator​(boolean bottomUp)
        Description copied from interface: IntVar
        Retrieves an iterator over ranges (or intervals) of 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.
        Specified by:
        getRangeIterator in interface IntVar
        Parameters:
        bottomUp - way to iterate over ranges. true means from lower bound to upper bound, false means from upper bound to lower bound.
        Returns:
        a disposable iterator over ranges of this.
      • forEachIntVar

        public void forEachIntVar​(Consumer<IntVar> action)
        Description copied from interface: ICause
        Apply an action on each variable declared on the scope of this cause, if any.
        Specified by:
        forEachIntVar in interface ICause
        Specified by:
        forEachIntVar in interface IntVar
        Parameters:
        action - action to perform on each variable declared in this cause.