diff options
| author | n1c00o <n@nc0.fr> | 2023-02-05 14:05:26 +0100 | 
|---|---|---|
| committer | Nicolas <34602094+n1c00o@users.noreply.github.com> | 2023-02-06 22:35:54 +0100 | 
| commit | b371cb11a5877ede8847351e95c7847b5024a551 (patch) | |
| tree | 958227cf8562503246976744b89370d389de5f66 /vendor/go.opencensus.io/trace/lrumap.go | |
| parent | 03e0c597ad5f3539ad33976fe02c11a9e39f34d6 (diff) | |
Init Go module
Diffstat (limited to 'vendor/go.opencensus.io/trace/lrumap.go')
| -rw-r--r-- | vendor/go.opencensus.io/trace/lrumap.go | 61 | 
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/go.opencensus.io/trace/lrumap.go b/vendor/go.opencensus.io/trace/lrumap.go new file mode 100644 index 0000000..80095a5 --- /dev/null +++ b/vendor/go.opencensus.io/trace/lrumap.go @@ -0,0 +1,61 @@ +// Copyright 2019, OpenCensus Authors +// +// 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 trace + +import ( +	"github.com/golang/groupcache/lru" +) + +// A simple lru.Cache wrapper that tracks the keys of the current contents and +// the cumulative number of evicted items. +type lruMap struct { +	cacheKeys    map[lru.Key]bool +	cache        *lru.Cache +	droppedCount int +} + +func newLruMap(size int) *lruMap { +	lm := &lruMap{ +		cacheKeys:    make(map[lru.Key]bool), +		cache:        lru.New(size), +		droppedCount: 0, +	} +	lm.cache.OnEvicted = func(key lru.Key, value interface{}) { +		delete(lm.cacheKeys, key) +		lm.droppedCount++ +	} +	return lm +} + +func (lm lruMap) len() int { +	return lm.cache.Len() +} + +func (lm lruMap) keys() []interface{} { +	keys := make([]interface{}, 0, len(lm.cacheKeys)) +	for k := range lm.cacheKeys { +		keys = append(keys, k) +	} +	return keys +} + +func (lm *lruMap) add(key, value interface{}) { +	lm.cacheKeys[lru.Key(key)] = true +	lm.cache.Add(lru.Key(key), value) +} + +func (lm *lruMap) get(key interface{}) (interface{}, bool) { +	return lm.cache.Get(key) +}  | 
