mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
HCOLL-378 #36 Add ChronicleHashBuilder.recoverPersistedTo() and ChronicleHashInstanceBuilder.recover() functionality
This commit is contained in:
@@ -121,7 +121,7 @@ public abstract class CompactOffHeapLinearHashTable {
|
||||
return (entry >>> keyBits) & valueMask;
|
||||
}
|
||||
|
||||
long entry(long key, long value) {
|
||||
public long entry(long key, long value) {
|
||||
return key | (value << keyBits);
|
||||
}
|
||||
|
||||
@@ -143,9 +143,9 @@ public abstract class CompactOffHeapLinearHashTable {
|
||||
writeEntryVolatile(addr, pos, key(currentEntry), value);
|
||||
}
|
||||
|
||||
abstract void writeEntry(long addr, long pos, long newEntry);
|
||||
public abstract void writeEntry(long addr, long pos, long newEntry);
|
||||
|
||||
abstract void clearEntry(long addr, long pos);
|
||||
public abstract void clearEntry(long addr, long pos);
|
||||
|
||||
/**
|
||||
* Returns "insert" position in terms of consequent putValue()
|
||||
@@ -176,4 +176,17 @@ public abstract class CompactOffHeapLinearHashTable {
|
||||
clearEntry(addr, posToRemove);
|
||||
return posToRemove;
|
||||
}
|
||||
|
||||
public void insert(long addr, long key, long value) {
|
||||
long startPos = hlPos(key);
|
||||
long pos = startPos;
|
||||
do {
|
||||
if (empty(readEntry(addr, pos))) {
|
||||
writeEntry(addr, pos, entry(key, value));
|
||||
return;
|
||||
}
|
||||
pos = step(pos);
|
||||
} while (pos != startPos);
|
||||
throw new AssertionError("HashLookup overflow should never occur");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user