aboutsummaryrefslogtreecommitdiff
path: root/internal/lru/new.go
diff options
context:
space:
mode:
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),
+ }
+}