} else {     if (current.out != null) { current.in = null; }
        protected void compact() {            if (lastSegmentCrossingList != null                    && lastSegmentCrossingList.size() > 0) {                crossings.addAll(lastSegmentCrossingList);                lastSegmentCrossingList.clear();                lastSegmentCrossingList = null;            }            Object[] bc = crossings.toArray();            crossings = new ArrayList(bc.length);            BoundaryCrossing current, previous = null;            for (int i = 0; i < bc.length; i++) {                current = (BoundaryCrossing) bc[i];                if (previous != null && previous.geo.distance(current.geo) == 0.0) {                    if (previous.in == null)                        previous.in = current.in;                    if (previous.out == null) {                        previous.out = current.out;                    }                                        continue;                }                crossings.add(current);                previous = current;            }        }