aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-06-13 20:23:21 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-06-13 20:23:21 +0200
commitb41e96b421acda1761e9ba2ee17da16efad436cd (patch)
treeb6200bf1c3665161b6d76453bb56f7bd5ce32f42 /vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go
parentf58147fb5ea43427d38c2a4437f35647138fbf9d (diff)
vendor: switch from dep to godep
dep tool vendored too much code (100MB) including tests and unused packages. godep vendored significantly less (12MB) without tests and unused packages. The main advantage is that pre-Go1.9 toolchain does not run tests of all vendor packages now.
Diffstat (limited to 'vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go')
-rw-r--r--vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go58
1 files changed, 0 insertions, 58 deletions
diff --git a/vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go b/vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go
deleted file mode 100644
index 2bea8a150..000000000
--- a/vendor/cloud.google.com/go/internal/atomiccache/atomiccache.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package atomiccache provides a map-based cache that supports very fast
-// reads.
-package atomiccache
-
-import (
- "sync"
- "sync/atomic"
-)
-
-type mapType map[interface{}]interface{}
-
-// Cache is a map-based cache that supports fast reads via use of atomics.
-// Writes are slow, requiring a copy of the entire cache.
-// The zero Cache is an empty cache, ready for use.
-type Cache struct {
- val atomic.Value // mapType
- mu sync.Mutex // used only by writers
-}
-
-// Get returns the value of the cache at key. If there is no value,
-// getter is called to provide one, and the cache is updated.
-// The getter function may be called concurrently. It should be pure,
-// returning the same value for every call.
-func (c *Cache) Get(key interface{}, getter func() interface{}) interface{} {
- mp, _ := c.val.Load().(mapType)
- if v, ok := mp[key]; ok {
- return v
- }
-
- // Compute value without lock.
- // Might duplicate effort but won't hold other computations back.
- newV := getter()
-
- c.mu.Lock()
- mp, _ = c.val.Load().(mapType)
- newM := make(mapType, len(mp)+1)
- for k, v := range mp {
- newM[k] = v
- }
- newM[key] = newV
- c.val.Store(newM)
- c.mu.Unlock()
- return newV
-}