Package util.iterators

Examples of util.iterators.DisposableValueIterator


     * @throws ContradictionException
     */
    public void reviseV1() throws ContradictionException {
        int v0Size = v0.getDomainSize();
        if (minS1 <= (initDomSize0 - v0Size)) {
            DisposableValueIterator itv1 = v1.getValueIterator(true);
            int left = Integer.MIN_VALUE;
            int right = left;
            try {
                while (itv1.hasNext()) {
                    int y = itv1.next();
                    if (testDeepakConditionV1(y, v0Size)) { //initS1[y - offset1] <= (initDomSize0 - v0Size)) {
                        if (!v0.contains(getSupportV1(y))) {
                            boolean found = false;
                            int support = 0;
                            DisposableValueIterator itv0 = v0.getValueIterator(true);
                            while (!found && itv0.hasNext()) {
                                support = itv0.next();
                                if (relation.isConsistent(support, y)) found = true;
                            }
                            itv0.dispose();

                            if (found) {
                                storeSupportV1(support, y);
                            } else {
                                if (y == right + 1) {
View Full Code Here


     * @throws ContradictionException
     */
    public void reviseV0() throws ContradictionException {
        int v1Size = v1.getDomainSize();
        if (minS0 <= (initDomSize1 - v1Size)) {
            DisposableValueIterator itv0 = v0.getValueIterator(true);
            int left = Integer.MIN_VALUE;
            int right = left;
            try {
                while (itv0.hasNext()) {
                    int x = itv0.next();
                    if (testDeepakConditionV0(x, v1Size)) { //initS0[x - offset0] <= (initDomSize1 - v1Size)) {
                        if (!v1.contains(getSupportV0(x))) {
                            boolean found = false;
                            int support = 0;
                            DisposableValueIterator itv1 = v1.getValueIterator(true);
                            while (!found && itv1.hasNext()) {
                                support = itv1.next();
                                if (relation.isConsistent(x, support)) found = true;
                            }
                            itv1.dispose();
                            if (found) {
                                storeSupportV0(support, x);
                            } else {
                                if (x == right + 1) {
                                    right = x;
View Full Code Here

        Arrays.fill(currentSupport1, -1);
        //double cardprod = v0.getDomainSize() * v1.getDomainSize();
        //if (cardprod <= 7000)
        fastInitNbSupports(Integer.MAX_VALUE, Integer.MAX_VALUE);
        //else fastInitNbSupports(80,80);
        DisposableValueIterator itv0 = v0.getValueIterator(true);
        int left = Integer.MIN_VALUE;
        int right = left;
        int support = 0;
        boolean found = false;
        try {
            while (itv0.hasNext()) {
                DisposableValueIterator itv1 = v1.getValueIterator(true);
                int val0 = itv0.next();
                while (itv1.hasNext()) {
                    int val1 = itv1.next();
                    if (relation.isConsistent(val0, val1)) {
                        support = val1;
                        found = true;
                        break;
                    }
                }
                itv1.dispose();
                if (!found) {
                    if (val0 == right + 1) {
                        right = val0;
                    } else {
                        v0.removeInterval(left, right, this);
                        left = right = val0;
                    }
                } else {
                    storeSupportV0(support, val0);
                }
                found = false;
            }
            v0.removeInterval(left, right, this);
        } finally {
            itv0.dispose();
        }
        found = false;
        DisposableValueIterator itv1 = v1.getValueIterator(true);
        left = right = Integer.MIN_VALUE;
        try {
            while (itv1.hasNext()) {
                itv0 = v0.getValueIterator(true);
                int val1 = itv1.next();
                while (itv0.hasNext()) {
                    int val0 = itv0.next();
                    if (relation.isConsistent(val0, val1)) {
                        support = val0;
                        found = true;
                        break;
                    }
                }
                itv0.dispose();
                if (!found) {
                    if (val1 == right + 1) {
                        right = val1;
                    } else {
                        v1.removeInterval(left, right, this);
                        left = right = val1;
                    }
                } else {
                    storeSupportV1(support, val1);
                }
                found = false;
            }
            v1.removeInterval(left, right, this);
        } finally {
            itv1.dispose();
        }
        //propagate();
    }
View Full Code Here

    public void onInstantiationOf(int idx) throws ContradictionException {
        int left, right;
        if (idx == 0) {
            int value = v0.getValue();
            DisposableValueIterator iterator = v1.getValueIterator(true);
            left = right = Integer.MIN_VALUE;
            try {
                while (iterator.hasNext()) {
                    int val = iterator.next();
                    if (!relation.isConsistent(value, val)) {
                        if (val == right + 1) {
                            right = val;
                        } else {
                            v1.removeInterval(left, right, this);
                            left = right = val;
                        }
                    }
                }
                v1.removeInterval(left, right, this);
            } finally {
                iterator.dispose();
            }
        } else {
            int value = v1.getValue();
            DisposableValueIterator iterator = v0.getValueIterator(true);
            left = right = Integer.MIN_VALUE;
            try {
                while (iterator.hasNext()) {
                    int val = iterator.next();
                    if (!relation.isConsistent(val, value)) {
                        if (val == right + 1) {
                            right = val;
                        } else if (val > right + 1) {
                            v0.removeInterval(left, right, this);
                            left = right = val;
                        }
                    }
                }
                v0.removeInterval(left, right, this);
            } finally {
                iterator.dispose();
            }
        }
    }
View Full Code Here

        return true;
    }

    void initialPropagate() throws ContradictionException {
        for (str2_var vst : str2vars) {
            DisposableValueIterator vit = vst.var.getValueIterator(true);
            while (vit.hasNext()) {
                int value = vit.next();
                if (!vst.index_map.containsKey(value)) {
                    vst.var.removeValue(value, aCause);
                }
            }
            vit.dispose();
        }
        for (int t = 0; t < table.length; t++) {
            tuples.add(t);
        }
    }
View Full Code Here

    }

    @Override
    public DisposableValueIterator getValueIterator(boolean bottomUp) {
        if (_viterator == null || !_viterator.isReusable()) {
            _viterator = new DisposableValueIterator() {

                DisposableValueIterator vit;

                @Override
                public void bottomUpInit() {
View Full Code Here

    }

    @Override
    public DisposableValueIterator getValueIterator(boolean bottomUp) {
        if (_viterator == null || !_viterator.isReusable()) {
            _viterator = new DisposableValueIterator() {

                DisposableValueIterator vit;

                @Override
                public void bottomUpInit() {
View Full Code Here

    }

    @Override
    public void explain(VariableState what, Explanation to) {
        AntiDomain invdom = solver.getExplainer().getRemovedValues(this);
        DisposableValueIterator it = invdom.getValueIterator();
        while (it.hasNext()) {
            int val = it.next();
            if ((what == VariableState.LB && val < this.getLB())
                    || (what == VariableState.UB && val > this.getUB())
                    || (what == VariableState.DOM)) {
//                System.out.println("solver.explainer.explain(this,"+ val +") = " + solver.explainer.explain(this, val));
                to.add(solver.getExplainer().explain(this, val));
            }
        }
        it.dispose();
//        System.out.println("BitsetIntVarImpl.explain " + this + invdom +  " expl: " + expl);
    }
View Full Code Here

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    @Override
    public DisposableValueIterator getValueIterator(boolean bottomUp) {
        if (_viterator == null || !_viterator.isReusable()) {
            _viterator = new DisposableValueIterator() {

                int value;

                @Override
                public void bottomUpInit() {
View Full Code Here

            hasChanged = this.vars[0].updateLowerBound(this.lval[vars[1].getLB() - cste], aCause);
            hasChanged |= this.vars[0].updateUpperBound(this.lval[vars[1].getUB() - cste], aCause);
        } else {
            int minVal = Integer.MAX_VALUE;
            int maxVal = Integer.MIN_VALUE;
            DisposableValueIterator iter = this.vars[1].getValueIterator(true);
            boolean isDsc = true;
            boolean isAsc = true;
            int prev = this.lval[vars[1].getLB() - cste];
            try {
                while (iter.hasNext()) {
                    int index = iter.next();
                    int val = this.lval[index - cste];
                    if (minVal > val) {
                        minVal = val;
                    }
                    if (maxVal < val) {
                        maxVal = val;
                    }
                    if (s == Sort.detect) {
                        if (val > prev) {
                            isDsc = false;
                        }
                        if (val < prev) {
                            isAsc = false;
                        }
                        prev = val;
                    }
                }
                if (s == Sort.detect) {
                    IEnvironment environment = solver.getEnvironment();
                    if (isDsc) {
                        s = Sort.desc;
                        environment.save(new Operation() {
                            @Override
                            public void undo() {
                                s = Sort.detect;
                            }
                        });
                    } else if (isAsc) {
                        s = Sort.asc;
                        environment.save(new Operation() {
                            @Override
                            public void undo() {
                                s = Sort.detect;
                            }
                        });
                    } else {
                        s = Sort.none;
                        environment.save(new Operation() {
                            @Override
                            public void undo() {
                                s = Sort.detect;
                            }
                        });
                    }
                }
                hasChanged = this.vars[0].updateLowerBound(minVal, aCause);
                hasChanged |= this.vars[0].updateUpperBound(maxVal, aCause);
            } finally {
                iter.dispose();
            }
        }
        return hasChanged;
    }
View Full Code Here

TOP

Related Classes of util.iterators.DisposableValueIterator

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.