/* * Decompiled with CFR 0.152. */ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; import com.google.common.base.Objects; import com.google.common.collect.Iterators; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; import java.util.AbstractCollection; import java.util.Collection; import java.util.Iterator; import java.util.Set; import javax.annotation.Nullable; @GwtCompatible abstract class AbstractMultiset extends AbstractCollection implements Multiset { private transient Set elementSet; private transient Set> entrySet; AbstractMultiset() { } @Override public int size() { return Multisets.sizeImpl(this); } @Override public boolean isEmpty() { return this.entrySet().isEmpty(); } @Override public boolean contains(@Nullable Object element) { return this.count(element) > 0; } @Override public Iterator iterator() { return Multisets.iteratorImpl(this); } @Override public int count(@Nullable Object element) { for (Multiset.Entry entry : this.entrySet()) { if (!Objects.equal(entry.getElement(), element)) continue; return entry.getCount(); } return 0; } @Override public boolean add(@Nullable E element) { this.add(element, 1); return true; } @Override public int add(@Nullable E element, int occurrences) { throw new UnsupportedOperationException(); } @Override public boolean remove(@Nullable Object element) { return this.remove(element, 1) > 0; } @Override public int remove(@Nullable Object element, int occurrences) { throw new UnsupportedOperationException(); } @Override public int setCount(@Nullable E element, int count) { return Multisets.setCountImpl(this, element, count); } @Override public boolean setCount(@Nullable E element, int oldCount, int newCount) { return Multisets.setCountImpl(this, element, oldCount, newCount); } @Override public boolean addAll(Collection elementsToAdd) { return Multisets.addAllImpl(this, elementsToAdd); } @Override public boolean removeAll(Collection elementsToRemove) { return Multisets.removeAllImpl(this, elementsToRemove); } @Override public boolean retainAll(Collection elementsToRetain) { return Multisets.retainAllImpl(this, elementsToRetain); } @Override public void clear() { Iterators.clear(this.entryIterator()); } @Override public Set elementSet() { Set result = this.elementSet; if (result == null) { this.elementSet = result = this.createElementSet(); } return result; } Set createElementSet() { return new ElementSet(); } abstract Iterator> entryIterator(); abstract int distinctElements(); @Override public Set> entrySet() { Set>> result = this.entrySet; if (result == null) { this.entrySet = result = this.createEntrySet(); } return result; } Set> createEntrySet() { return new EntrySet(); } @Override public boolean equals(@Nullable Object object) { return Multisets.equalsImpl(this, object); } @Override public int hashCode() { return this.entrySet().hashCode(); } @Override public String toString() { return this.entrySet().toString(); } class EntrySet extends Multisets.EntrySet { EntrySet() { } @Override Multiset multiset() { return AbstractMultiset.this; } @Override public Iterator> iterator() { return AbstractMultiset.this.entryIterator(); } @Override public int size() { return AbstractMultiset.this.distinctElements(); } } class ElementSet extends Multisets.ElementSet { ElementSet() { } @Override Multiset multiset() { return AbstractMultiset.this; } } }