76 lines
2.7 KiB
C
76 lines
2.7 KiB
C
|
// Copyright (c) 2013, Facebook, Inc. All rights reserved.
|
||
|
// This source code is licensed under the BSD-style license found in the
|
||
|
// LICENSE file in the root directory of this source tree. An additional grant
|
||
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||
|
//
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "rocksdb/iterator.h"
|
||
|
#include "rocksdb/status.h"
|
||
|
|
||
|
namespace rocksdb {
|
||
|
|
||
|
class InternalIterator : public Cleanable {
|
||
|
public:
|
||
|
InternalIterator() {}
|
||
|
virtual ~InternalIterator() {}
|
||
|
|
||
|
// An iterator is either positioned at a key/value pair, or
|
||
|
// not valid. This method returns true iff the iterator is valid.
|
||
|
virtual bool Valid() const = 0;
|
||
|
|
||
|
// Position at the first key in the source. The iterator is Valid()
|
||
|
// after this call iff the source is not empty.
|
||
|
virtual void SeekToFirst() = 0;
|
||
|
|
||
|
// Position at the last key in the source. The iterator is
|
||
|
// Valid() after this call iff the source is not empty.
|
||
|
virtual void SeekToLast() = 0;
|
||
|
|
||
|
// Position at the first key in the source that at or past target
|
||
|
// The iterator is Valid() after this call iff the source contains
|
||
|
// an entry that comes at or past target.
|
||
|
virtual void Seek(const Slice& target) = 0;
|
||
|
|
||
|
// Moves to the next entry in the source. After this call, Valid() is
|
||
|
// true iff the iterator was not positioned at the last entry in the source.
|
||
|
// REQUIRES: Valid()
|
||
|
virtual void Next() = 0;
|
||
|
|
||
|
// Moves to the previous entry in the source. After this call, Valid() is
|
||
|
// true iff the iterator was not positioned at the first entry in source.
|
||
|
// REQUIRES: Valid()
|
||
|
virtual void Prev() = 0;
|
||
|
|
||
|
// Return the key for the current entry. The underlying storage for
|
||
|
// the returned slice is valid only until the next modification of
|
||
|
// the iterator.
|
||
|
// REQUIRES: Valid()
|
||
|
virtual Slice key() const = 0;
|
||
|
|
||
|
// Return the value for the current entry. The underlying storage for
|
||
|
// the returned slice is valid only until the next modification of
|
||
|
// the iterator.
|
||
|
// REQUIRES: !AtEnd() && !AtStart()
|
||
|
virtual Slice value() const = 0;
|
||
|
|
||
|
// 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().
|
||
|
virtual Status status() const = 0;
|
||
|
|
||
|
private:
|
||
|
// No copying allowed
|
||
|
InternalIterator(const InternalIterator&) = delete;
|
||
|
InternalIterator& operator=(const InternalIterator&) = delete;
|
||
|
};
|
||
|
|
||
|
// Return an empty iterator (yields nothing).
|
||
|
extern InternalIterator* NewEmptyInternalIterator();
|
||
|
|
||
|
// Return an empty iterator with the specified status.
|
||
|
extern InternalIterator* NewErrorInternalIterator(const Status& status);
|
||
|
|
||
|
} // namespace rocksdb
|