entity

package
v0.0.0-...-73d4566 Latest Latest
Warning

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

Go to latest
Published: Feb 15, 2025 License: GPL-3.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ErrNilStore  = lerr.Str("entity.Store is nil")
	ErrNilEntRef = lerr.Str("entity pointer in EntRef is nil")
	ErrNoRecord  = lerr.Str("no record exists in the store for the given key")
)
View Source
const ErrBadKey = lerr.Str("bad entity key")

ErrBadKey is thrown when attempting to Put an entity with no key or a key comprised of all zeros. This detects when keys are not being set correctly or when incrementing values are being used which will result in collision.

View Source
const ErrNilPtr = lerr.Str("entity reference has nil pointer")

Variables

View Source
var (
	Store store.FlatStore

	ErrMustBeRefser = lerr.Str("must fulfill type entity.Refser")
)
View Source
var RandKeyLength = 8

Functions

func AddDeserializerListener

func AddDeserializerListener(fn func())

func AddGCRoots

func AddGCRoots(keys ...Key)

func AddSerializerListener

func AddSerializerListener(fn func())

func ClearCache

func ClearCache()

func GetDeserializer

func GetDeserializer() serial.PrefixDeserializer

func GetSerializer

func GetSerializer() serial.PrefixSerializer

func SetDeserializer

func SetDeserializer(d serial.PrefixDeserializer)

func SetSerializer

func SetSerializer(s serial.PrefixSerializer)

Types

type DefaultDeferrer

type DefaultDeferrer struct{}

func (DefaultDeferrer) DeferCacheClear

func (dd DefaultDeferrer) DeferCacheClear(er Referer)

func (DefaultDeferrer) DeferSave

func (dd DefaultDeferrer) DeferSave(er Referer, saveFn func() error)

type Deferrer

type Deferrer interface {
	DeferSave(er Referer, saveFn func() error)
	DeferCacheClear(er Referer)
}
var DeferStrategy Deferrer = DefaultDeferrer{}

type EntIniter

type EntIniter interface {
	EntInit()
}

EntIniter allows a type to perform initilization when a new instance is created, before EntLoad is called

type EntPtr

type EntPtr[T any] interface {
	*T
	Entity
}

EntPtr enforces that the Entity is a pointer of type *T.

type Entity

type Entity interface {
	EntKey() Key
	EntVal(buf []byte) ([]byte, error)
	EntLoad(k Key, data []byte) error
}

type Key

type Key []byte

func Garbage

func Garbage() []Key

func Rand

func Rand() Key

func (Key) EntKey

func (key Key) EntKey() Key

func (Key) Hash64

func (key Key) Hash64() uint64

func (Key) Key32

func (key Key) Key32() Key32

type Key32

type Key32 uint32

func Rand32

func Rand32() Key32

func (Key32) EntKey

func (k32 Key32) EntKey() Key

type Ref

type Ref[T any, E EntPtr[T]] struct {
	// contains filtered or unexported fields
}

Ref holds a reference to *T

func Get

func Get[T any, E EntPtr[T]](key Key) (out *Ref[T, E], found bool)

T does not need to fulfill entity because it could be an interface where the underlying type fulfills both Entity and ...

func KeyRef

func KeyRef[T any, E EntPtr[T]](k Key) *Ref[T, E]

func NewRef

func NewRef[T any, E EntPtr[T]](ent E) *Ref[T, E]

func Put

func Put[T any, E EntPtr[T]](ent E) *Ref[T, E]

Put the entity into the entity cache. If there is already an a record for this entity, the pointer will be updated.

func Save

func Save[T any, E EntPtr[T]](ent E) (*Ref[T, E], error)

func (*Ref[T, E]) Clear

func (er *Ref[T, E]) Clear(cacheRm bool)

Clear sets the underlying pointer to nil allowing the Entity to be garbage collected. This should only be temorary for testing.

func (*Ref[T, E]) Delete

func (er *Ref[T, E]) Delete() error

func (*Ref[T, E]) EntKey

func (er *Ref[T, E]) EntKey() Key

func (*Ref[T, E]) Get

func (er *Ref[T, E]) Get() (e E, ok bool)

func (*Ref[T, E]) GetEnt

func (er *Ref[T, E]) GetEnt() (e Entity, ok bool)

func (*Ref[T, E]) GetPtr

func (er *Ref[T, E]) GetPtr() (e E)

func (*Ref[T, E]) GobDecode

func (er *Ref[T, E]) GobDecode(key []byte) error

func (*Ref[T, E]) GobEncode

func (er *Ref[T, E]) GobEncode() ([]byte, error)

func (*Ref[T, E]) Save

func (er *Ref[T, E]) Save(ent E) error

func (*Ref[T, E]) WeakGet

func (er *Ref[T, E]) WeakGet() (e E, ok bool)

WeakGet will return the current value of the reference, but will not load the entity if the reference is nil.

type Referer

type Referer interface {
	EntKey() Key
	// contains filtered or unexported methods
}

type Refs

type Refs []Key

func (Refs) EntRefs

func (r Refs) EntRefs() []Key

type Refser

type Refser interface {
	EntRefs() []Key
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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