Class BitsetIntVarImpl

    • Constructor Detail

      • BitsetIntVarImpl

        public BitsetIntVarImpl​(String name,
                                int[] sortedValues,
                                Model model)
        Create an enumerated IntVar based on a bitset
        Parameters:
        name - name of the variable
        sortedValues - original domain values
        model - declaring model
      • BitsetIntVarImpl

        public BitsetIntVarImpl​(String name,
                                int min,
                                int max,
                                Model model)
        Create an enumerated IntVar based on a bitset
        Parameters:
        name - name of the variable
        min - lower bound
        max - upper bound
        model - declaring model
    • Method Detail

      • removeValue

        public boolean removeValue​(int value,
                                   ICause cause)
                            throws ContradictionException
        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
      • 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
      • 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
      • instantiateTo

        public boolean instantiateTo​(int value,
                                     ICause cause)
                              throws ContradictionException
        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
        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
        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
      • 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
      • isInstantiatedTo

        public boolean isInstantiatedTo​(int value)
        Description copied from interface: IntVar
        Checks wether this is instantiated to val
        Specified by:
        isInstantiatedTo in interface IntVar
        Parameters:
        value - int
        Returns:
        true if this is instantiated to val, false otherwise
      • contains

        public boolean contains​(int aValue)
        Description copied from interface: IntVar
        Checks if a value v belongs to the domain of this
        Specified by:
        contains in interface IntVar
        Parameters:
        aValue - int
        Returns:
        true if the value belongs to the domain of this, false otherwise.
      • getValue

        public int getValue()
        Retrieves the current value of the variable if instantiated, otherwier the lower bound.
        Specified by:
        getValue in interface IntVar
        Returns:
        the current value (or lower bound if not yet instantiated).
      • getLB

        public int getLB()
        Retrieves the lower bound of the variable
        Specified by:
        getLB in interface IntVar
        Returns:
        the lower bound
      • getUB

        public int getUB()
        Retrieves the upper bound of the variable
        Specified by:
        getUB in interface IntVar
        Returns:
        the upper bound
      • 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
      • nextValue

        public int nextValue​(int aValue)
        Description copied from interface: IntVar
        Returns the first value just after v in this which is in the domain. 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
         }
        Specified by:
        nextValue in interface IntVar
        Parameters:
        aValue - the value to start checking (exclusive)
        Returns:
        the next value in the domain
      • nextValueOut

        public int nextValueOut​(int aValue)
        Description copied from interface: IntVar
        Returns the first value just after v in this which is out of the domain. If v is less than or equal to IntVar.getLB()-2, returns v + 1, if v is greater than or equal to IntVar.getUB(), returns v + 1.
        Specified by:
        nextValueOut in interface IntVar
        Parameters:
        aValue - the value to start checking (exclusive)
        Returns:
        the next value out of the domain
      • previousValue

        public int previousValue​(int aValue)
        Description copied from interface: IntVar
        Returns the previous value just before v in 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
         }
        Specified by:
        previousValue in interface IntVar
        Parameters:
        aValue - the value to start checking (exclusive)
        Returns:
        the previous value in the domain
      • previousValueOut

        public int previousValueOut​(int aValue)
        Description copied from interface: IntVar
        Returns the first value just before v in this which is out of the domain. If v is greater than or equal to IntVar.getUB()+2, returns v - 1, if v is less than or equal to IntVar.getLB(), returns v - 1.
        Specified by:
        previousValueOut in interface IntVar
        Parameters:
        aValue - the value to start checking (exclusive)
        Returns:
        the previous value out of the 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.
      • getDelta

        public IEnumDelta 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
      • monitorDelta

        public IIntDeltaMonitor monitorDelta​(ICause propagator)
        Description copied from interface: IntVar
        Allow to monitor removed values of this.
        Specified by:
        monitorDelta in interface IntVar
        Parameters:
        propagator - the cause that requires to monitor delta
        Returns:
        a delta monitor
      • 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
      • 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.