/*
* Copyright (C) 2012 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 com.google.common.annotations.
GwtIncompatible;
import javax.annotation.
Nullable;
/**
* Skeletal implementation of {@link ImmutableSortedSet#descendingSet()}.
*
* @author Louis Wasserman
*/
class
DescendingImmutableSortedSet<E> extends
ImmutableSortedSet<E> {
private final
ImmutableSortedSet<E>
forward;
DescendingImmutableSortedSet(
ImmutableSortedSet<E>
forward) {
super(
Ordering.
from(
forward.
comparator()).
reverse());
this.
forward =
forward;
}
@
Override
public int
size() {
return
forward.
size();
}
@
Override
public
UnmodifiableIterator<E>
iterator() {
return
forward.
descendingIterator();
}
@
Override
ImmutableSortedSet<E>
headSetImpl(E
toElement, boolean
inclusive) {
return
forward.
tailSet(
toElement,
inclusive).
descendingSet();
}
@
Override
ImmutableSortedSet<E>
subSetImpl(
E
fromElement, boolean
fromInclusive, E
toElement, boolean
toInclusive) {
return
forward.
subSet(
toElement,
toInclusive,
fromElement,
fromInclusive).
descendingSet();
}
@
Override
ImmutableSortedSet<E>
tailSetImpl(E
fromElement, boolean
inclusive) {
return
forward.
headSet(
fromElement,
inclusive).
descendingSet();
}
@
Override
@
GwtIncompatible("NavigableSet")
public
ImmutableSortedSet<E>
descendingSet() {
return
forward;
}
@
Override
@
GwtIncompatible("NavigableSet")
public
UnmodifiableIterator<E>
descendingIterator() {
return
forward.
iterator();
}
@
Override
@
GwtIncompatible("NavigableSet")
ImmutableSortedSet<E>
createDescendingSet() {
throw new
AssertionError("should never be called");
}
@
Override
public E
lower(E
element) {
return
forward.
higher(
element);
}
@
Override
public E
floor(E
element) {
return
forward.
ceiling(
element);
}
@
Override
public E
ceiling(E
element) {
return
forward.
floor(
element);
}
@
Override
public E
higher(E
element) {
return
forward.
lower(
element);
}
@
Override
int
indexOf(@
Nullable Object target) {
int
index =
forward.
indexOf(
target);
if (
index == -1) {
return
index;
} else {
return
size() - 1 -
index;
}
}
@
Override
boolean
isPartialView() {
return
forward.
isPartialView();
}
}