OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / database / leveldb / db.go
diff --git a/database/leveldb/db.go b/database/leveldb/db.go
new file mode 100644 (file)
index 0000000..38cab5b
--- /dev/null
@@ -0,0 +1,65 @@
+package db
+
+import . "github.com/tendermint/tmlibs/common"
+
+type DB interface {
+       Get([]byte) []byte
+       Set([]byte, []byte)
+       SetSync([]byte, []byte)
+       Delete([]byte)
+       DeleteSync([]byte)
+       Close()
+       NewBatch() Batch
+       Iterator() Iterator
+       IteratorPrefix([]byte) Iterator
+
+       // For debugging
+       Print()
+       Stats() map[string]string
+}
+
+type Batch interface {
+       Set(key, value []byte)
+       Delete(key []byte)
+       Write()
+}
+
+type Iterator interface {
+       Next() bool
+
+       Key() []byte
+       Value() []byte
+       Seek([]byte) bool
+
+       Release()
+       Error() error
+}
+
+//-----------------------------------------------------------------------------
+
+const (
+       LevelDBBackendStr   = "leveldb" // legacy, defaults to goleveldb.
+       CLevelDBBackendStr  = "cleveldb"
+       GoLevelDBBackendStr = "goleveldb"
+       MemDBBackendStr     = "memdb"
+)
+
+type dbCreator func(name string, dir string) (DB, error)
+
+var backends = map[string]dbCreator{}
+
+func registerDBCreator(backend string, creator dbCreator, force bool) {
+       _, ok := backends[backend]
+       if !force && ok {
+               return
+       }
+       backends[backend] = creator
+}
+
+func NewDB(name string, backend string, dir string) DB {
+       db, err := backends[backend](name, dir)
+       if err != nil {
+               PanicSanity(Fmt("Error initializing DB: %v", err))
+       }
+       return db
+}