| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package parsesec
- import (
- "fmt"
- "strconv"
- "sync"
- )
- /*
- Парсер секунд
- */
- // ParseSec -- парсер секунд
- type ParseSec struct {
- val int
- block sync.RWMutex
- }
- // NewParseSec -- возвращает новый *ParseSec
- func NewParseSec() *ParseSec {
- return &ParseSec{}
- }
- // Get -- возвращает хранимое значение
- func (sf *ParseSec) Get() int {
- sf.block.RLock()
- defer sf.block.RUnlock()
- return sf.val
- }
- // String -- возвращает строковое значение секунд
- func (sf *ParseSec) String() string {
- sf.block.RLock()
- defer sf.block.RUnlock()
- res := fmt.Sprintf("%02d", sf.val)
- return res
- }
- // Reset -- сбрасывает значение секунд
- func (sf *ParseSec) Reset() {
- sf.block.Lock()
- defer sf.block.Unlock()
- sf.val = 0
- }
- // Parse -- устанавливает значение секунд
- func (sf *ParseSec) Parse(strSec string) error {
- sf.block.Lock()
- defer sf.block.Unlock()
- iSec, err := strconv.Atoi(strSec)
- if err != nil {
- return fmt.Errorf("ParseSec.Parse(): секунды(%v) не число, err=%w", strSec, err)
- }
- if err := sf.set(iSec); err != nil {
- return fmt.Errorf("ParseSec.Parse(): in internal setting, err=\n\t%w", err)
- }
- return nil
- }
- // Set -- устанавливает целочисленное значение
- func (sf *ParseSec) Set(iSec int) error {
- sf.block.Lock()
- defer sf.block.Unlock()
- if err := sf.set(iSec); err != nil {
- return fmt.Errorf("ParseSec.Set(): in internal setting int, err=\n\t%w", err)
- }
- return nil
- }
- // Внутренняя установка значения секунд
- func (sf *ParseSec) set(iSec int) error {
- if !(0 <= iSec && iSec < 60) {
- return fmt.Errorf("ParseSec.set(): секунды(%v) не в диапазоне 0..60", iSec)
- }
- sf.val = iSec
- return nil
- }
|