diff options
Diffstat (limited to 'src/dedo.go')
-rw-r--r-- | src/dedo.go | 72 |
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) } |