// package ctx_value -- потокобезопасное значение локального контекста. package ctx_value import ( "sync" "gitp78su.ipnodns.ru/svi/kern/v4/lev0" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec" ) // ICtxValue -- интерфейс к значению локального контекста. type ICtxValue[T any] interface { lev0.IString[T] core_spec.IRWMutex // Key -- возвращает ключ значения Key() lev0.ATxt // Val -- возвращает хранимое значение Val() any // CreateAt -- возвращает метку времени создания CreateAt() *lev0.LTime // UpdateAt -- возвращает метку времени обновления UpdateAt() *lev0.MTime // Comment -- возвращает комментарий значения Comment() *lev0.LTxt } // CtxValue -- потокобезопасное значение локального контекста. type CtxValue struct { sync.RWMutex key lev0.ATxt createAt *lev0.LTime Val_ any UpdateAt_ *lev0.MTime Comment_ *lev0.LTxt } // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста. func NewCtxValue[T lev0.TxtConstraint](key lev0.ATxt, val any, comment T) ICtxValue { lev0.If(key == "").Hassert("NewCtxValue(): key is empty", []any{}) sf := &CtxValue{ key: key, createAt: lev0.LetTimeAuto(), UpdateAt_: lev0.MutTimeAuto(), Val_: val, Comment_: lev0.LetTxt(comment), } return sf } // Key -- возвращает ключ значения. func (sf *CtxValue) Key() lev0.ATxt { 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_ }