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