| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // package mod_num -- номер модуля
- package mod_num
- import (
- "fmt"
- "sync"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- "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) *lev0.Result[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)
- }
|