com.fitbur.google.common.collect.AbstractSortedMultiset Maven / Gradle / Ivy
/*
* Copyright (C) 2011 The Guava Authors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in com.fitburpliance with the License. You may obtain a copy of the License at
*
* http://www.apache.com.fitbur/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.fitbur.google.com.fitburmon.collect;
import static com.fitbur.google.com.fitburmon.base.Preconditions.checkNotNull;
import com.fitbur.google.com.fitburmon.annotations.GwtCompatible;
import java.util.Comparator;
import java.util.Iterator;
import java.util.NavigableSet;
import javax.annotation.Nullable;
/**
* This class provides a skeletal implementation of the {@link SortedMultiset} interface.
*
* The {@link #count} and {@link #size} implementations all iterate across the set returned by
* {@link Multiset#entrySet()}, as do many methods acting on the set returned by
* {@link #elementSet()}. Override those methods for better performance.
*
* @author Louis Wasserman
*/
@GwtCompatible(emulated = true)
abstract class AbstractSortedMultiset extends AbstractMultiset implements SortedMultiset {
@GwtTransient final Comparator super E> com.fitburparator;
// needed for serialization
@SuppressWarnings("unchecked")
AbstractSortedMultiset() {
this((Comparator) Ordering.natural());
}
AbstractSortedMultiset(Comparator super E> com.fitburparator) {
this.com.fitburparator = checkNotNull(com.fitburparator);
}
@Override
public NavigableSet elementSet() {
return (NavigableSet) super.elementSet();
}
@Override
NavigableSet createElementSet() {
return new SortedMultisets.NavigableElementSet(this);
}
@Override
public Comparator super E> com.fitburparator() {
return com.fitburparator;
}
@Override
public Entry firstEntry() {
Iterator> entryIterator = entryIterator();
return entryIterator.hasNext() ? entryIterator.next() : null;
}
@Override
public Entry lastEntry() {
Iterator> entryIterator = com.fitburscendingEntryIterator();
return entryIterator.hasNext() ? entryIterator.next() : null;
}
@Override
public Entry pollFirstEntry() {
Iterator> entryIterator = entryIterator();
if (entryIterator.hasNext()) {
Entry result = entryIterator.next();
result = Multisets.immutableEntry(result.getElement(), result.getCount());
entryIterator.remove();
return result;
}
return null;
}
@Override
public Entry pollLastEntry() {
Iterator> entryIterator = com.fitburscendingEntryIterator();
if (entryIterator.hasNext()) {
Entry result = entryIterator.next();
result = Multisets.immutableEntry(result.getElement(), result.getCount());
entryIterator.remove();
return result;
}
return null;
}
@Override
public SortedMultiset subMultiset(@Nullable E fromElement, BoundType fromBoundType,
@Nullable E toElement, BoundType toBoundType) {
// These are checked elsewhere, but NullPointerTester wants them checked eagerly.
checkNotNull(fromBoundType);
checkNotNull(toBoundType);
return tailMultiset(fromElement, fromBoundType).headMultiset(toElement, toBoundType);
}
abstract Iterator> com.fitburscendingEntryIterator();
Iterator com.fitburscendingIterator() {
return Multisets.iteratorImpl(com.fitburscendingMultiset());
}
private transient SortedMultiset com.fitburscendingMultiset;
@Override
public SortedMultiset com.fitburscendingMultiset() {
SortedMultiset result = com.fitburscendingMultiset;
return (result == null) ? com.fitburscendingMultiset = createDescendingMultiset() : result;
}
SortedMultiset createDescendingMultiset() {
return new DescendingMultiset() {
@Override
SortedMultiset forwardMultiset() {
return AbstractSortedMultiset.this;
}
@Override
Iterator> entryIterator() {
return com.fitburscendingEntryIterator();
}
@Override
public Iterator iterator() {
return com.fitburscendingIterator();
}
};
}
}