OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / tmlibs / db / db.go
1 package db
2
3 import . "github.com/tendermint/tmlibs/common"
4
5 type DB interface {
6         Get([]byte) []byte
7         Set([]byte, []byte)
8         SetSync([]byte, []byte)
9         Delete([]byte)
10         DeleteSync([]byte)
11         Close()
12         NewBatch() Batch
13         Iterator() Iterator
14         IteratorPrefix([]byte) Iterator
15
16         // For debugging
17         Print()
18         Stats() map[string]string
19 }
20
21 type Batch interface {
22         Set(key, value []byte)
23         Delete(key []byte)
24         Write()
25 }
26
27 type Iterator interface {
28         Next() bool
29
30         Key() []byte
31         Value() []byte
32
33         Release()
34         Error() error
35 }
36
37 //-----------------------------------------------------------------------------
38
39 const (
40         LevelDBBackendStr   = "leveldb" // legacy, defaults to goleveldb.
41         CLevelDBBackendStr  = "cleveldb"
42         GoLevelDBBackendStr = "goleveldb"
43         MemDBBackendStr     = "memdb"
44 )
45
46 type dbCreator func(name string, dir string) (DB, error)
47
48 var backends = map[string]dbCreator{}
49
50 func registerDBCreator(backend string, creator dbCreator, force bool) {
51         _, ok := backends[backend]
52         if !force && ok {
53                 return
54         }
55         backends[backend] = creator
56 }
57
58 func NewDB(name string, backend string, dir string) DB {
59         db, err := backends[backend](name, dir)
60         if err != nil {
61                 PanicSanity(Fmt("Error initializing DB: %v", err))
62         }
63         return db
64 }