-public class SparseJournalIndex implements JournalIndex {
- private static final int MIN_DENSITY = 1000;
- private final int density;
- private final TreeMap<Long, Integer> positions = new TreeMap<>();
-
- public SparseJournalIndex(double density) {
- this.density = (int) Math.ceil(MIN_DENSITY / (density * MIN_DENSITY));
- }
-
- @Override
- public void index(long index, int position) {
- if (index % density == 0) {
- positions.put(index, position);
+public final class SparseJournalIndex implements JournalIndex {
+ private static final int MIN_DENSITY = 1000;
+
+ private final int density;
+ private final TreeMap<Long, Integer> positions = new TreeMap<>();
+
+ public SparseJournalIndex() {
+ density = MIN_DENSITY;
+ }
+
+ public SparseJournalIndex(final double density) {
+ this.density = (int) Math.ceil(MIN_DENSITY / (density * MIN_DENSITY));
+ }
+
+ @Override
+ public void index(final long index, final int position) {
+ if (index % density == 0) {
+ positions.put(index, position);
+ }
+ }
+
+ @Override
+ public Position lookup(final long index) {
+ return Position.ofNullable(positions.floorEntry(index));
+ }
+
+ @Override
+ public Position truncate(final long index) {
+ positions.tailMap(index, false).clear();
+ return Position.ofNullable(positions.lastEntry());