| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // 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)
- }
|