protected static region intersection(region r1, region r2) { assert r1.rank == r2.rank;  ArbitraryRegion ret = new ArbitraryRegion(r1.rank); for (Iterator it = r1.iterator(); it.hasNext(); ) { point p = (point) it.next(); if (r2.contains(p)) ret.add_(p); } return ret;
public region intersection(region r) { return intersection(this, r);
    protected static region intersection(region r1, region r2) {        assert r1.rank == r2.rank;                ArbitraryRegion ret = new ArbitraryRegion(r1.rank);        for (Iterator it = r1.iterator(); it.hasNext(); ) {            point p = (point) it.next();            if (r2.contains(p))                ret.add_(p);        }        return ret;    }