(Range<C> rangeToRemove)
| 223 | } |
| 224 | |
| 225 | @Override |
| 226 | public void remove(Range<C> rangeToRemove) { |
| 227 | checkNotNull(rangeToRemove); |
| 228 | |
| 229 | if (rangeToRemove.isEmpty()) { |
| 230 | return; |
| 231 | } |
| 232 | |
| 233 | // We will use { } to illustrate ranges currently in the range set, and < > |
| 234 | // to illustrate rangeToRemove. |
| 235 | |
| 236 | Entry<Cut<C>, Range<C>> entryBelowLb = rangesByLowerBound.lowerEntry(rangeToRemove.lowerBound); |
| 237 | if (entryBelowLb != null) { |
| 238 | // { < |
| 239 | Range<C> rangeBelowLb = entryBelowLb.getValue(); |
| 240 | if (rangeBelowLb.upperBound.compareTo(rangeToRemove.lowerBound) >= 0) { |
| 241 | // { < }, and we will need to subdivide |
| 242 | if (rangeToRemove.hasUpperBound() |
| 243 | && rangeBelowLb.upperBound.compareTo(rangeToRemove.upperBound) >= 0) { |
| 244 | // { < > } |
| 245 | replaceRangeWithSameLowerBound( |
| 246 | Range.create(rangeToRemove.upperBound, rangeBelowLb.upperBound)); |
| 247 | } |
| 248 | replaceRangeWithSameLowerBound( |
| 249 | Range.create(rangeBelowLb.lowerBound, rangeToRemove.lowerBound)); |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | Entry<Cut<C>, Range<C>> entryBelowUb = rangesByLowerBound.floorEntry(rangeToRemove.upperBound); |
| 254 | if (entryBelowUb != null) { |
| 255 | // { > |
| 256 | Range<C> rangeBelowUb = entryBelowUb.getValue(); |
| 257 | if (rangeToRemove.hasUpperBound() |
| 258 | && rangeBelowUb.upperBound.compareTo(rangeToRemove.upperBound) >= 0) { |
| 259 | // { > } |
| 260 | replaceRangeWithSameLowerBound( |
| 261 | Range.create(rangeToRemove.upperBound, rangeBelowUb.upperBound)); |
| 262 | } |
| 263 | } |
| 264 | |
| 265 | rangesByLowerBound.subMap(rangeToRemove.lowerBound, rangeToRemove.upperBound).clear(); |
| 266 | } |
| 267 | |
| 268 | private void replaceRangeWithSameLowerBound(Range<C> range) { |
| 269 | if (range.isEmpty()) { |
nothing calls this directly
no test coverage detected