aboutsummaryrefslogblamecommitdiffstats
path: root/ethdb/iterator.go
blob: 419e9bdfc21f1aa0be832f856c36995c2e90f481 (plain) (tree)
























































                                                                                        




                                                                                       



                                                                                     
// Copyright 2018 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.

package ethdb

// Iterator iterates over a database's key/value pairs in ascending key order.
//
// When it encounters an error any seek will return false and will yield no key/
// value pairs. The error can be queried by calling the Error method. Calling
// Release is still necessary.
//
// An iterator must be released after use, but it is not necessary to read an
// iterator until exhaustion. An iterator is not safe for concurrent use, but it
// is safe to use multiple iterators concurrently.
type Iterator interface {
    // Next moves the iterator to the next key/value pair. It returns whether the
    // iterator is exhausted.
    Next() bool

    // Error returns any accumulated error. Exhausting all the key/value pairs
    // is not considered to be an error.
    Error() error

    // Key returns the key of the current key/value pair, or nil if done. The caller
    // should not modify the contents of the returned slice, and its contents may
    // change on the next call to Next.
    Key() []byte

    // Value returns the value of the current key/value pair, or nil if done. The
    // caller should not modify the contents of the returned slice, and its contents
    // may change on the next call to Next.
    Value() []byte

    // Release releases associated resources. Release should always succeed and can
    // be called multiple times without causing error.
    Release()
}

// Iteratee wraps the NewIterator methods of a backing data store.
type Iteratee interface {
    // NewIterator creates a binary-alphabetical iterator over the entire keyspace
    // contained within the key-value database.
    NewIterator() Iterator

    // NewIteratorWithStart creates a binary-alphabetical iterator over a subset of
    // database content starting at a particular initial key (or after, if it does
    // not exist).
    NewIteratorWithStart(start []byte) Iterator

    // NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset
    // of database content with a particular key prefix.
    NewIteratorWithPrefix(prefix []byte) Iterator
}