// package mod_num -- номер модуля package mod_num import ( "fmt" "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 defs.Int // IModNumFix -- фиксированный модуль номера. type IModNumFix interface { defs.IString // Get -- получить номер модуля Get() AModNum } // 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(txtNumMod defs.ITxtFix) core_spec.IResult[IModNumFix] { resNum := txtNumMod.Atoi() if resNum.IsErr() { err := defs.Err("FromStr(): strNumMod(%q) not nu,ber, err=\n\t%w", txtNumMod, resNum.Err()) return lev0.NewErr[IModNumFix](err) } sf := &moduleNum{ num: AModNum(resNum.Ok()), } 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) }