ctx_value.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // package ctx_value -- потокобезопасное значение локального контекста.
  2. package ctx_value
  3. import (
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  5. )
  6. // CtxValue -- потокобезопасное значение локального контекста.
  7. type CtxValue struct {
  8. *lev0.MSafeMutex
  9. key *lev0.LTxt
  10. createAt *lev0.LTime
  11. Val_ any
  12. UpdateAt_ *lev0.MTime
  13. Comment_ *lev0.LTxt
  14. }
  15. // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
  16. func NewCtxValue[T lev0.TxtConstraint](key lev0.Txt, val any, comment T) *CtxValue {
  17. lev0.If(key == "").Hassert("NewCtxValue(): key is empty", []any{})
  18. sf := &CtxValue{
  19. MSafeMutex: lev0.MutSafeMutex(),
  20. key: lev0.LetTxt(key),
  21. createAt: lev0.LetTimeAuto(),
  22. UpdateAt_: lev0.MutTimeAuto(),
  23. Val_: val,
  24. Comment_: lev0.LetTxt(comment),
  25. }
  26. return sf
  27. }
  28. // Key -- возвращает ключ значения.
  29. func (sf *CtxValue) Key() *lev0.LTxt {
  30. return sf.key
  31. }
  32. // Val -- возвращает хранимое значение.
  33. func (sf *CtxValue) Val() any {
  34. sf.RLock()
  35. defer sf.RUnlock()
  36. return sf.Val_
  37. }
  38. // UpdateAt -- возвращает время обновления значения.
  39. func (sf *CtxValue) UpdateAt() *lev0.MTime {
  40. sf.RLock()
  41. defer sf.RUnlock()
  42. return sf.UpdateAt_
  43. }
  44. // CreateAt -- возвращает время создания значения.
  45. func (sf *CtxValue) CreateAt() *lev0.LTime {
  46. return sf.createAt
  47. }
  48. // Comment -- возвращает комментарий значения.
  49. func (sf *CtxValue) Comment() *lev0.LTxt {
  50. sf.RLock()
  51. defer sf.RUnlock()
  52. return sf.Comment_
  53. }