Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2011 The Guava Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
   * in compliance with the License. You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
 
 package com.google.common.collect;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.BoundType.CLOSED;
 
 
 
An implementation of ContiguousSet that contains one or more elements.

Author(s):
Gregory Kick
 
 @GwtCompatible(emulated = true)
 @SuppressWarnings("unchecked"// allow ungenerified Comparable types
 final class RegularContiguousSet<C extends Comparableextends ContiguousSet<C> {
   private final Range<C> range;
 
   RegularContiguousSet(Range<C> rangeDiscreteDomain<C> domain) {
     super(domain);
     this. = range;
   }
 
   private ContiguousSet<C> intersectionInCurrentDomain(Range<C> other) {
     return (.isConnected(other))
         ? ContiguousSet.create(.intersection(other), )
         : new EmptyContiguousSet<C>();
   }
 
   @Override ContiguousSet<C> headSetImpl(C toElementboolean inclusive) {
     return intersectionInCurrentDomain(Range.upTo(toElement, BoundType.forBoolean(inclusive)));
   }
 
   @Override ContiguousSet<C> subSetImpl(C fromElementboolean fromInclusive, C toElement,
       boolean toInclusive) {
     if (fromElement.compareTo(toElement) == 0 && !fromInclusive && !toInclusive) {
       // Range would reject our attempt to create (x, x).
       return new EmptyContiguousSet<C>();
     }
     return intersectionInCurrentDomain(Range.range(
         fromElement, BoundType.forBoolean(fromInclusive),
         toElement, BoundType.forBoolean(toInclusive)));
   }
 
   @Override ContiguousSet<C> tailSetImpl(C fromElementboolean inclusive) {
     return intersectionInCurrentDomain(Range.downTo(fromElement, BoundType.forBoolean(inclusive)));
   }
 
   @Override public UnmodifiableIterator<C> iterator() {
     return new AbstractSequentialIterator<C>(first()) {
       final C last = last();
 
       @Override
       protected C computeNext(C previous) {
         return equalsOrThrow(previous) ? null : .next(previous);
       }
     };
   }
 
   private static boolean equalsOrThrow(Comparable<?> left, @Nullable Comparable<?> right) {
     return right != null && Range.compareOrThrow(leftright) == 0;
   }
 
   @Override boolean isPartialView() {
     return false;
   }
 
   @Override public C first() {
   }
 
   @Override public C last() {
   }
 
   @Override public int size() {
     long distance = .distance(first(), last());
     return (distance >= .) ? . : (intdistance + 1;
   }
 
   @Override public boolean contains(@Nullable Object object) {
    if (object == null) {
      return false;
    }
    try {
      return .contains((C) object);
    } catch (ClassCastException e) {
      return false;
    }
  }
  @Override public boolean containsAll(Collection<?> targets) {
    return Collections2.containsAllImpl(thistargets);
  }
  @Override public boolean isEmpty() {
    return false;
  }
  @Override public ContiguousSet<C> intersection(ContiguousSet<C> other) {
    checkNotNull(other);
    checkArgument(this..equals(other.domain));
    if (other.isEmpty()) {
      return other;
    } else {
      C lowerEndpoint = Ordering.natural().max(this.first(), other.first());
      C upperEndpoint = Ordering.natural().min(this.last(), other.last());
      return (lowerEndpoint.compareTo(upperEndpoint) < 0)
          ? ContiguousSet.create(Range.closed(lowerEndpointupperEndpoint), )
          : new EmptyContiguousSet<C>();
    }
  }
  @Override public Range<C> range() {
    return range();
  }
  @Override public Range<C> range(BoundType lowerBoundTypeBoundType upperBoundType) {
    return Range.create(..withLowerBoundType(lowerBoundType),
        ..withUpperBoundType(upperBoundType));
  }
  @Override public boolean equals(@Nullable Object object) {
    if (object == this) {
      return true;
    } else if (object instanceof RegularContiguousSet) {
      RegularContiguousSet<?> that = (RegularContiguousSet<?>) object;
      if (this..equals(that.domain)) {
        return this.first().equals(that.first())
            && this.last().equals(that.last());
      }
    }
    return super.equals(object);
  }
  // copied to make sure not to use the GWT-emulated version
  @Override public int hashCode() {
    return Sets.hashCodeImpl(this);
  }
  private static final long serialVersionUID = 0;
New to GrepCode? Check out our FAQ X