package org.batfish.datamodel.collections;
import java.util.Map;
import java.util.Set;
public abstract class AbstractMultiSet<E> implements MultiSet<E> {
private final Map<E, Integer> _map;
public AbstractMultiSet() {
_map = initializeMap();
}
@Override
public final void add(E e) {
Integer oldCount = _map.get(e);
if (oldCount == null) {
_map.put(e, 1);
}
else {
_map.put(e, oldCount + 1);
}
}
@Override
public final void add(Set<E> set) {
for (E e : set) {
add(e);
}
}
@Override
public final int count(E e) {
Integer count = _map.get(e);
if (count == null) {
return 0;
}
else {
return count;
}
}
protected abstract <F> MultiSet<F> create();
@Override
public final Set<E> elements() {
return _map.keySet();
}
protected abstract Map<E, Integer> initializeMap();
@Override
public MultiSet<Integer> quantityHistogram() {
MultiSet<Integer> quantityHistogram = this.<Integer> create();
for (int i : _map.values()) {
quantityHistogram.add(i);
}
return quantityHistogram;
}
}