// 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_ }