content: // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
  //  This source code is licensed under both the GPLv2 (found in the
  //  COPYING file in the root directory) and Apache 2.0 License
  //  (found in the LICENSE.Apache file in the root directory).
  
  package org.rocksdb;
  
  /**
   * <p>Defines the interface for an Iterator which provides
   * access to data one entry at a time. Multiple implementations
   * are provided by this library.  In particular, iterators are provided
   * to access the contents of a DB and Write Batch.</p>
   *
   * <p>Multiple threads can invoke const methods on an RocksIterator without
   * external synchronization, but if any of the threads may call a
   * non-const method, all threads accessing the same RocksIterator must use
   * external synchronization.</p>
   *
   * @see org.rocksdb.RocksObject
   */
  public interface RocksIteratorInterface {
  
    /**
     * <p>An iterator is either positioned at an entry, or
     * not valid.  This method returns true if the iterator is valid.</p>
     *
     * @return true if iterator is valid.
     */
    boolean isValid();
  
    /**
     * <p>Position at the first entry in the source.  The iterator is Valid()
     * after this call if the source is not empty.</p>
     */
    void seekToFirst();
  
    /**
     * <p>Position at the last entry in the source.  The iterator is
     * valid after this call if the source is not empty.</p>
     */
    void seekToLast();
  
    /**
     * <p>Position at the first entry in the source whose key is that or
     * past target.</p>
     *
     * <p>The iterator is valid after this call if the source contains
     * a key that comes at or past target.</p>
     *
     * @param target byte array describing a key or a
     *               key prefix to seek for.
     */
    void seek(byte[] target);
  
    /**
     * <p>Moves to the next entry in the source.  After this call, Valid() is
     * true if the iterator was not positioned at the last entry in the source.</p>
     *
     * <p>REQUIRES: {@link #isValid()}</p>
     */
    void next();
  
    /**
     * <p>Moves to the previous entry in the source.  After this call, Valid() is
     * true if the iterator was not positioned at the first entry in source.</p>
     *
     * <p>REQUIRES: {@link #isValid()}</p>
     */
    void prev();
  
    /**
     * <p>If an error has occurred, return it.  Else return an ok status.
     * If non-blocking IO is requested and this operation cannot be
     * satisfied without doing some IO, then this returns Status::Incomplete().</p>
     *
     * @throws RocksDBException thrown if error happens in underlying
     *                          native library.
     */
    void status() throws RocksDBException;
  }
  