aboutsummaryrefslogtreecommitdiff
path: root/internal/clock/cache_ops.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/clock/cache_ops.go')
-rw-r--r--internal/clock/cache_ops.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/internal/clock/cache_ops.go b/internal/clock/cache_ops.go
new file mode 100644
index 00000000..18958202
--- /dev/null
+++ b/internal/clock/cache_ops.go
@@ -0,0 +1,51 @@
+package clock
+
+// Add inserts or replaces key, marking it recently used.
+//
+// It reports whether the entry was admitted;
+// an entry heavier than the per-shard budget is rejected
+// and leaves the cache unchanged.
+func (cache *Cache[K, V]) Add(key K, value V) bool {
+ return cache.shardFor(key).add(key, value, cache.weightFn(key, value))
+}
+
+// Get returns the value for key and marks it recently used.
+//
+//nolint:ireturn
+func (cache *Cache[K, V]) Get(key K) (V, bool) {
+ return cache.shardFor(key).get(key)
+}
+
+// Peek returns the value for key without changing its recency.
+//
+//nolint:ireturn
+func (cache *Cache[K, V]) Peek(key K) (V, bool) {
+ return cache.shardFor(key).peek(key)
+}
+
+// Len returns the number of cached entries.
+func (cache *Cache[K, V]) Len() int {
+ total := 0
+ for _, shard := range cache.shards {
+ total += shard.len()
+ }
+
+ return total
+}
+
+// Weight returns the current total weight across all shards.
+func (cache *Cache[K, V]) Weight() uint64 {
+ var total uint64
+ for _, shard := range cache.shards {
+ total += shard.loadWeight()
+ }
+
+ return total
+}
+
+// Clear removes all entries.
+func (cache *Cache[K, V]) Clear() {
+ for _, shard := range cache.shards {
+ shard.clear()
+ }
+}