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