| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package ctx_value -- потокобезопасное значение локального контекста.
- package ctx_value
- import (
- "sync"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
- )
- // ICtxValue -- интерфейс к значению локального контекста.
- type ICtxValue interface {
- core_spec.IRWMutex
- // Key -- возвращает ключ значения
- Key() defs.ITxtFix
- // Val -- возвращает хранимое значение
- Val() any
- // CreateAt -- возвращает метку времени создания
- CreateAt() core_spec.ITime
- // UpdateAt -- возвращает метку времени обновления
- UpdateAt() core_spec.ITimeMut
- // Comment -- возвращает комментарий значения
- Comment() defs.ITxtFix
- }
- // CtxValue -- потокобезопасное значение локального контекста.
- type CtxValue struct {
- sync.RWMutex
- key defs.ITxtFix
- createAt core_spec.ITime
- Val_ any
- UpdateAt_ core_spec.ITimeMut
- Comment_ defs.ITxtFix
- }
- // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
- func NewCtxValue(key defs.ITxtFix, val any, comment any) ICtxValue {
- helpers.Hassert(key != nil, "NewCtxValue(): key is empty", []any{})
- sf := &CtxValue{
- key: key,
- createAt: etime.NewETimeAuto(),
- UpdateAt_: etime.NewETimeAutoMut(),
- Val_: val,
- Comment_: defs.Txt("%v", comment),
- }
- return sf
- }
- // Key -- возвращает ключ значения.
- func (sf *CtxValue) Key() defs.ITxtFix {
- return sf.key
- }
- // Val -- возвращает хранимое значение.
- func (sf *CtxValue) Val() any {
- sf.RLock()
- defer sf.RUnlock()
- return sf.Val_
- }
- // UpdateAt -- возвращает время обновления значения.
- func (sf *CtxValue) UpdateAt() core_spec.ITimeMut {
- sf.RLock()
- defer sf.RUnlock()
- return sf.UpdateAt_
- }
- // CreateAt -- возвращает время создания значения.
- func (sf *CtxValue) CreateAt() core_spec.ITime {
- return sf.createAt
- }
- // Comment -- возвращает комментарий значения.
- func (sf *CtxValue) Comment() defs.ITxtFix {
- sf.RLock()
- defer sf.RUnlock()
- return sf.Comment_
- }
|