refactor: constructors, update docs
- NewCustomTable -> NewCustom - NewTableBy -> NewBy - NewTable -> New
This commit is contained in:
@@ -7,9 +7,9 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// A HashTable is hash table that uses cuckoo hashing to resolve collision. Create
|
||||
// one with [NewTable]. Or if you want more granularity, use [NewTableBy] or
|
||||
// [NewCustomTable].
|
||||
// A HashTable which uses cuckoo hashing to resolve collision. Create
|
||||
// one with [New]. Or if you want more granularity, use [NewBy] or
|
||||
// [NewCustom].
|
||||
type HashTable[K, V any] struct {
|
||||
tableA, tableB table[K, V]
|
||||
growthFactor uint64
|
||||
@@ -192,9 +192,9 @@ func (t *HashTable[K, V]) String() string {
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// NewCustomTable creates a [HashTable] with custom [Hash] and [EqualFunc]
|
||||
// NewCustom creates a [HashTable] with custom [Hash] and [EqualFunc]
|
||||
// functions, along with any [Option] the user provides.
|
||||
func NewCustomTable[K, V any](hashA, hashB Hash[K], compare EqualFunc[K], options ...Option) *HashTable[K, V] {
|
||||
func NewCustom[K, V any](hashA, hashB Hash[K], compare EqualFunc[K], options ...Option) *HashTable[K, V] {
|
||||
settings := &settings{
|
||||
growthFactor: DefaultGrowthFactor,
|
||||
bucketSize: DefaultCapacity,
|
||||
@@ -217,10 +217,10 @@ func pipe[X, Y, Z any](a func(X) Y, b func(Y) Z) func(X) Z {
|
||||
return func(x X) Z { return b(a(x)) }
|
||||
}
|
||||
|
||||
// NewTableBy creates a [HashTable] for any key type by using keyFunc to derive a
|
||||
// NewBy creates a [HashTable] for any key type by using keyFunc to derive a
|
||||
// comparable key. Two keys with the same derived key are treated as equal.
|
||||
func NewTableBy[K, V any, C comparable](keyFunc func(K) C, options ...Option) *HashTable[K, V] {
|
||||
return NewCustomTable[K, V](
|
||||
func NewBy[K, V any, C comparable](keyFunc func(K) C, options ...Option) *HashTable[K, V] {
|
||||
return NewCustom[K, V](
|
||||
pipe(keyFunc, NewDefaultHash[C]()),
|
||||
pipe(keyFunc, NewDefaultHash[C]()),
|
||||
func(a, b K) bool { return keyFunc(a) == keyFunc(b) },
|
||||
@@ -228,10 +228,10 @@ func NewTableBy[K, V any, C comparable](keyFunc func(K) C, options ...Option) *H
|
||||
)
|
||||
}
|
||||
|
||||
// NewTable creates a [HashTable] using the default [Hash] and [EqualFunc]. Use
|
||||
// New creates a [HashTable] using the default [Hash] and [EqualFunc]. Use
|
||||
// the [Option] functions to configure its behavior. Note that this constructor
|
||||
// is only provided for comparable keys. For arbitrary keys, consider
|
||||
// [NewTableBy] or [NewCustomTable].
|
||||
func NewTable[K comparable, V any](options ...Option) *HashTable[K, V] {
|
||||
return NewCustomTable[K, V](NewDefaultHash[K](), NewDefaultHash[K](), DefaultEqualFunc[K], options...)
|
||||
// [NewBy] or [NewCustom].
|
||||
func New[K comparable, V any](options ...Option) *HashTable[K, V] {
|
||||
return NewCustom[K, V](NewDefaultHash[K](), NewDefaultHash[K](), DefaultEqualFunc[K], options...)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user