ctx_value.go 1.7 KB

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