private V put0(K key, V value, boolean replaceIfPresent) { if (!kClass.isInstance(key)) return null; DirectBytes bytes = getKeyAsBytes(key); long hash = longHashCode(bytes); int segmentNum = (int) (hash & (builder.segments() - 1)); int hash2 = (int) (hash / builder.segments()); // System.out.println("[" + key + "] s: " + segmentNum + " h2: " + hash2); return segments[segmentNum].put(bytes, value, hash2, replaceIfPresent); }
private V removeUsing(Object key, V value) { if (!kClass.isInstance(key)) return null; DirectBytes bytes = getKeyAsBytes((K) key); long hash = longHashCode(bytes); int segmentNum = (int) (hash & (builder.segments() - 1)); int hash2 = (int) (hash / builder.segments()); // System.out.println("[" + key + "] s: " + segmentNum + " h2: " + hash2); return segments[segmentNum].remove(bytes, value, hash2); }
public VanillaSharedHashMap( SharedHashMapBuilder builder, MappedStore ms, Class<K> kClass, Class<V> vClass) { this.builder = builder; lockTimeOutNS = builder.lockTimeOutMS() * 1000000; this.ms = ms; this.kClass = kClass; this.vClass = vClass; @SuppressWarnings("unchecked") Segment[] segments = (VanillaSharedHashMap<K, V>.Segment[]) new VanillaSharedHashMap.Segment[builder.segments()]; this.segments = segments; long offset = SharedHashMapBuilder.HEADER_SIZE; long segmentSize = builder.segmentSize(); for (int i = 0; i < this.segments.length; i++) { this.segments[i] = new Segment(ms.createSlice(offset, segmentSize)); offset += segmentSize; } }