parse_min.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package parse_min
  2. import (
  3. "fmt"
  4. "strconv"
  5. "sync"
  6. "wartank/pkg/alias"
  7. "wartank/pkg/types"
  8. )
  9. /*
  10. Потокобезопасно парсит из строки значение vbyen
  11. */
  12. // ПарсерМинут -- потокобезопасный парсер vbyen из строки
  13. type ПарсерМинут struct {
  14. знач alias.Мин // Значение минут
  15. блок sync.RWMutex
  16. }
  17. // НовПарсерМинут -- возвращает новый *ПарсерМинут
  18. func НовПарсерМинут() *ПарсерМинут {
  19. сам := &ПарсерМинут{}
  20. _ = types.ИПарсерМин(сам)
  21. return сам
  22. }
  23. // ПолучМилСек -- возвращает общее число миллисекунд в значении
  24. func (сам *ПарсерМинут) ПолучМилСек() alias.МилСек {
  25. return alias.МилСек(сам.знач * 60 * 1_000)
  26. }
  27. // Получ -- возвращает хранимое значение
  28. func (сам *ПарсерМинут) Получ() alias.Мин {
  29. сам.блок.RLock()
  30. defer сам.блок.RUnlock()
  31. return сам.знач
  32. }
  33. // String -- возвращает строковое значение минут
  34. func (сам *ПарсерМинут) String() string {
  35. сам.блок.RLock()
  36. defer сам.блок.RUnlock()
  37. res := fmt.Sprintf("%02d", сам.знач)
  38. return res
  39. }
  40. // Сброс -- сбрасывает значение минут
  41. func (сам *ПарсерМинут) Сброс() {
  42. сам.блок.Lock()
  43. defer сам.блок.Unlock()
  44. сам.знач = 0
  45. }
  46. // Уст -- устанавливает значение минут
  47. func (сам *ПарсерМинут) Уст(стрМин alias.Время) error {
  48. сам.блок.Lock()
  49. defer сам.блок.Unlock()
  50. _цМин, err := strconv.Atoi(string(стрМин))
  51. if err != nil {
  52. return fmt.Errorf("ПарсерМинут.Parse(): минуты(%v) не число, err=%w", стрМин, err)
  53. }
  54. цМин := alias.Мин(_цМин)
  55. if err := сам.уст(цМин); err != nil {
  56. return fmt.Errorf("ПарсерМинут.Parse(): in internal set, err=\n\t%w", err)
  57. }
  58. return nil
  59. }
  60. // УстМин -- устанавливает целочисленное значение минут
  61. func (сам *ПарсерМинут) УстМин(цМин alias.Мин) error {
  62. сам.блок.Lock()
  63. defer сам.блок.Unlock()
  64. if err := сам.уст(цМин); err != nil {
  65. return fmt.Errorf("ПарсерМинут.Set(): in internal set, err=\n\t%w", err)
  66. }
  67. return nil
  68. }
  69. // Внтренняя установка минут
  70. func (сам *ПарсерМинут) уст(цМин alias.Мин) error {
  71. if !(0 <= цМин && цМин < 60) {
  72. return fmt.Errorf("ПарсерМинут.set(): минуты не в диапазоне(%v) 0..60", цМин)
  73. }
  74. сам.знач = цМин
  75. return nil
  76. }