@Override public Long readKey(long encoding, int hashCode) { int keyEncoding = SplitStorageEngine.keyEncoding(encoding); return (((long) (hashCode ^ keyEncoding)) << 32) | (keyEncoding & 0xffffffffL); }
@Override public V readValue(long encoding) { return valueStorage.read(SplitStorageEngine.valueEncoding(encoding)); }
@Override public void freeMapping(long encoding, int hash, boolean removal) { keyStorageEngine.free(keyEncoding(encoding)); valueStorageEngine.free(valueEncoding(encoding)); }
@Override public Long writeMapping(Long key, V value, int hash, int metadata) { Integer valueEncoding = valueStorage.write(value, hash); if (valueEncoding == null) { return null; } else { return SplitStorageEngine.encoding(key.intValue(), valueEncoding); } }
public static <K, V> Factory<SplitStorageEngine<K, V>> createFactory(final Factory<? extends HalfStorageEngine<K>> keyFactory, final Factory<? extends HalfStorageEngine<V>> valueFactory) { return () -> new SplitStorageEngine<>(keyFactory.newInstance(), valueFactory.newInstance()); }
@Override public boolean equalsValue(Object value, long encoding) { return valueStorage.equals(value, SplitStorageEngine.valueEncoding(encoding)); }
@Override public void freeMapping(long encoding, int hash, boolean removal) { keyStorageEngine.free(keyEncoding(encoding)); valueStorageEngine.free(valueEncoding(encoding)); }
@Override public Long writeMapping(Long key, V value, int hash, int metadata) { Integer valueEncoding = valueStorage.write(value, hash); if (valueEncoding == null) { return null; } else { return SplitStorageEngine.encoding(key.intValue(), valueEncoding); } }
public static <K, V> Factory<SplitStorageEngine<K, V>> createFactory(final Factory<? extends HalfStorageEngine<K>> keyFactory, final Factory<? extends HalfStorageEngine<V>> valueFactory) { return () -> new SplitStorageEngine<>(keyFactory.newInstance(), valueFactory.newInstance()); }
@SuppressWarnings("unchecked") @Override public V readValue(long encoding) { return (V) valueStorageEngine.read(valueEncoding(encoding)); }
@Override public Long readKey(long encoding, int hashCode) { int keyEncoding = SplitStorageEngine.keyEncoding(encoding); return (((long) (hashCode ^ keyEncoding)) << 32) | (keyEncoding & 0xffffffffL); }
@Override public Long writeMapping(K key, V value, int hash, int metadata) { Integer keyEncoding = keyStorageEngine.write(key, hash); if (keyEncoding == null) { return null; } Integer valueEncoding = valueStorageEngine.write(value, hash); if (valueEncoding == null) { keyStorageEngine.free(keyEncoding); return null; } return encoding(keyEncoding, valueEncoding); }
@Override public V readValue(long encoding) { return valueStorage.read(SplitStorageEngine.valueEncoding(encoding)); }
@Override public boolean equalsKey(Object key, long encoding) { return key instanceof Long && ((Long) key).intValue() == SplitStorageEngine.keyEncoding(encoding); }
@Override public Long writeMapping(K key, V value, int hash, int metadata) { Integer keyEncoding = keyStorageEngine.write(key, hash); if (keyEncoding == null) { return null; } Integer valueEncoding = valueStorageEngine.write(value, hash); if (valueEncoding == null) { keyStorageEngine.free(keyEncoding); return null; } return encoding(keyEncoding, valueEncoding); }
@SuppressWarnings("unchecked") @Override public V readValue(long encoding) { return (V) valueStorageEngine.read(valueEncoding(encoding)); }
@Override public boolean equalsKey(Object key, long encoding) { return key instanceof Long && ((Long) key).intValue() == SplitStorageEngine.keyEncoding(encoding); }
@Override public void freeMapping(long encoding, int hash, boolean removal) { valueStorage.free(SplitStorageEngine.valueEncoding(encoding)); }
@SuppressWarnings("unchecked") @Override public K readKey(long encoding, int hashCode) { return (K) keyStorageEngine.read(keyEncoding(encoding)); }
@Override public boolean equalsValue(Object value, long encoding) { return valueStorage.equals(value, SplitStorageEngine.valueEncoding(encoding)); }