// package ctx_value -- потокобезопасное значение локального контекста. package ctx_value import ( "gitp78su.ipnodns.ru/svi/kern/v4/d0" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner" ) // CtxValue -- потокобезопасное значение локального контекста. type CtxValue struct { *d0.MSafeMutex key *d0.LTxt createAt *d0.LTime Val_ any UpdateAt_ *d0.MTime Comment_ *d0.LTxt } // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста. func NewCtxValue[T d0.TxtConstraint](owner *owner.LOwner, key d0.Txt, val any, comment T) *CtxValue { d0.If(key == "").Hassert("NewCtxValue(): key is empty", []any{}) sf := &CtxValue{ MSafeMutex: d0.MutSafeMutex(), key: d0.LetTxt(owner, key), createAt: d0.LetTimeAuto(), UpdateAt_: d0.MutTimeAuto(), Val_: val, Comment_: d0.LetTxt(owner, comment), } return sf } // Key -- возвращает ключ значения. func (sf *CtxValue) Key() *d0.LTxt { return sf.key } // Val -- возвращает хранимое значение. func (sf *CtxValue) Val() any { sf.RLock() defer sf.RUnlock() return sf.Val_ } // UpdateAt -- возвращает время обновления значения. func (sf *CtxValue) UpdateAt() *d0.MTime { sf.RLock() defer sf.RUnlock() return sf.UpdateAt_ } // CreateAt -- возвращает время создания значения. func (sf *CtxValue) CreateAt() *d0.LTime { return sf.createAt } // Comment -- возвращает комментарий значения. func (sf *CtxValue) Comment() *d0.LTxt { sf.RLock() defer sf.RUnlock() return sf.Comment_ }