| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // package mod_num -- номер модуля
- package mod_num
- import (
- "fmt"
- "sync"
- "gitp78su.ipnodns.ru/svi/kern/v4/d0"
- )
- // AModNum -- номер модуля.
- type AModNum d0.Num
- // LModuleNum -- номер модуля.
- type LModuleNum struct {
- num AModNum // Номер модуля
- }
- var (
- nextNum AModNum // Следующий номер модуля
- block sync.Mutex
- )
- // LetModuleNum -- возвращает новый модуль номера.
- func LetModuleNum() *LModuleNum {
- block.Lock()
- defer block.Unlock()
- sf := &LModuleNum{
- num: nextNum,
- }
- nextNum++
- return sf
- }
- // FromStr -- возвращает новый номер модуля из строки.
- func FromStr(txtNumMod *d0.LTxt) *d0.Result[*LModuleNum] {
- resNum := txtNumMod.Atoi()
- if resNum.IsErr() {
- err := d0.LetErr("FromStr(): strNumMod(%q) not nu,ber, err=\n\t%w", txtNumMod, resNum.Err())
- return d0.ResErr[*LModuleNum](err)
- }
- sf := &LModuleNum{
- num: AModNum(resNum.Ok()),
- }
- return d0.ResOk(sf)
- }
- // Num -- получить номер модуля.
- func (sf *LModuleNum) Num() AModNum {
- return sf.num
- }
- // Get -- внутренняя строка модуля.
- func (sf *LModuleNum) Get() d0.Txt {
- return d0.LetTxt("%v", sf.num).Get()
- }
- // String -- строковое представление номера модуля.
- func (sf *LModuleNum) String() string {
- return fmt.Sprint(sf.num)
- }
|