| Index: go/src/infra/gae/libs/wrapper/memory/gkvlite_utils.go
|
| diff --git a/go/src/infra/gae/libs/wrapper/memory/gkvlite_utils.go b/go/src/infra/gae/libs/wrapper/memory/gkvlite_utils.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea8fb200d9abf1b649d20f440b7e7452feed4834
|
| --- /dev/null
|
| +++ b/go/src/infra/gae/libs/wrapper/memory/gkvlite_utils.go
|
| @@ -0,0 +1,91 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package memory
|
| +
|
| +import (
|
| + "github.com/luci/gkvlite"
|
| +)
|
| +
|
| +// memStore is a gkvlite.Store which will panic for anything which might
|
| +// otherwise return an error.
|
| +//
|
| +// This is reasonable for in-memory Store objects, since the only errors that
|
| +// should occur happen with file IO on the underlying file (which of course
|
| +// doesn't exist).
|
| +type memStore gkvlite.Store
|
| +
|
| +func newMemStore() *memStore {
|
| + ret, err := gkvlite.NewStore(nil)
|
| + if err != nil {
|
| + panic(err)
|
| + }
|
| + return (*memStore)(ret)
|
| +}
|
| +
|
| +func (ms *memStore) Snapshot() *memStore {
|
| + return (*memStore)((*gkvlite.Store)(ms).Snapshot())
|
| +}
|
| +
|
| +func (ms *memStore) MakePrivateCollection(cmp gkvlite.KeyCompare) *memCollection {
|
| + return (*memCollection)((*gkvlite.Store)(ms).MakePrivateCollection(cmp))
|
| +}
|
| +
|
| +func (ms *memStore) GetCollection(name string) *memCollection {
|
| + return (*memCollection)((*gkvlite.Store)(ms).GetCollection(name))
|
| +}
|
| +
|
| +func (ms *memStore) SetCollection(name string, cmp gkvlite.KeyCompare) *memCollection {
|
| + return (*memCollection)((*gkvlite.Store)(ms).SetCollection(name, cmp))
|
| +}
|
| +
|
| +// memCollection is a gkvlite.Collection which will panic for anything which
|
| +// might otherwise return an error.
|
| +//
|
| +// This is reasonable for in-memory Store objects, since the only errors that
|
| +// should occur happen with file IO on the underlying file (which of course
|
| +// doesn't exist.
|
| +type memCollection gkvlite.Collection
|
| +
|
| +func (mc *memCollection) Get(k []byte) []byte {
|
| + ret, err := (*gkvlite.Collection)(mc).Get(k)
|
| + if err != nil {
|
| + panic(err)
|
| + }
|
| + return ret
|
| +}
|
| +
|
| +func (mc *memCollection) Set(k, v []byte) {
|
| + if err := (*gkvlite.Collection)(mc).Set(k, v); err != nil {
|
| + panic(err)
|
| + }
|
| +}
|
| +
|
| +func (mc *memCollection) Delete(k []byte) bool {
|
| + ret, err := (*gkvlite.Collection)(mc).Delete(k)
|
| + if err != nil {
|
| + panic(err)
|
| + }
|
| + return ret
|
| +}
|
| +
|
| +func (mc *memCollection) VisitItemsAscend(target []byte, withValue bool, visitor gkvlite.ItemVisitor) {
|
| + if err := (*gkvlite.Collection)(mc).VisitItemsAscend(target, withValue, visitor); err != nil {
|
| + panic(err)
|
| + }
|
| +}
|
| +
|
| +func (mc *memCollection) VisitItemsDescend(target []byte, withValue bool, visitor gkvlite.ItemVisitor) {
|
| + if err := (*gkvlite.Collection)(mc).VisitItemsDescend(target, withValue, visitor); err != nil {
|
| + panic(err)
|
| + }
|
| +}
|
| +
|
| +func (mc *memCollection) GetTotals() (numItems, numBytes uint64) {
|
| + numItems, numBytes, err := (*gkvlite.Collection)(mc).GetTotals()
|
| + if err != nil {
|
| + panic(err)
|
| + }
|
| + return
|
| +}
|
|
|