10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/*
20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2012 The Guava Authors
30888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License");
50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * you may not use this file except in compliance with the License.
60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * You may obtain a copy of the License at
70888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
90888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software
110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS,
120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130888a09821a98ac0680fad765217302858e70fa4Paul Duffin * See the License for the specific language governing permissions and
140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License.
150888a09821a98ac0680fad765217302858e70fa4Paul Duffin */
160888a09821a98ac0680fad765217302858e70fa4Paul Duffin
170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage com.google.common.collect;
180888a09821a98ac0680fad765217302858e70fa4Paul Duffin
190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.Multisets.UnmodifiableMultiset;
200888a09821a98ac0680fad765217302858e70fa4Paul Duffin
210888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collections;
220888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Comparator;
230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.SortedSet;
240888a09821a98ac0680fad765217302858e70fa4Paul Duffin
250888a09821a98ac0680fad765217302858e70fa4Paul Duffin/**
260888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Implementation of {@link Multisets#unmodifiableSortedMultiset(SortedMultiset)}
270888a09821a98ac0680fad765217302858e70fa4Paul Duffin * for GWT.
280888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
290888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Louis Wasserman
300888a09821a98ac0680fad765217302858e70fa4Paul Duffin */
310888a09821a98ac0680fad765217302858e70fa4Paul Duffinfinal class UnmodifiableSortedMultiset<E>
320888a09821a98ac0680fad765217302858e70fa4Paul Duffin    extends UnmodifiableMultiset<E> implements SortedMultiset<E> {
330888a09821a98ac0680fad765217302858e70fa4Paul Duffin  UnmodifiableSortedMultiset(SortedMultiset<E> delegate) {
340888a09821a98ac0680fad765217302858e70fa4Paul Duffin    super(delegate);
350888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
360888a09821a98ac0680fad765217302858e70fa4Paul Duffin
370888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
380888a09821a98ac0680fad765217302858e70fa4Paul Duffin  protected SortedMultiset<E> delegate() {
390888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return (SortedMultiset<E>) super.delegate();
400888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
410888a09821a98ac0680fad765217302858e70fa4Paul Duffin
420888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
430888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public Comparator<? super E> comparator() {
440888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return delegate().comparator();
450888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
460888a09821a98ac0680fad765217302858e70fa4Paul Duffin
470888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
480888a09821a98ac0680fad765217302858e70fa4Paul Duffin  SortedSet<E> createElementSet() {
490888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return Collections.unmodifiableSortedSet(delegate().elementSet());
500888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
510888a09821a98ac0680fad765217302858e70fa4Paul Duffin
520888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
530888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public SortedSet<E> elementSet() {
540888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return (SortedSet<E>) super.elementSet();
550888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
560888a09821a98ac0680fad765217302858e70fa4Paul Duffin
570888a09821a98ac0680fad765217302858e70fa4Paul Duffin  private transient UnmodifiableSortedMultiset<E> descendingMultiset;
580888a09821a98ac0680fad765217302858e70fa4Paul Duffin
590888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
600888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public SortedMultiset<E> descendingMultiset() {
610888a09821a98ac0680fad765217302858e70fa4Paul Duffin    UnmodifiableSortedMultiset<E> result = descendingMultiset;
620888a09821a98ac0680fad765217302858e70fa4Paul Duffin    if (result == null) {
630888a09821a98ac0680fad765217302858e70fa4Paul Duffin      result = new UnmodifiableSortedMultiset<E>(
640888a09821a98ac0680fad765217302858e70fa4Paul Duffin          delegate().descendingMultiset());
650888a09821a98ac0680fad765217302858e70fa4Paul Duffin      result.descendingMultiset = this;
660888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return descendingMultiset = result;
670888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
680888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return result;
690888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
700888a09821a98ac0680fad765217302858e70fa4Paul Duffin
710888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
720888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public Entry<E> firstEntry() {
730888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return delegate().firstEntry();
740888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
750888a09821a98ac0680fad765217302858e70fa4Paul Duffin
760888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
770888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public Entry<E> lastEntry() {
780888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return delegate().lastEntry();
790888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
800888a09821a98ac0680fad765217302858e70fa4Paul Duffin
810888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
820888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public Entry<E> pollFirstEntry() {
830888a09821a98ac0680fad765217302858e70fa4Paul Duffin    throw new UnsupportedOperationException();
840888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
850888a09821a98ac0680fad765217302858e70fa4Paul Duffin
860888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
870888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public Entry<E> pollLastEntry() {
880888a09821a98ac0680fad765217302858e70fa4Paul Duffin    throw new UnsupportedOperationException();
890888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
900888a09821a98ac0680fad765217302858e70fa4Paul Duffin
910888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
920888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public SortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
930888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return Multisets.unmodifiableSortedMultiset(
940888a09821a98ac0680fad765217302858e70fa4Paul Duffin        delegate().headMultiset(upperBound, boundType));
950888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
960888a09821a98ac0680fad765217302858e70fa4Paul Duffin
970888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
980888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public SortedMultiset<E> subMultiset(
990888a09821a98ac0680fad765217302858e70fa4Paul Duffin      E lowerBound, BoundType lowerBoundType,
1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin      E upperBound, BoundType upperBoundType) {
1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return Multisets.unmodifiableSortedMultiset(delegate().subMultiset(
1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin        lowerBound, lowerBoundType, upperBound, upperBoundType));
1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public SortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return Multisets.unmodifiableSortedMultiset(
1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin        delegate().tailMultiset(lowerBound, boundType));
1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin  private static final long serialVersionUID = 0;
1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin}