forked from ava-labs/avalanchego
-
Notifications
You must be signed in to change notification settings - Fork 4
/
iterator.go
62 lines (51 loc) · 2.4 KB
/
iterator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright (C) 2019-2021, 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.
//
// 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 successfully moved to a new key/value pair.
// The iterator may return false if the underlying database has been closed
// before the iteration has completed, in which case future calls to Error()
// must return [ErrClosed].
Next() bool
// Error returns any accumulated error. Exhausting all the key/value pairs
// is not considered to be an error.
// Error should be called after all key/value pairs have been exhausted ie.
// after Next() has returned false.
Error() error
// Key returns the key of the current key/value pair, or nil if done.
Key() []byte
// Value returns the value of the current key/value pair, or nil if done.
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 an iterator over the entire keyspace contained within
// the key-value database.
NewIterator() Iterator
// NewIteratorWithStart creates an iterator over a subset of database
// content starting at a particular initial key.
NewIteratorWithStart(start []byte) Iterator
// NewIteratorWithPrefix creates an iterator over a subset of database
// content with a particular key prefix.
NewIteratorWithPrefix(prefix []byte) Iterator
// NewIteratorWithStartAndPrefix creates an iterator over a subset of
// database content with a particular key prefix starting at a specified
// key.
NewIteratorWithStartAndPrefix(start, prefix []byte) Iterator
}