list_head

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Jun 5, 2022 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package list_head ... like a kernel's LIST_HEAD list_head is used by loncha/gen/containers_list

Package loncha/list_head is like a kernel's LIST_HEAD list_head is used by loncha/gen/containers_list

Package loncha/list_head is like a kernel's LIST_HEAD list_head is used by loncha/gen/containers_list

Package loncha/list_head is like a kernel's LIST_HEAD list_head is used by loncha/gen/containers_list

Package loncha/list_head is like a kernel's LIST_HEAD list_head is used by loncha/gen/containers_list

Package loncha/list_head is like a kernel's LIST_HEAD list_head is used by loncha/gen/containers_list

Index

Constants

View Source
const (
	ErrTDeleteFirst = 1 << iota
	ErrTListNil
	ErrTEmpty
	ErrTMarked
	ErrTNextMarked
	ErrTNotAppend
	ErrTNotMarked
	ErrTCasConflictOnMark
	ErrTFirstMarked
	ErrTCasConflictOnAdd
	ErrTOverRetyry
	ErrTNoSafety
	ErrTNoContinous
)
View Source
const UseRecoverState = true

Variables

View Source
var (
	MODE_CONCURRENT      bool = false
	PANIC_NEXT_IS_MARKED bool = false
)
View Source
var (
	ErrDeleteFirst       error = NewError(ErrTDeleteFirst, errors.New("first element cannot delete"))
	ErrListNil           error = NewError(ErrTListNil, errors.New("list is nil"))
	ErrEmpty             error = NewError(ErrTEmpty, errors.New("list is empty"))
	ErrMarked            error = NewError(ErrTMarked, errors.New("element is marked"))
	ErrNextMarked        error = NewError(ErrTNextMarked, errors.New("next element is marked"))
	ErrNotAppend         error = NewError(ErrTNotAppend, errors.New("element cannot be append"))
	ErrNotMarked         error = NewError(ErrTNotMarked, errors.New("elenment cannot be marked"))
	ErrCasConflictOnMark error = NewError(ErrTCasConflictOnMark, errors.New("cas conflict(fail mark)"))
	ErrFirstMarked       error = NewError(ErrTFirstMarked, errors.New("first element is marked"))
	ErrNoSafetyOnAdd     error = NewError(ErrTNoSafety, errors.New("element is not safety to append"))
	ErrNoContinous       error = NewError(ErrTNoContinous, errors.New("element is not continus"))
)
View Source
var RecoverStats map[string]int = map[string]int{}

Functions

func AddRecoverState added in v0.3.1

func AddRecoverState(name string)

func Cas added in v0.3.1

func Cas(target **ListHead, old, new *ListHead) bool

Cas ... CompareAndSwap in *ListHead

func ContainOf

func ContainOf(head, elm *ListHead) bool

func ElementIsContainOf

func ElementIsContainOf(hList, l List) bool

func ContainOf(head, elm *ListHead) bool {

func ElementOf

func ElementOf(l List, head *ListHead) unsafe.Pointer

ElementOf .. get struct pointer from struct.ListHead

func Error added in v0.3.1

func Error(oe error, opts ...OptNewError) error

func GetConcurrentMode

func GetConcurrentMode() bool

func InitAfterSafety added in v0.3.1

func InitAfterSafety(retry int) func(*ListHead) error

func InitAsEmpty added in v0.4.6

func InitAsEmpty(head *ListHead, tail *ListHead)

func KeyToHash added in v0.4.1

func KeyToHash(key interface{}) (uint64, uint64)

func MarkListHead added in v0.3.1

func MarkListHead(target **ListHead, old *ListHead) bool

func MemHash added in v0.4.1

func MemHash(data []byte) uint64

func MemHashString added in v0.4.1

func MemHashString(str string) uint64

func MutexFn added in v0.4.1

func MutexFn(head *ListHead) *sync.RWMutex

func Retry added in v0.3.1

func Retry(cnt int, fn func(retry int) (done bool, err error)) error

func StoreListHead added in v0.3.1

func StoreListHead(dst **ListHead, src *ListHead)

Types

type BoolAndError added in v0.3.1

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

func MakeBoolAndError added in v0.3.1

func MakeBoolAndError(t bool, e error) BoolAndError

type Cursor

type Cursor struct {
	Pos *ListHead
}

func (*Cursor) Next

func (cur *Cursor) Next() bool

type Dirty added in v0.4.1

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

type List

type List interface {
	Offset() uintptr
	PtrListHead() *ListHead
	FromListHead(*ListHead) List
}

type ListHead

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

func LastNoM added in v0.3.1

func LastNoM(ocur *ListHead) *ListHead

func ListNext added in v0.4.3

func ListNext(head *ListHead, opts ...TravOpt) *ListHead

func ListPrev added in v0.4.3

func ListPrev(head *ListHead, opts ...TravOpt) (prev *ListHead)

func NewEmpty added in v0.3.1

func NewEmpty() *ListHead

func NextNoM added in v0.3.1

func NextNoM(ocur *ListHead) *ListHead

func PrevNoM added in v0.3.1

func PrevNoM(oprev *ListHead) *ListHead

func (*ListHead) ActiveList added in v0.3.1

func (head *ListHead) ActiveList() *ListHead

func (*ListHead) Add

func (head *ListHead) Add(new *ListHead) *ListHead

func (*ListHead) AddElement

func (head *ListHead) AddElement(nList List) *ListHead

Add ... Add list

support lista_encabezado

func (*ListHead) Append added in v0.3.1

func (head *ListHead) Append(new *ListHead) (*ListHead, error)

func (*ListHead) AppendWithRecover added in v0.3.1

func (head *ListHead) AppendWithRecover(new *ListHead) (nHead *ListHead, err error)

func (*ListHead) AvoidNotAppend added in v0.3.1

func (head *ListHead) AvoidNotAppend(err error) *ListHead

func (*ListHead) Back

func (l *ListHead) Back() (head *ListHead)

func (*ListHead) CountTo added in v0.4.1

func (head *ListHead) CountTo(dst *ListHead) (cnt int)

func (*ListHead) Cursor

func (l *ListHead) Cursor() Cursor

func (*ListHead) Delete

func (l *ListHead) Delete() (result *ListHead)

Delete ... delete Deprecated: Delete()

func (*ListHead) DeleteElementWithCas

func (head *ListHead) DeleteElementWithCas(pList List) (err error)

func (*ListHead) DeleteWithCas

func (head *ListHead) DeleteWithCas(prev *ListHead) (err error)

func (*ListHead) DirectNext

func (head *ListHead) DirectNext() *ListHead

func (*ListHead) DirectPrev added in v0.4.1

func (head *ListHead) DirectPrev() *ListHead

func (*ListHead) DumpAll

func (head *ListHead) DumpAll() string

func (*ListHead) DumpAllWithMark

func (head *ListHead) DumpAllWithMark() string

func (*ListHead) Each

func (l *ListHead) Each(fn func(e *ListHead))

func (*ListHead) Empty

func (l *ListHead) Empty() bool

func (*ListHead) Front

func (l *ListHead) Front() (head *ListHead)

func (*ListHead) Init

func (head *ListHead) Init()

func (*ListHead) InitAsEmpty added in v0.3.1

func (head *ListHead) InitAsEmpty()

func (*ListHead) InsertAfter

func (l *ListHead) InsertAfter(vl List) *ListHead

func (*ListHead) InsertBefore

func (head *ListHead) InsertBefore(new *ListHead, opts ...TravOpt) (*ListHead, error)

func (*ListHead) IsFirst

func (l *ListHead) IsFirst() bool

func (*ListHead) IsFirstMarked added in v0.3.1

func (l *ListHead) IsFirstMarked() bool

func (*ListHead) IsLast

func (l *ListHead) IsLast() bool

func (*ListHead) IsMarked added in v0.3.1

func (head *ListHead) IsMarked() bool

func (*ListHead) IsPurged added in v0.3.1

func (head *ListHead) IsPurged() bool

func (*ListHead) IsSafety added in v0.3.1

func (head *ListHead) IsSafety() (bool, error)

func (*ListHead) IsSingle added in v0.3.1

func (head *ListHead) IsSingle() bool

func (*ListHead) Join added in v0.3.1

func (head *ListHead) Join(new *ListHead)

func (*ListHead) Len

func (l *ListHead) Len() (cnt int)

func (*ListHead) MarkForDelete

func (l *ListHead) MarkForDelete(opts ...TravOpt) (err error)

func (*ListHead) MoveAfter

func (l *ListHead) MoveAfter(vl List) *ListHead

MoveAfter ... moves element e to its new position after mark. If e is not an element of l, or e == mark, the list is not modified.

func (*ListHead) MoveBefore

func (l *ListHead) MoveBefore(vl List) *ListHead

MoveBefore ... moves element e to its new position before mark. If e or mark is not an element of l, or e == mark, the list is not modified.

func (*ListHead) MoveToBack

func (l *ListHead) MoveToBack(vl List) *ListHead

MoveToBack ... moves element e to later of list l. If e is not an element of l, the list is not modified.

func (*ListHead) MoveToFront

func (l *ListHead) MoveToFront(vl List) *ListHead

MoveToFront ... moves element e to the front of list l. If e is not an element of l, the list is not modified.

func (*ListHead) Next

func (head *ListHead) Next(opts ...TravOpt) *ListHead

func (*ListHead) Next1

func (head *ListHead) Next1() (nextElement *ListHead, err error)

func (*ListHead) NextWithError added in v0.3.1

func (head *ListHead) NextWithError() ListHeadWithError

func (*ListHead) P

func (l *ListHead) P() string

func (*ListHead) Pp

func (l *ListHead) Pp() string

func (*ListHead) Prev

func (head *ListHead) Prev(opts ...TravOpt) *ListHead

func (*ListHead) Ptr added in v0.4.6

func (head *ListHead) Ptr() unsafe.Pointer

func (*ListHead) PtrNext

func (head *ListHead) PtrNext() **ListHead

func (*ListHead) Purge added in v0.3.1

func (head *ListHead) Purge(opts ...func(*ListHead) error) (active *ListHead, purged *ListHead)

func (*ListHead) PushBack

func (l *ListHead) PushBack(vl List) *ListHead

PushBack ... inserts a new element e with value v at the back of list l and returns e.

func (*ListHead) PushBackList

func (l *ListHead) PushBackList(oE List)

func (*ListHead) PushFront

func (l *ListHead) PushFront(vl List) *ListHead

PushFront ... inserts a new value v at the front of list l and returns e.

func (*ListHead) PushFrontList

func (l *ListHead) PushFrontList(oE List)

func (*ListHead) Remove

func (l *ListHead) Remove() *ListHead

Remove ... Alias of Delete()

func (*ListHead) Validate added in v0.3.1

func (head *ListHead) Validate() error

func (*ListHead) WithOutMark added in v0.4.10

func (l *ListHead) WithOutMark() *ListHead

type ListHeadError added in v0.3.1

type ListHeadError struct {
	Type uint16
	Info string
	// contains filtered or unexported fields
}

func NewError added in v0.3.1

func NewError(t uint16, err error, opts ...OptNewError) *ListHeadError

type ListHeadWithError added in v0.3.1

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

func ListWithError added in v0.3.1

func ListWithError(head *ListHead, err error) ListHeadWithError

func (ListHeadWithError) Error added in v0.3.1

func (le ListHeadWithError) Error() string

func (ListHeadWithError) List added in v0.3.1

func (le ListHeadWithError) List() *ListHead

type Map added in v0.4.1

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

func (*Map) Delete added in v0.4.1

func (m *Map) Delete(key string) bool

func (*Map) Get added in v0.4.1

func (m *Map) Get(key string) (v *ListHead, ok bool)

func (*Map) Get2 added in v0.4.1

func (m *Map) Get2(k, conflict uint64) (v *ListHead, ok bool)

func (*Map) Len added in v0.4.1

func (m *Map) Len() int

func (*Map) Range added in v0.4.1

func (m *Map) Range(f func(key string, value *ListHead) bool)

func (*Map) Set added in v0.4.1

func (m *Map) Set(key string, v *ListHead) bool

func (*Map) Set2 added in v0.4.1

func (m *Map) Set2(k, conflict uint64, kstr string, v *ListHead) bool

type MapGetSet added in v0.4.1

type MapGetSet interface {
	Set(k string, v *ListHead) bool
	Get(k string) (v *ListHead, ok bool)
}

MapGetSet ... usage for benchmark.

type MapInf added in v0.4.1

type MapInf interface {
	Set(k string, v *ListHead) bool
	Get(k string) (v *ListHead, ok bool)
	Delete(k string) bool
	Len() int
	Range(f func(key string, value *ListHead) bool)
}

type MapString added in v0.4.1

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

func (*MapString) Delete added in v0.4.1

func (m *MapString) Delete(k string) bool

func (*MapString) Get added in v0.4.1

func (m *MapString) Get(k string) (v *ListHead, ok bool)

func (*MapString) Len added in v0.4.1

func (m *MapString) Len() int

func (*MapString) Range added in v0.4.1

func (m *MapString) Range(f func(key string, value *ListHead) bool)

func (*MapString) Set added in v0.4.1

func (m *MapString) Set(k string, v *ListHead) bool

type MapWithLock added in v0.4.1

type MapWithLock struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func (*MapWithLock) Delete added in v0.4.1

func (m *MapWithLock) Delete(k string) bool

func (*MapWithLock) Get added in v0.4.1

func (m *MapWithLock) Get(k string) (v *ListHead, ok bool)

func (*MapWithLock) Len added in v0.4.1

func (m *MapWithLock) Len() int

func (*MapWithLock) Range added in v0.4.1

func (m *MapWithLock) Range(f func(key string, value *ListHead) bool)

func (*MapWithLock) Set added in v0.4.1

func (m *MapWithLock) Set(k string, v *ListHead) bool

type ModeTraverse added in v0.3.1

type ModeTraverse struct {
	Mu func(*ListHead) *sync.RWMutex
	// contains filtered or unexported fields
}
var DefaultModeTraverse *ModeTraverse = &ModeTraverse{t: TravDirect}

func NewTraverse added in v0.4.5

func NewTraverse() *ModeTraverse

func (ModeTraverse) Error added in v0.4.1

func (mode ModeTraverse) Error() string

func (*ModeTraverse) Option added in v0.4.2

func (mt *ModeTraverse) Option(opts ...TravOpt) (prevs []TravOpt)

func (*ModeTraverse) SetError added in v0.4.5

func (mt *ModeTraverse) SetError(e error)

func (*ModeTraverse) SetType added in v0.4.10

func (mt *ModeTraverse) SetType(t TraverseType)

func (*ModeTraverse) Type added in v0.4.5

func (mt *ModeTraverse) Type() TraverseType

type OptMark added in v0.3.1

type OptMark func(*checkOpt)

func Marked added in v0.3.1

func Marked(t bool) OptMark

type OptNewError added in v0.3.1

type OptNewError func(e *ListHeadError)

func ErrorInfo added in v0.3.1

func ErrorInfo(s string) OptNewError

type RMap added in v0.4.1

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

func NewRMap added in v0.4.1

func NewRMap() *RMap

func (*RMap) Delete added in v0.4.1

func (m *RMap) Delete(key string) bool

func (*RMap) Get added in v0.4.1

func (m *RMap) Get(key string) (v *ListHead, ok bool)

func (*RMap) Get2 added in v0.4.1

func (m *RMap) Get2(k, conflict uint64) (v *ListHead, ok bool)

func (*RMap) Len added in v0.4.1

func (m *RMap) Len() int

func (*RMap) Set added in v0.4.1

func (m *RMap) Set(key string, v *ListHead) bool

func (*RMap) Set2 added in v0.4.1

func (m *RMap) Set2(k, conflict uint64, kstr string, v *ListHead) bool

func (*RMap) SplitDirty added in v0.4.1

func (m *RMap) SplitDirty()

func (*RMap) ValidateDirty added in v0.4.1

func (m *RMap) ValidateDirty()

type ShardMap added in v0.4.1

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

func (*ShardMap) Get added in v0.4.1

func (shard *ShardMap) Get(k string) (v *ListHead, ok bool)

func (*ShardMap) InitByFn added in v0.4.1

func (shard *ShardMap) InitByFn(fn func(int) MapGetSet)

func (*ShardMap) KeyToHash added in v0.4.1

func (shard *ShardMap) KeyToHash(key interface{}) (uint64, uint64)

func (*ShardMap) Set added in v0.4.1

func (shard *ShardMap) Set(k string, v *ListHead) bool

type SkipHead added in v0.4.1

type SkipHead struct {
	ListHead
	// contains filtered or unexported fields
}

func (*SkipHead) FromListHead added in v0.4.1

func (e *SkipHead) FromListHead(head *ListHead) List

func (*SkipHead) Offset added in v0.4.1

func (e *SkipHead) Offset() uintptr

func (*SkipHead) PtrListHead added in v0.4.1

func (e *SkipHead) PtrListHead() *ListHead

type SuperSkipHead added in v0.4.1

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

type TravOpt added in v0.3.1

type TravOpt func(*ModeTraverse) TravOpt

func Direct added in v0.4.2

func Direct() TravOpt

func Lock added in v0.4.1

func Lock(fn func(*ListHead) *sync.RWMutex) TravOpt

func Trav added in v0.3.1

func Trav(t TraverseType) TravOpt

func WaitNoM added in v0.3.1

func WaitNoM() TravOpt

type TraverseType added in v0.3.1

type TraverseType uint32
const (
	TravDirect TraverseType = iota
	TravWaitNoMark
	TravSkipMark
)

Jump to

Keyboard shortcuts

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