11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * in compliance with the License. You may obtain a copy of the License at
67dd252788645e940eada959bdde927426e2531c9Paul Duffin *
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
87dd252788645e940eada959bdde927426e2531c9Paul Duffin *
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software distributed under the License
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * or implied. See the License for the specific language governing permissions and limitations under
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * the License.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect;
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkNotNull;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Collection;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport javax.annotation.Nullable;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * An empty immutable sorted multiset.
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
290888a09821a98ac0680fad765217302858e70fa4Paul Duffin@SuppressWarnings("serial") // Uses writeReplace, not default serialization
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertfinal class EmptyImmutableSortedMultiset<E> extends ImmutableSortedMultiset<E> {
317dd252788645e940eada959bdde927426e2531c9Paul Duffin  private final ImmutableSortedSet<E> elementSet;
327dd252788645e940eada959bdde927426e2531c9Paul Duffin
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  EmptyImmutableSortedMultiset(Comparator<? super E> comparator) {
347dd252788645e940eada959bdde927426e2531c9Paul Duffin    this.elementSet = ImmutableSortedSet.emptySet(comparator);
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
370888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Entry<E> firstEntry() {
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return null;
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
420888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Entry<E> lastEntry() {
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return null;
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
470888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public int count(@Nullable Object element) {
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return 0;
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
537dd252788645e940eada959bdde927426e2531c9Paul Duffin  public boolean containsAll(Collection<?> targets) {
547dd252788645e940eada959bdde927426e2531c9Paul Duffin    return targets.isEmpty();
557dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
567dd252788645e940eada959bdde927426e2531c9Paul Duffin
570888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
587dd252788645e940eada959bdde927426e2531c9Paul Duffin  public int size() {
597dd252788645e940eada959bdde927426e2531c9Paul Duffin    return 0;
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
637dd252788645e940eada959bdde927426e2531c9Paul Duffin  public ImmutableSortedSet<E> elementSet() {
647dd252788645e940eada959bdde927426e2531c9Paul Duffin    return elementSet;
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
680888a09821a98ac0680fad765217302858e70fa4Paul Duffin  Entry<E> getEntry(int index) {
697dd252788645e940eada959bdde927426e2531c9Paul Duffin    throw new AssertionError("should never be called");
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public ImmutableSortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkNotNull(upperBound);
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkNotNull(boundType);
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return this;
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public ImmutableSortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkNotNull(lowerBound);
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkNotNull(boundType);
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return this;
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
877dd252788645e940eada959bdde927426e2531c9Paul Duffin  public UnmodifiableIterator<E> iterator() {
887dd252788645e940eada959bdde927426e2531c9Paul Duffin    return Iterators.emptyIterator();
897dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
907dd252788645e940eada959bdde927426e2531c9Paul Duffin
917dd252788645e940eada959bdde927426e2531c9Paul Duffin  @Override
927dd252788645e940eada959bdde927426e2531c9Paul Duffin  public boolean equals(@Nullable Object object) {
937dd252788645e940eada959bdde927426e2531c9Paul Duffin    if (object instanceof Multiset) {
947dd252788645e940eada959bdde927426e2531c9Paul Duffin      Multiset<?> other = (Multiset<?>) object;
957dd252788645e940eada959bdde927426e2531c9Paul Duffin      return other.isEmpty();
967dd252788645e940eada959bdde927426e2531c9Paul Duffin    }
977dd252788645e940eada959bdde927426e2531c9Paul Duffin    return false;
987dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
997dd252788645e940eada959bdde927426e2531c9Paul Duffin
1007dd252788645e940eada959bdde927426e2531c9Paul Duffin  @Override
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  boolean isPartialView() {
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return false;
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1047dd252788645e940eada959bdde927426e2531c9Paul Duffin
1057dd252788645e940eada959bdde927426e2531c9Paul Duffin  @Override
1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin  int copyIntoArray(Object[] dst, int offset) {
1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return offset;
1087dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
1097dd252788645e940eada959bdde927426e2531c9Paul Duffin
1107dd252788645e940eada959bdde927426e2531c9Paul Duffin  @Override
1117dd252788645e940eada959bdde927426e2531c9Paul Duffin  public ImmutableList<E> asList() {
1127dd252788645e940eada959bdde927426e2531c9Paul Duffin    return ImmutableList.of();
1137dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
115