1 /* 2 * Copyright (C) 2011 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 11 * express or implied. See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 15 package com.google.common.collect; 16 17 import com.google.common.annotations.GwtIncompatible; 18 import org.checkerframework.checker.nullness.qual.Nullable; 19 20 /** 21 * A skeletal implementation of {@code RangeSet}. 22 * 23 * @author Louis Wasserman 24 */ 25 @GwtIncompatible 26 abstract class AbstractRangeSet<C extends Comparable> implements RangeSet<C> { AbstractRangeSet()27 AbstractRangeSet() {} 28 29 @Override contains(C value)30 public boolean contains(C value) { 31 return rangeContaining(value) != null; 32 } 33 34 @Override rangeContaining(C value)35 public abstract Range<C> rangeContaining(C value); 36 37 @Override isEmpty()38 public boolean isEmpty() { 39 return asRanges().isEmpty(); 40 } 41 42 @Override add(Range<C> range)43 public void add(Range<C> range) { 44 throw new UnsupportedOperationException(); 45 } 46 47 @Override remove(Range<C> range)48 public void remove(Range<C> range) { 49 throw new UnsupportedOperationException(); 50 } 51 52 @Override clear()53 public void clear() { 54 remove(Range.<C>all()); 55 } 56 57 @Override enclosesAll(RangeSet<C> other)58 public boolean enclosesAll(RangeSet<C> other) { 59 return enclosesAll(other.asRanges()); 60 } 61 62 @Override addAll(RangeSet<C> other)63 public void addAll(RangeSet<C> other) { 64 addAll(other.asRanges()); 65 } 66 67 @Override removeAll(RangeSet<C> other)68 public void removeAll(RangeSet<C> other) { 69 removeAll(other.asRanges()); 70 } 71 72 @Override intersects(Range<C> otherRange)73 public boolean intersects(Range<C> otherRange) { 74 return !subRangeSet(otherRange).isEmpty(); 75 } 76 77 @Override encloses(Range<C> otherRange)78 public abstract boolean encloses(Range<C> otherRange); 79 80 @Override equals(@ullable Object obj)81 public boolean equals(@Nullable Object obj) { 82 if (obj == this) { 83 return true; 84 } else if (obj instanceof RangeSet) { 85 RangeSet<?> other = (RangeSet<?>) obj; 86 return this.asRanges().equals(other.asRanges()); 87 } 88 return false; 89 } 90 91 @Override hashCode()92 public final int hashCode() { 93 return asRanges().hashCode(); 94 } 95 96 @Override toString()97 public final String toString() { 98 return asRanges().toString(); 99 } 100 } 101