2020-03-10 12:20:34 -07:00
|
|
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
|
|
|
|
// For ease of implementation, our database's interface matches Ethereum's
|
|
|
|
// database implementation. This was to allow use to use Geth code as is for the
|
|
|
|
// EVM chain.
|
|
|
|
|
|
|
|
package database
|
|
|
|
|
|
|
|
// 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 {
|
2020-05-04 20:28:36 -07:00
|
|
|
// Next moves the iterator to the next key/value pair. It returns whether
|
|
|
|
// the iterator is exhausted.
|
2020-03-10 12:20:34 -07:00
|
|
|
Next() bool
|
|
|
|
|
|
|
|
// Error returns any accumulated error. Exhausting all the key/value pairs
|
|
|
|
// is not considered to be an error.
|
|
|
|
Error() error
|
|
|
|
|
2020-05-04 20:28:36 -07:00
|
|
|
// Key returns the key of the current key/value pair, or nil if done.
|
2020-03-10 12:20:34 -07:00
|
|
|
Key() []byte
|
|
|
|
|
2020-05-04 20:28:36 -07:00
|
|
|
// Value returns the value of the current key/value pair, or nil if done.
|
2020-03-10 12:20:34 -07:00
|
|
|
Value() []byte
|
|
|
|
|
2020-05-04 20:28:36 -07:00
|
|
|
// Release releases associated resources. Release should always succeed and
|
|
|
|
// can be called multiple times without causing error.
|
2020-03-10 12:20:34 -07:00
|
|
|
Release()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Iteratee wraps the NewIterator methods of a backing data store.
|
|
|
|
type Iteratee interface {
|
2020-05-04 20:28:36 -07:00
|
|
|
// NewIterator creates a binary-alphabetical iterator over the entire
|
|
|
|
// keyspace contained within the key-value database.
|
2020-03-10 12:20:34 -07:00
|
|
|
NewIterator() Iterator
|
|
|
|
|
2020-05-04 20:28:36 -07:00
|
|
|
// 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).
|
2020-03-10 12:20:34 -07:00
|
|
|
NewIteratorWithStart(start []byte) Iterator
|
|
|
|
|
2020-05-04 20:28:36 -07:00
|
|
|
// NewIteratorWithPrefix creates a binary-alphabetical iterator over a
|
|
|
|
// subset of database content with a particular key prefix.
|
2020-03-10 12:20:34 -07:00
|
|
|
NewIteratorWithPrefix(prefix []byte) Iterator
|
|
|
|
|
2020-05-04 20:28:36 -07:00
|
|
|
// NewIteratorWithStartAndPrefix creates a binary-alphabetical iterator over
|
|
|
|
// a subset of database content with a particular key prefix starting at a
|
2020-03-10 12:20:34 -07:00
|
|
|
// specified key.
|
|
|
|
NewIteratorWithStartAndPrefix(start, prefix []byte) Iterator
|
|
|
|
}
|