ctx_value.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // package ctx_value -- потокобезопасное значение локального контекста.
  2. package ctx_value
  3. import (
  4. "sync"
  5. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  6. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
  9. )
  10. // CtxValue -- потокобезопасное значение локального контекста.
  11. type CtxValue struct {
  12. sync.RWMutex
  13. key string
  14. createAt mKs.ITime
  15. Val_ any
  16. UpdateAt_ mKs.ITimeMut
  17. Comment_ string
  18. }
  19. // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
  20. func NewCtxValue(key string, val any, comment string) comp_spec.ICtxValue {
  21. mL0.Hassert(key != "", "NewCtxValue(): key is empty")
  22. sf := &CtxValue{
  23. key: key,
  24. createAt: etime.NewETimeAuto(),
  25. UpdateAt_: etime.NewETimeAutoMut(),
  26. Val_: val,
  27. Comment_: comment,
  28. }
  29. return sf
  30. }
  31. // Key -- возвращает ключ значения.
  32. func (sf *CtxValue) Key() string {
  33. return sf.key
  34. }
  35. // Val -- возвращает хранимое значение.
  36. func (sf *CtxValue) Val() any {
  37. sf.RLock()
  38. defer sf.RUnlock()
  39. return sf.Val_
  40. }
  41. // UpdateAt -- возвращает время обновления значения.
  42. func (sf *CtxValue) UpdateAt() mKs.ITimeMut {
  43. sf.RLock()
  44. defer sf.RUnlock()
  45. return sf.UpdateAt_
  46. }
  47. // CreateAt -- возвращает время создания значения.
  48. func (sf *CtxValue) CreateAt() mKs.ITime {
  49. return sf.createAt
  50. }
  51. // Comment -- возвращает комментарий значения.
  52. func (sf *CtxValue) Comment() string {
  53. sf.RLock()
  54. defer sf.RUnlock()
  55. return sf.Comment_
  56. }