package jelectrum; import org.mapdb.DB; import java.util.Map; import java.util.Set; import java.util.Collection; public class FragMap<K,V> implements Map<K,V> { private int segments; private Map<K,V> frags[]; public FragMap(DB db, String name, int segments) { this.segments = segments; frags = new Map[segments]; for(int i=0; i<segments; i++) { frags[i] = db.getHashMap(name +"_" + i); } } public void clear() { for(int i=0; i<segments; i++) { frags[i].clear(); } } public boolean containsKey(Object key) { int seg = getSegmentForObject(key); return frags[seg].containsKey(key); } public boolean containsValue(Object value) { throw new RuntimeException("not implemented - is stupid"); } public Set<Map.Entry<K,V>> entrySet() { throw new RuntimeException("not implemented - is stupid"); } public boolean equals(Object o) { throw new RuntimeException("not implemented - is stupid"); } public V get(Object key) { int seg = getSegmentForObject(key); return frags[seg].get(key); } public int hashCode() { throw new RuntimeException("not implemented - is stupid"); } public boolean isEmpty() { for(int i=0; i<segments; i++) { if (!frags[i].isEmpty()) return false; } return true; } public int size() { int sz = 0; for(int i=0; i<segments; i++) { sz += frags[i].size(); } return sz; } public Set<K> keySet() { throw new RuntimeException("not implemented - is stupid"); } public V put(K key, V value) { int seg = getSegmentForObject(key); return frags[seg].put(key, value); } public void putAll(Map<? extends K,? extends V> m) { throw new RuntimeException("not implemented - is stupid"); } public V remove(Object key) { int seg = getSegmentForObject(key); return frags[seg].remove(key); } public Collection<V> values() { throw new RuntimeException("not implemented - is stupid"); } private int getSegmentForObject(Object o) { int hc = o.hashCode(); hc = Math.abs(hc); if (hc < 0) hc=0; int seg = hc % segments; return seg; } }