in src/main/java/com/spotify/sparkey/SingleThreadedSparkeyReader.java [87:142]
public Iterator<SparkeyReader.Entry> iterator() {
SparkeyLogIterator logIterator;
final IndexHash indexHash;
try {
logIterator = new SparkeyLogIterator(logFile, -1, index.header.getDataEnd());
indexHash = index.duplicate();
} catch (IOException e) {
throw new RuntimeException(e);
}
final Iterator<SparkeyReader.Entry> iterator = logIterator.iterator();
return new Iterator<SparkeyReader.Entry>() {
private SparkeyReader.Entry entry;
private boolean ready;
public boolean hasNext() {
if (ready) {
return true;
}
while (iterator.hasNext()) {
// Safe cast, since the iterator is guaranteed to be a SparkeyLogIterator
SparkeyLogIterator.Entry next = (SparkeyLogIterator.Entry) iterator.next();
if (next.getType() == SparkeyReader.Type.PUT) {
int keyLen = next.getKeyLength();
try {
if (isValid(keyLen, next.getKeyBuf(), next.getPosition(), next.getEntryIndex(), indexHash)) {
entry = next;
ready = true;
return true;
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
indexHash.closeDuplicate();
return false;
}
public Entry next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
ready = false;
Entry localEntry = entry;
entry = null;
return localEntry;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}