ctx_value.go 1.8 KB

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