| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package parse_hour
- import (
- "fmt"
- "strconv"
- "sync"
- "wartank/pkg/alias"
- "wartank/pkg/types"
- )
- /*
- Потокобезопасно парсит из строки значение часа
- */
- // ПарсерЧас -- потокобезопасный парсер часа из строки
- type ПарсерЧас struct {
- знач alias.Час // Значение часа
- блок sync.RWMutex
- }
- // НовПарсерЧас -- возвращает новый *ПарсерЧас
- func НовПарсерЧас() *ПарсерЧас {
- сам := &ПарсерЧас{}
- _ = types.ИПарсерЧас(сам)
- return сам
- }
- // Получ -- возвращает хранимое значение
- func (сам *ПарсерЧас) Получ() alias.Час {
- сам.блок.RLock()
- defer сам.блок.RUnlock()
- return сам.знач
- }
- // String -- возвращает строковое значение часов
- func (сам *ПарсерЧас) String() string {
- сам.блок.RLock()
- defer сам.блок.RUnlock()
- res := fmt.Sprintf("%02d", сам.знач)
- return res
- }
- // Сброс -- сбрасывает значение часов
- func (сам *ПарсерЧас) Сброс() {
- сам.блок.Lock()
- defer сам.блок.Unlock()
- сам.знач = 0
- }
- // Уст -- устанавливает значение часов
- //
- // Значение часов может быть больше 24
- func (sf *ПарсерЧас) Уст(часы string) error {
- sf.блок.Lock()
- defer sf.блок.Unlock()
- цЧасы, err := strconv.Atoi(часы)
- if err != nil {
- return fmt.Errorf("ПарсерЧас.Уст(): часы(%q) не число, err=\n\t%w", часы, err)
- }
- if цЧасы<0{
- return fmt.Errorf("ПарсерЧас.Уст(): часы(%q) меньше нуля, err=\n\t%w", часы, err)
- }
- if err := sf.уст(alias.Час(цЧасы)); err != nil {
- return fmt.Errorf("ПарсерЧас.Уст(): in internal set hour(%q), err=\n\t%w", часы, err)
- }
- return nil
- }
- // УстЦел -- устанавливает числовое значение часов
- func (sf *ПарсерЧас) УстЦел(часы alias.Час) error {
- sf.блок.Lock()
- defer sf.блок.Unlock()
- if err := sf.уст(часы); err != nil {
- return fmt.Errorf("ПарсерЧас.УстЦел(): in internal set hour(%v), err=\n\t%w", часы, err)
- }
- return nil
- }
- // Внутренняя процедура для числовой установки часов без блокировки
- func (sf *ПарсерЧас) уст(часы alias.Час) error {
- sf.знач = часы
- return nil
- }
|