aboutsummaryrefslogtreecommitdiff
path: root/src/dedo.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dedo.go')
-rw-r--r--src/dedo.go72
1 files changed, 51 insertions, 21 deletions
diff --git a/src/dedo.go b/src/dedo.go
index f308b71..4a27286 100644
--- a/src/dedo.go
+++ b/src/dedo.go
@@ -62,27 +62,38 @@ import (
-type CursorI interface{
+type baseCursorI interface{
First() ([]byte, []byte)
Last() ([]byte, []byte)
Next() ([]byte, []byte)
Prev() ([]byte, []byte)
Seek([]byte) ([]byte, []byte)
+}
+
+type ROCursorI interface{
+ baseCursorI
+}
+
+type RWCursorI interface{
+ baseCursorI
Delete() error
}
-type ROBucketI interface{
+type baseBucketI interface{
Get([]byte) []byte
- Cursor() CursorI
ForEach(func([]byte, []byte) error) error
+}
+
+type ROBucketI interface{
+ baseBucketI
ROBucket([]byte) (ROBucketI, error)
+ ROCursor() ROCursorI
}
type RWBucketI interface{
- Get([]byte) []byte
- Cursor() CursorI
- ForEach(func([]byte, []byte) error) error
+ baseBucketI
RWBucket([]byte) (RWBucketI, error)
+ RWCursor() RWCursorI
Put([]byte, []byte) error
Delete([]byte) error
CreateBucket([]byte) (RWBucketI, error)
@@ -92,23 +103,23 @@ type RWBucketI interface{
NextSequence() (uint64, error)
}
+type baseOperationI interface{
+ WriteTo(io.Writer) (int64, error)
+ Check() <-chan error
+}
+
type SnapshotI interface{
+ baseOperationI
ROBucket([]byte) (ROBucketI, error)
- Cursor() CursorI
+ ROCursor() ROCursorI
ROForEach(func([]byte, ROBucketI) error) error
-
- WriteTo(io.Writer) (int64, error)
- Check() <-chan error
}
type TransactionI interface{
+ baseOperationI
RWBucket([]byte) (RWBucketI, error)
- Cursor() CursorI
+ RWCursor() RWCursorI
RWForEach(func([]byte, RWBucketI) error) error
-
- WriteTo(io.Writer) (int64, error)
- Check() <-chan error
-
CreateBucket ([]byte) (RWBucketI, error)
CreateBucketIfNotExists([]byte) (RWBucketI, error)
DeleteBucket([]byte) error
@@ -648,7 +659,11 @@ func bucketCursor(b *bucketT) *cursorT {
}
}
-func (b *bucketT) Cursor() CursorI {
+func (b *bucketT) ROCursor() ROCursorI {
+ return bucketCursor(b)
+}
+
+func (b *bucketT) RWCursor() RWCursorI {
return bucketCursor(b)
}
@@ -979,7 +994,7 @@ func bucketForEach(b *bucketT, fn func(k, v []byte) error) error {
if b.tx.db == nil {
return ErrTxClosed
}
- c := b.Cursor()
+ c := bucketCursor(b)
for k, v := c.First(); k != nil; k, v = c.Next() {
err := fn(k, v)
if err != nil {
@@ -1914,7 +1929,14 @@ func (bucket *inMemoryValueT) DeleteBucket(name []byte) error {
return nil
}
-func (bucket *inMemoryValueT) Cursor() CursorI {
+func (bucket *inMemoryValueT) ROCursor() ROCursorI {
+ return &inMemoryCursorT{
+ bucket: bucket,
+ iterator: bucket.data.Iterator(),
+ }
+}
+
+func (bucket *inMemoryValueT) RWCursor() RWCursorI {
return &inMemoryCursorT{
bucket: bucket,
iterator: bucket.data.Iterator(),
@@ -1926,7 +1948,7 @@ func (bucket *inMemoryValueT) ForEach(fn func([]byte, []byte) error) error {
return ErrTxClosed
}
- cursor := bucket.Cursor()
+ cursor := bucket.ROCursor()
for key, value := cursor.First(); key != nil; key, value = cursor.Next() {
err := fn(key, value)
if err != nil {
@@ -2003,7 +2025,11 @@ func (tx *inMemoryTxT) CreateBucketIfNotExists(name []byte) (RWBucketI, error) {
return nil, nil // FIXME
}
-func (tx *inMemoryTxT) Cursor() CursorI {
+func (tx *inMemoryTxT) ROCursor() ROCursorI {
+ return nil // FIXME
+}
+
+func (tx *inMemoryTxT) RWCursor() RWCursorI {
return nil // FIXME
}
@@ -3823,7 +3849,11 @@ func txCursor(tx *transactionT) *cursorT {
return bucketCursor(&tx.root)
}
-func (tx *transactionT) Cursor() CursorI {
+func (tx *transactionT) ROCursor() ROCursorI {
+ return txCursor(tx)
+}
+
+func (tx *transactionT) RWCursor() RWCursorI {
return txCursor(tx)
}