public Iterator iterator()

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();
      }
    };
  }