hashmap

package module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 29, 2022 License: Apache-2.0 Imports: 7 Imported by: 0

README

hashmap

Overview

A Golang lock-free thread-safe HashMap optimized for fastest read access.

Which changes?

I need types for my project, and golang has generics, why not? Maybe it has problems, I don't know, I'm new to golang :D

Usage

Set a value for a key in the map:

type Domain struct {
    Hostname string 
}

m := &HashMap[Domain]{}

m.Set("my", Domain{
    Hostname: "google.com",
})

Read a value for a key from the map:

val, ok := m.Get("my")
if ok {
    fmt.Println(val.Hostname)
}

Documentation

Index

Constants

View Source
const DefaultSize = 8

DefaultSize is the default size for a zero allocated map

View Source
const MaxFillRate = 50

MaxFillRate is the maximum fill rate for the slice before a resize will happen.

Variables

This section is empty.

Functions

This section is empty.

Types

type HashMap

type HashMap[T any] struct {
	// contains filtered or unexported fields
}

HashMap implements a read optimized hash map.

func New

func New[t any](size uintptr) *HashMap[t]

New returns a new HashMap instance with a specific initialization size.

func (*HashMap[T]) Cas

func (m *HashMap[T]) Cas(key, from, to T) bool

Cas performs a compare and swap operation sets the value under the specified hash key to the map. An existing item for this key will be overwritten.

func (*HashMap[T]) CasHashedKey

func (m *HashMap[T]) CasHashedKey(hashedKey uintptr, from, to T) bool

CasHashedKey performs a compare and swap operation sets the value under the specified hash key to the map. An existing item for this key will be overwritten.

func (*HashMap[T]) Del

func (m *HashMap[T]) Del(key interface{})

Del deletes the key from the map.

func (*HashMap[T]) DelHashedKey

func (m *HashMap[T]) DelHashedKey(hashedKey uintptr)

DelHashedKey deletes the hashed key from the map.

func (*HashMap[T]) Fillrate

func (m *HashMap[T]) Fillrate() uintptr

Fillrate returns the fill rate of the map as an percentage integer.

func (*HashMap[T]) Get

func (m *HashMap[T]) Get(key interface{}) (value T, ok bool)

Get retrieves an element from the map under given hash key. Using interface{} adds a performance penalty. Please consider using GetUintKey or GetStringKey instead.

func (*HashMap[T]) GetHashedKey

func (m *HashMap[T]) GetHashedKey(hashedKey uintptr) (value T, ok bool)

GetHashedKey retrieves an element from the map under given hashed key.

func (*HashMap[T]) GetOrInsert

func (m *HashMap[T]) GetOrInsert(key interface{}, value T) (actual T, loaded bool)

GetOrInsert returns the existing value for the key if present. Otherwise, it stores and returns the given value. The loaded result is true if the value was loaded, false if stored.

func (*HashMap[T]) GetStringKey

func (m *HashMap[T]) GetStringKey(key string) (value T, ok bool)

GetStringKey retrieves an element from the map under given string key.

func (*HashMap[T]) GetUintKey

func (m *HashMap[T]) GetUintKey(key uintptr) (value T, ok bool)

GetUintKey retrieves an element from the map under given integer key.

func (*HashMap[T]) Grow

func (m *HashMap[T]) Grow(newSize uintptr)

Grow resizes the hashmap to a new size, gets rounded up to next power of 2. To double the size of the hashmap use newSize 0. This function returns immediately, the resize operation is done in a goroutine. No resizing is done in case of another resize operation already being in progress.

func (*HashMap[T]) Insert

func (m *HashMap[T]) Insert(key interface{}, value T) bool

Insert sets the value under the specified key to the map if it does not exist yet. If a resizing operation is happening concurrently while calling Set, the item might show up in the map only after the resize operation is finished. Returns true if the item was inserted or false if it existed.

func (*HashMap[T]) Iter

func (m *HashMap[T]) Iter() <-chan KeyValue

Iter returns an iterator which could be used in a for range loop. The order of the items is sorted by hash keys.

func (*HashMap[T]) Len

func (m *HashMap[T]) Len() int

Len returns the number of elements within the map.

func (*HashMap[T]) Set

func (m *HashMap[T]) Set(key interface{}, value T)

Set sets the value under the specified key to the map. An existing item for this key will be overwritten. If a resizing operation is happening concurrently while calling Set, the item might show up in the map only after the resize operation is finished.

func (*HashMap[T]) SetHashedKey

func (m *HashMap[T]) SetHashedKey(hashedKey uintptr, value T)

SetHashedKey sets the value under the specified hash key to the map. An existing item for this key will be overwritten. You can use this function if your keys are already hashes and you want to avoid another hashing of the key. Do not use non hashes as keys for this function, the performance would decrease! If a resizing operation is happening concurrently while calling Set, the item might show up in the map only after the resize operation is finished.

func (*HashMap[T]) String

func (m *HashMap[T]) String() string

String returns the map as a string, only hashed keys are printed.

type KeyValue

type KeyValue struct {
	Key   interface{}
	Value interface{}
}

KeyValue represents a key/value that is returned by the iterator.

type List

type List struct {
	// contains filtered or unexported fields
}

List is a sorted doubly linked list.

func NewList

func NewList() *List

NewList returns an initialized list.

func (*List) Add

func (l *List) Add(element *ListElement, searchStart *ListElement) (existed bool, inserted bool)

Add adds an item to the list and returns false if an item for the hash existed. searchStart = nil will start to search at the head item

func (*List) AddOrUpdate

func (l *List) AddOrUpdate(element *ListElement, searchStart *ListElement) bool

AddOrUpdate adds or updates an item to the list.

func (*List) Cas

func (l *List) Cas(element *ListElement, oldValue interface{}, searchStart *ListElement) bool

Cas compares and swaps the value of an item in the list.

func (*List) Delete

func (l *List) Delete(element *ListElement)

Delete deletes an element from the list.

func (*List) First

func (l *List) First() *ListElement

First returns the first item of the list.

func (*List) Head

func (l *List) Head() *ListElement

First returns the head item of the list.

func (*List) Len

func (l *List) Len() int

Len returns the number of elements within the list.

type ListElement

type ListElement struct {
	// contains filtered or unexported fields
}

ListElement is an element of a list.

func (*ListElement) Next

func (e *ListElement) Next() *ListElement

Next returns the item on the right.

func (*ListElement) Previous

func (e *ListElement) Previous() *ListElement

Previous returns the item on the left.

func (*ListElement) Value

func (e *ListElement) Value() (value interface{})

Value returns the value of the list item.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL