ctx_value.go 2.3 KB

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