aboutsummaryrefslogtreecommitdiff
path: root/internal/lru/new.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-06 04:43:03 +0800
committerGravatar Runxi Yu2026-03-06 04:43:03 +0800
commitfec8b64975f952e2fa5fa8478b09dced87f0fa7b (patch)
tree358cea12d4f20d6821202f040aeb9be58eb878a7 /internal/lru/new.go
parentformat/commitgraph/bloom: Add commit-graph bloom filters (diff)
signatureNo signature
internal/lru: Split
Diffstat (limited to 'internal/lru/new.go')
-rw-r--r--internal/lru/new.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/internal/lru/new.go b/internal/lru/new.go
new file mode 100644
index 00000000..f683416a
--- /dev/null
+++ b/internal/lru/new.go
@@ -0,0 +1,23 @@
+package lru
+
+import "container/list"
+
+// New creates a cache with a maximum total weight.
+//
+// New panics if maxWeight is negative or weightFn is nil.
+func New[K comparable, V any](maxWeight int64, weightFn WeightFunc[K, V], onEvict OnEvictFunc[K, V]) *Cache[K, V] {
+ if maxWeight < 0 {
+ panic("lru: negative max weight")
+ }
+
+ if weightFn == nil {
+ panic("lru: nil weight function")
+ }
+
+ return &Cache[K, V]{
+ maxWeight: maxWeight,
+ weightFn: weightFn,
+ onEvict: onEvict,
+ items: make(map[K]*list.Element),
+ }
+}