package jane.test.map; import java.util.Enumeration; import java.util.Iterator; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import jane.core.map.LongMap; public final class LongConcurrentHashMapWrap<V> extends LongMap<V> { private final ConcurrentHashMap<Long, V> map; public LongConcurrentHashMapWrap() { map = new ConcurrentHashMap<>(); } public LongConcurrentHashMapWrap(int initialCapacity) { map = new ConcurrentHashMap<>(initialCapacity); } public LongConcurrentHashMapWrap(int initialCapacity, float loadFactor) { map = new ConcurrentHashMap<>(initialCapacity, loadFactor); } public LongConcurrentHashMapWrap(int initialCapacity, float loadFactor, int concurrencyLevel) { map = new ConcurrentHashMap<>(initialCapacity, loadFactor, concurrencyLevel); } @Override public int size() { return map.size(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public V get(long key) { return map.get(key); } public boolean containsKey(long key) { return map.containsKey(key); } public boolean containsValue(V value) { return map.containsValue(value); } @Override public V put(long key, V value) { return map.put(key, value); } @Override public V remove(long key) { return map.remove(key); } @Override public void clear() { map.clear(); } @Override public String toString() { return map.toString(); } public V putIfAbsent(long key, V value) { return map.putIfAbsent(key, value); } @Override public boolean remove(long key, Object value) { return map.remove(key, value); } public boolean replace(long key, V oldValue, V newValue) { return map.replace(key, oldValue, newValue); } public V replace(long key, V value) { return map.replace(key, value); } @Override public LongIterator keyIterator() { return new KeyIterator<>(map); } @Override public Iterator<V> valueIterator() { return map.values().iterator(); } @Override public MapIterator<V> entryIterator() { return new EntryIterator<>(map); } private static final class KeyIterator<V> implements LongIterator { private final Enumeration<Long> it; private KeyIterator(ConcurrentHashMap<Long, V> map) { it = map.keys(); } @Override public long next() { return it.nextElement(); } @Override public boolean hasNext() { return it.hasMoreElements(); } @Override public void remove() { throw new UnsupportedOperationException(); } } private static final class EntryIterator<V> implements MapIterator<V> { private final Iterator<Entry<Long, V>> it; private long key; private V value; private EntryIterator(ConcurrentHashMap<Long, V> map) { it = map.entrySet().iterator(); } @Override public boolean moveToNext() { if(!it.hasNext()) return false; Entry<Long, V> e = it.next(); key = e.getKey(); value = e.getValue(); return true; } @Override public long key() { return key; } @Override public V value() { return value; } @Override public void remove() { throw new UnsupportedOperationException(); } } }