mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
Select OF_4_BYTES for Byteable values. (possibly OF_8_BYTES in the future)
This commit is contained in:
@@ -119,7 +119,7 @@ public abstract class AbstractChronicleMapBuilder<K, V,
|
||||
private int valueSize = 0;
|
||||
private V sampleValue;
|
||||
private int entrySize = 0;
|
||||
private Alignment alignment = Alignment.NO_ALIGNMENT;
|
||||
private Alignment alignment;
|
||||
private long entries = 1 << 20; // 1 million by default
|
||||
private long lockTimeOut = 2000;
|
||||
private TimeUnit lockTimeOutUnit = TimeUnit.MILLISECONDS;
|
||||
@@ -142,9 +142,14 @@ public abstract class AbstractChronicleMapBuilder<K, V,
|
||||
private StatelessBuilder statelessBuilder;
|
||||
private File file;
|
||||
|
||||
AbstractChronicleMapBuilder(Class<K> keyClass, Class<V> valueClass) {
|
||||
AbstractChronicleMapBuilder(Class<K> keyClass, Class<V> valueClass, Alignment alignment) {
|
||||
keyBuilder = new SerializationBuilder<K>(keyClass, SerializationBuilder.Role.KEY);
|
||||
valueBuilder = new SerializationBuilder<V>(valueClass, SerializationBuilder.Role.VALUE);
|
||||
this.alignment = alignment;
|
||||
}
|
||||
|
||||
protected static boolean offHeapReference(Class valueClass) {
|
||||
return Byteable.class.isAssignableFrom(valueClass);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -73,7 +73,11 @@ public final class ChronicleMapBuilder<K, V>
|
||||
}
|
||||
|
||||
ChronicleMapBuilder(Class<K> keyClass, Class<V> valueClass) {
|
||||
super(keyClass, valueClass);
|
||||
super(keyClass, valueClass, getAlignmentFor(valueClass));
|
||||
}
|
||||
|
||||
private static <V> Alignment getAlignmentFor(Class<V> valueClass) {
|
||||
return offHeapReference(valueClass) ? Alignment.OF_4_BYTES : Alignment.NO_ALIGNMENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,7 +25,7 @@ public final class OffHeapUpdatableChronicleMapBuilder<K, V>
|
||||
|
||||
public static <K, V> OffHeapUpdatableChronicleMapBuilder<K, V> of(
|
||||
@NotNull Class<K> keyClass, @NotNull Class<V> valueClass) {
|
||||
if (!Byteable.class.isAssignableFrom(valueClass)) {
|
||||
if (!offHeapReference(valueClass)) {
|
||||
if (!valueClass.isInterface()) {
|
||||
throw new IllegalArgumentException(
|
||||
"Value class should be either Byteable subclass or interface," +
|
||||
@@ -37,7 +37,7 @@ public final class OffHeapUpdatableChronicleMapBuilder<K, V>
|
||||
}
|
||||
|
||||
OffHeapUpdatableChronicleMapBuilder(Class<K> keyClass, Class<V> valueClass) {
|
||||
super(keyClass, valueClass);
|
||||
super(keyClass, valueClass, Alignment.OF_4_BYTES);
|
||||
prepareValueBytesOnAcquire(new ZeroOutValueBytes<K, V>(valueSize()));
|
||||
}
|
||||
|
||||
|
||||
@@ -764,6 +764,13 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, KI>,
|
||||
|
||||
V acquire(ThreadLocalCopies copies, MKI metaKeyInterop, KI keyInterop, K key, V usingValue,
|
||||
long hash2, boolean create) {
|
||||
V v = acquire0(copies, metaKeyInterop, keyInterop, key, usingValue, hash2, false);
|
||||
if (create && v == null)
|
||||
v = acquire0(copies, metaKeyInterop, keyInterop, key, usingValue, hash2, true);
|
||||
return v;
|
||||
}
|
||||
V acquire0(ThreadLocalCopies copies, MKI metaKeyInterop, KI keyInterop, K key, V usingValue,
|
||||
long hash2, boolean create) {
|
||||
if (create)
|
||||
writeLock();
|
||||
else
|
||||
|
||||
@@ -62,7 +62,7 @@ class VanillaShortShortMultiMap implements MultiMap {
|
||||
public VanillaShortShortMultiMap(Bytes multiMapBytes, Bytes multiMapBitSetBytes) {
|
||||
long capacity = multiMapBytes.capacity() / ENTRY_SIZE;
|
||||
assert isPowerOf2(capacity);
|
||||
assert (capacity / 2L) < MAX_CAPACITY;
|
||||
assert (capacity / 2L) <= MAX_CAPACITY;
|
||||
this.capacity = (int) capacity;
|
||||
capacityMask = capacity - 1L;
|
||||
capacityMask2 = (capacity - 1L) * ENTRY_SIZE;
|
||||
|
||||
Reference in New Issue
Block a user