ctx_value.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // package ctx_value -- потокобезопасное значение локального контекста
  2. package ctx_value
  3. import (
  4. "sync"
  5. . "gitp78su.ipnodns.ru/svi/kern/v3/kc/helpers"
  6. . "gitp78su.ipnodns.ru/svi/kern/v3/krn/kalias"
  7. . "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
  8. )
  9. // CtxValue -- потокобезопасное значение локального контекста
  10. type CtxValue struct {
  11. sync.RWMutex
  12. key string
  13. createAt ATime
  14. Val_ any
  15. UpdateAt_ ATime
  16. Comment_ string
  17. }
  18. // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста
  19. func NewCtxValue(key string, val any, comment string) ICtxValue {
  20. Hassert(key != "", "NewCtxValue(): key is empty")
  21. sf := &CtxValue{
  22. key: key,
  23. createAt: TimeNowStr(),
  24. Val_: val,
  25. Comment_: comment,
  26. }
  27. return sf
  28. }
  29. // Key -- возвращает ключ значения
  30. func (sf *CtxValue) Key() string {
  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() ATime {
  41. sf.RLock()
  42. defer sf.RUnlock()
  43. return sf.UpdateAt_
  44. }
  45. // CreateAt -- возвращает время создания значения
  46. func (sf *CtxValue) CreateAt() ATime {
  47. return sf.createAt
  48. }
  49. // Comment -- возвращает комментарий значения
  50. func (sf *CtxValue) Comment() string {
  51. sf.RLock()
  52. defer sf.RUnlock()
  53. return sf.Comment_
  54. }