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}