syncbase.store: memstore stream and snapshot

Change-Id: I10bd79f30838e6a0ab04dec2dc455f419f083b6f
diff --git a/services/syncbase/store/leveldb/db.go b/services/syncbase/store/leveldb/db.go
index 57556c1..b15374d 100644
--- a/services/syncbase/store/leveldb/db.go
+++ b/services/syncbase/store/leveldb/db.go
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Package leveldb provides a LevelDB-based implementation of store.Store.
 package leveldb
 
 // #cgo LDFLAGS: -lleveldb
@@ -16,9 +17,9 @@
 	"v.io/syncbase/x/ref/services/syncbase/store"
 )
 
-// DB is a wrapper around LevelDB that implements the store.Store interface.
+// db is a wrapper around LevelDB that implements the store.Store interface.
 // TODO(rogulenko): ensure thread safety.
-type DB struct {
+type db struct {
 	cDb *C.leveldb_t
 	// Default read/write options.
 	readOptions  *C.leveldb_readoptions_t
@@ -28,11 +29,11 @@
 	mu sync.Mutex
 }
 
-var _ store.Store = (*DB)(nil)
+var _ store.Store = (*db)(nil)
 
 // Open opens the database located at the given path, creating it if it doesn't
 // exist.
-func Open(path string) (*DB, error) {
+func Open(path string) (store.Store, error) {
 	var cError *C.char
 	cPath := C.CString(path)
 	defer C.free(unsafe.Pointer(cPath))
@@ -48,7 +49,7 @@
 	}
 	readOptions := C.leveldb_readoptions_create()
 	C.leveldb_readoptions_set_verify_checksums(readOptions, 1)
-	return &DB{
+	return &db{
 		cDb:          cDb,
 		readOptions:  readOptions,
 		writeOptions: C.leveldb_writeoptions_create(),
@@ -56,10 +57,10 @@
 }
 
 // Close implements the store.Store interface.
-func (db *DB) Close() error {
-	C.leveldb_close(db.cDb)
-	C.leveldb_readoptions_destroy(db.readOptions)
-	C.leveldb_writeoptions_destroy(db.writeOptions)
+func (d *db) Close() error {
+	C.leveldb_close(d.cDb)
+	C.leveldb_readoptions_destroy(d.readOptions)
+	C.leveldb_writeoptions_destroy(d.writeOptions)
 	return nil
 }
 
@@ -74,49 +75,49 @@
 	return goError(cError)
 }
 
-// NewTransaction implements the store.Store interface.
-func (db *DB) NewTransaction() store.Transaction {
-	return newTransaction(db)
-}
-
-// NewSnapshot implements the store.Store interface.
-func (db *DB) NewSnapshot() store.Snapshot {
-	return newSnapshot(db)
+// Get implements the store.StoreReader interface.
+func (d *db) Get(key, valbuf []byte) ([]byte, error) {
+	return d.getWithOpts(key, valbuf, d.readOptions)
 }
 
 // Scan implements the store.StoreReader interface.
-func (db *DB) Scan(start, end []byte) (store.Stream, error) {
-	return newStream(db, start, end, db.readOptions), nil
-}
-
-// Get implements the store.StoreReader interface.
-func (db *DB) Get(key, valbuf []byte) ([]byte, error) {
-	return db.getWithOpts(key, valbuf, db.readOptions)
+func (d *db) Scan(start, end []byte) (store.Stream, error) {
+	return newStream(d, start, end, d.readOptions), nil
 }
 
 // Put implements the store.StoreWriter interface.
-func (db *DB) Put(key, value []byte) error {
+func (d *db) Put(key, value []byte) error {
 	// TODO(rogulenko): improve performance.
-	return store.RunInTransaction(db, func(st store.StoreReadWriter) error {
+	return store.RunInTransaction(d, func(st store.StoreReadWriter) error {
 		return st.Put(key, value)
 	})
 }
 
 // Delete implements the store.StoreWriter interface.
-func (db *DB) Delete(key []byte) error {
+func (d *db) Delete(key []byte) error {
 	// TODO(rogulenko): improve performance.
-	return store.RunInTransaction(db, func(st store.StoreReadWriter) error {
+	return store.RunInTransaction(d, func(st store.StoreReadWriter) error {
 		return st.Delete(key)
 	})
 }
 
+// NewTransaction implements the store.Store interface.
+func (d *db) NewTransaction() store.Transaction {
+	return newTransaction(d)
+}
+
+// NewSnapshot implements the store.Store interface.
+func (d *db) NewSnapshot() store.Snapshot {
+	return newSnapshot(d)
+}
+
 // getWithOpts returns the value for the given key.
 // cOpts may contain a pointer to a snapshot.
-func (db *DB) getWithOpts(key, valbuf []byte, cOpts *C.leveldb_readoptions_t) ([]byte, error) {
+func (d *db) getWithOpts(key, valbuf []byte, cOpts *C.leveldb_readoptions_t) ([]byte, error) {
 	var cError *C.char
 	var valLen C.size_t
 	cStr, cLen := cSlice(key)
-	val := C.leveldb_get(db.cDb, cOpts, cStr, cLen, &valLen, &cError)
+	val := C.leveldb_get(d.cDb, cOpts, cStr, cLen, &valLen, &cError)
 	if err := goError(cError); err != nil {
 		return nil, err
 	}
@@ -124,5 +125,5 @@
 		return nil, &store.ErrUnknownKey{Key: string(key)}
 	}
 	defer C.leveldb_free(unsafe.Pointer(val))
-	return copyAll(valbuf, goBytes(val, valLen)), nil
+	return store.CopyBytes(valbuf, goBytes(val, valLen)), nil
 }