cache: improves coding style
diff --git a/leveldb/cache/cache.go b/leveldb/cache/cache.go
index c9670de..a287d0e 100644
--- a/leveldb/cache/cache.go
+++ b/leveldb/cache/cache.go
@@ -47,17 +47,21 @@
// so the the Release method will be called once object is released.
type Value interface{}
-type CacheGetter struct {
+// NamespaceGetter provides convenient wrapper for namespace.
+type NamespaceGetter struct {
Cache *Cache
NS uint64
}
-func (g *CacheGetter) Get(key uint64, setFunc func() (size int, value Value)) *Handle {
+// Get simply calls Cache.Get() method.
+func (g *NamespaceGetter) Get(key uint64, setFunc func() (size int, value Value)) *Handle {
return g.Cache.Get(g.NS, key, setFunc)
}
// The hash tables implementation is based on:
-// "Dynamic-Sized Nonblocking Hash Tables", by Yujie Liu, Kunlong Zhang, and Michael Spear. ACM Symposium on Principles of Distributed Computing, Jul 2014.
+// "Dynamic-Sized Nonblocking Hash Tables", by Yujie Liu,
+// Kunlong Zhang, and Michael Spear.
+// ACM Symposium on Principles of Distributed Computing, Jul 2014.
const (
mInitialSize = 1 << 4
@@ -610,10 +614,12 @@
}
}
+// Handle is a 'cache handle' of a 'cache node'.
type Handle struct {
n unsafe.Pointer // *Node
}
+// Value returns the value of the 'cache node'.
func (h *Handle) Value() Value {
n := (*Node)(atomic.LoadPointer(&h.n))
if n != nil {
@@ -622,6 +628,8 @@
return nil
}
+// Release releases this 'cache handle'.
+// It is safe to call release multiple times.
func (h *Handle) Release() {
nPtr := atomic.LoadPointer(&h.n)
if nPtr != nil && atomic.CompareAndSwapPointer(&h.n, nPtr, nil) {
diff --git a/leveldb/cache/cache_test.go b/leveldb/cache/cache_test.go
index c2a5015..b7b1638 100644
--- a/leveldb/cache/cache_test.go
+++ b/leveldb/cache/cache_test.go
@@ -45,9 +45,8 @@
return c.Get(ns, key, func() (int, Value) {
if relf != nil {
return charge, releaserFunc{relf, value}
- } else {
- return charge, value
}
+ return charge, value
})
}
diff --git a/leveldb/table.go b/leveldb/table.go
index a18baae..310ba6c 100644
--- a/leveldb/table.go
+++ b/leveldb/table.go
@@ -351,9 +351,9 @@
return 0, nil
}
- var bcache *cache.CacheGetter
+ var bcache *cache.NamespaceGetter
if t.bcache != nil {
- bcache = &cache.CacheGetter{Cache: t.bcache, NS: uint64(f.fd.Num)}
+ bcache = &cache.NamespaceGetter{Cache: t.bcache, NS: uint64(f.fd.Num)}
}
var tr *table.Reader
diff --git a/leveldb/table/reader.go b/leveldb/table/reader.go
index caeac96..ae61bec 100644
--- a/leveldb/table/reader.go
+++ b/leveldb/table/reader.go
@@ -509,7 +509,7 @@
mu sync.RWMutex
fd storage.FileDesc
reader io.ReaderAt
- cache *cache.CacheGetter
+ cache *cache.NamespaceGetter
err error
bpool *util.BufferPool
// Options
@@ -988,7 +988,7 @@
// The fi, cache and bpool is optional and can be nil.
//
// The returned table reader instance is goroutine-safe.
-func NewReader(f io.ReaderAt, size int64, fd storage.FileDesc, cache *cache.CacheGetter, bpool *util.BufferPool, o *opt.Options) (*Reader, error) {
+func NewReader(f io.ReaderAt, size int64, fd storage.FileDesc, cache *cache.NamespaceGetter, bpool *util.BufferPool, o *opt.Options) (*Reader, error) {
if f == nil {
return nil, errors.New("leveldb/table: nil file")
}