34 lines
781 B
Go
34 lines
781 B
Go
|
package lfu
|
||
|
|
||
|
type GetValueSizeFunc[V any] func(value V) (int, error)
|
||
|
|
||
|
type Options[K comparable, V any] struct {
|
||
|
GetValueSize GetValueSizeFunc[V]
|
||
|
Capacity int
|
||
|
}
|
||
|
|
||
|
type OptionsFunc[K comparable, V any] func(opts *Options[K, V])
|
||
|
|
||
|
func DefaultOptions[K comparable, V any](funcs ...OptionsFunc[K, V]) *Options[K, V] {
|
||
|
opts := &Options[K, V]{
|
||
|
GetValueSize: DefaultGetValueSize[V],
|
||
|
Capacity: 100,
|
||
|
}
|
||
|
for _, fn := range funcs {
|
||
|
fn(opts)
|
||
|
}
|
||
|
return opts
|
||
|
}
|
||
|
|
||
|
func WithCapacity[K comparable, V any](capacity int) OptionsFunc[K, V] {
|
||
|
return func(opts *Options[K, V]) {
|
||
|
opts.Capacity = capacity
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func WithGetValueSize[K comparable, V any](getValueSize GetValueSizeFunc[V]) OptionsFunc[K, V] {
|
||
|
return func(opts *Options[K, V]) {
|
||
|
opts.GetValueSize = getValueSize
|
||
|
}
|
||
|
}
|