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