private void removeIntervalInternal( Object start, boolean incStart, Object end, boolean incEnd ) {
ListIterator iter = intervals.listIterator();
Interval toRemove = new Interval( start, incStart, end, incEnd );
while( iter.hasNext() ) {
Interval curr = (Interval) iter.next();
if( curr.overlaps( toRemove ) ) {
iter.remove();
if( valueSpace.compare( start, curr.start() ) > 0 ) {
iter.add( new Interval( curr.start(), curr.incStart(), start, !incStart ) );
if( valueSpace.compare( end, curr.end() ) < 0 ) {
iter.add( new Interval( end, !incEnd, curr.end(), curr.incEnd() ) );
}
}
else {
if( valueSpace.compare( end, curr.end() ) < 0 ) {
iter.add( new Interval( end, !incEnd, curr.end(), curr.incEnd() ) );
}
}
}
}
}