(Range<C> rangeToRemove)
| 204 | } |
| 205 | |
| 206 | @Override |
| 207 | public void remove(Range<C> rangeToRemove) { |
| 208 | checkNotNull(rangeToRemove); |
| 209 | if (rangeToRemove.isEmpty()) { |
| 210 | return; |
| 211 | } |
| 212 | |
| 213 | // We will use { } to illustrate ranges currently in the range set, and < > |
| 214 | // to illustrate rangeToRemove. |
| 215 | Entry<Cut<C>, Range<C>> entryBelowLB = rangesByLowerBound.lowerEntry(rangeToRemove.lowerBound); |
| 216 | if (entryBelowLB != null) { |
| 217 | // { < |
| 218 | Range<C> rangeBelowLB = entryBelowLB.getValue(); |
| 219 | if (rangeBelowLB.upperBound.compareTo(rangeToRemove.lowerBound) >= 0) { |
| 220 | // { < }, and we will need to subdivide |
| 221 | if (rangeToRemove.hasUpperBound() |
| 222 | && rangeBelowLB.upperBound.compareTo(rangeToRemove.upperBound) >= 0) { |
| 223 | // { < > } |
| 224 | replaceRangeWithSameLowerBound(Range.create(rangeToRemove.upperBound, rangeBelowLB.upperBound)); |
| 225 | } |
| 226 | replaceRangeWithSameLowerBound(Range.create(rangeBelowLB.lowerBound, rangeToRemove.lowerBound)); |
| 227 | } |
| 228 | } |
| 229 | Entry<Cut<C>, Range<C>> entryBelowUB = rangesByLowerBound.floorEntry(rangeToRemove.upperBound); |
| 230 | if (entryBelowUB != null) { |
| 231 | // { > |
| 232 | Range<C> rangeBelowUB = entryBelowUB.getValue(); |
| 233 | if (rangeToRemove.hasUpperBound() |
| 234 | && rangeBelowUB.upperBound.compareTo(rangeToRemove.upperBound) >= 0) { |
| 235 | // { > } |
| 236 | replaceRangeWithSameLowerBound(Range.create(rangeToRemove.upperBound, rangeBelowUB.upperBound)); |
| 237 | } |
| 238 | } |
| 239 | rangesByLowerBound.subMap(rangeToRemove.lowerBound, rangeToRemove.upperBound).clear(); |
| 240 | } |
| 241 | |
| 242 | private void replaceRangeWithSameLowerBound(Range<C> range) { |
| 243 | if (range.isEmpty()) { |
nothing calls this directly
no test coverage detected