parse_sec.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package parse_sec
  2. import (
  3. "fmt"
  4. "strconv"
  5. "sync"
  6. "wartank/pkg/alias"
  7. "wartank/pkg/types"
  8. )
  9. /*
  10. Парсер секунд
  11. */
  12. // ПарсерСекунд -- парсер секунд
  13. type ПарсерСекунд struct {
  14. знач alias.Сек
  15. блок sync.RWMutex
  16. }
  17. // НовПарсерСекунд -- возвращает новый *ParseSec
  18. func НовПарсерСекунд() *ПарсерСекунд {
  19. сам := &ПарсерСекунд{}
  20. _ = types.ИПарсерСек(сам)
  21. return сам
  22. }
  23. // ПолучМилСек -- возвращает число милСек в хранимых секундах
  24. func (сам *ПарсерСекунд) ПолучМилСек() alias.МилСек {
  25. return alias.МилСек(сам.знач * 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("ПарсерСекунд.Уст(): секунды(%v) не число, ош=\n\t%w", стрСек, err)
  53. }
  54. цСек := alias.Сек(_цСек)
  55. if err := сам.уст(цСек); err != nil {
  56. return fmt.Errorf("ПарсерСекунд.Уст(): при внутренней установке, ош=\n\t%w", err)
  57. }
  58. return nil
  59. }
  60. // УстСек -- устанавливает хранимое значение секунд
  61. func (сам *ПарсерСекунд) УстСек(цСек alias.Сек) error {
  62. сам.блок.Lock()
  63. defer сам.блок.Unlock()
  64. if ош := сам.уст(цСек); ош != nil {
  65. return fmt.Errorf("ПарсерСекунд.Уст(): при установке числа секунд, ош=\n\t%w", ош)
  66. }
  67. return nil
  68. }
  69. // Внутренняя установка значения секунд
  70. func (сам *ПарсерСекунд) уст(цСек alias.Сек) error {
  71. if цСек >= 60 {
  72. return fmt.Errorf("ПарсерСекунд.уст(): секунды(%v) не в диапазоне 0..60", цСек)
  73. }
  74. сам.знач = цСек
  75. return nil
  76. }