BDD v = var;
    public Iterator iterator3(final BDD var) {        return new Iterator() {            BDDFactory f = BDD.this.getFactory();            AllSatIterator i = new AllSatIterator(BDD.this);            byte[] a;            BDD b;            BDD v = var;            BDD lastReturned;            { gotoNext(); }                        void gotoNext() {                if (i.hasNext()) {                    a = (byte[])i.next();                } else {                    a = null;                    b = null;                    return;                }                b = f.one();                for (int i = 0; i < a.length; ++i) {                    if (a[i] == 1) b.andWith(f.ithVar(i));                    else if (a[i] == 0) b.andWith(f.nithVar(i));                }            }                        public boolean hasNext() {                return b != null || a != null;            }            public Object next() {                if (b == null) {                    gotoNext();                    if (a == null) {                        throw new NoSuchElementException();                    }                }                lastReturned = b.satOne(v, false);                b.applyWith(lastReturned.id(), BDDFactory.diff);                if (b.isZero()) {                    b.free();                    b = null;                }                return lastReturned;            }            /* (non-Javadoc)             * @see java.util.Iterator#remove()             */            public void remove() {                if (lastReturned == null)                    throw new IllegalStateException();                BDD.this.applyWith(lastReturned, BDDFactory.diff);                lastReturned = null;            }                    };    }