| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // package mod_num -- номер модуля
- package mod_num
- import (
- "fmt"
- "strconv"
- "sync"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
- )
- // AModNum -- номер модуля.
- type AModNum int
- // IModNumFix -- фиксированный модуль номера.
- type IModNumFix interface {
- // Get -- получить номер модуля
- Get() AModNum
- // String -- строковое представление номера модуля
- String() string
- }
- // moduleNum -- номер модуля.
- type moduleNum struct {
- num AModNum // Номер модуля
- }
- var (
- nextNum AModNum // Следующий номер модуля
- block sync.Mutex
- )
- // NewModuleNum -- возвращает новый модуль номера.
- func NewModuleNumFix() IModNumFix {
- block.Lock()
- defer block.Unlock()
- sf := &moduleNum{
- num: nextNum,
- }
- nextNum++
- return sf
- }
- // FromStr -- возвращает новый номер модуля из строки.
- func FromStr(strNumMod string) core_spec.IResult[IModNumFix] {
- iNum, err := strconv.Atoi(strNumMod)
- if err != nil {
- err := defs.Err("FromStr(): strNumMod(%q) not nu,ber, err=\n\t%w", strNumMod, err)
- return lev0.NewErr[IModNumFix](err)
- }
- sf := &moduleNum{
- num: AModNum(iNum),
- }
- return lev0.NewOk(IModNumFix(sf))
- }
- // Get -- получить номер модуля
- //
- func (sf *moduleNum) Get() AModNum {
- return sf.num
- }
- // String -- строковое представление номера модуля
- //
- func (sf *moduleNum) String() string {
- return fmt.Sprint(sf.num)
- }
|