mod_num.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // package mod_num -- номер модуля
  2. package mod_num
  3. import (
  4. "fmt"
  5. "sync"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  7. )
  8. // AModNum -- номер модуля.
  9. type AModNum d0.Num
  10. // LModuleNum -- номер модуля.
  11. type LModuleNum struct {
  12. num AModNum // Номер модуля
  13. }
  14. var (
  15. nextNum AModNum // Следующий номер модуля
  16. block sync.Mutex
  17. )
  18. // LetModuleNum -- возвращает новый модуль номера.
  19. func LetModuleNum() *LModuleNum {
  20. block.Lock()
  21. defer block.Unlock()
  22. sf := &LModuleNum{
  23. num: nextNum,
  24. }
  25. nextNum++
  26. return sf
  27. }
  28. // FromStr -- возвращает новый номер модуля из строки.
  29. func FromStr(txtNumMod *d0.LTxt) *d0.Result[*LModuleNum] {
  30. resNum := txtNumMod.Atoi()
  31. if resNum.IsErr() {
  32. err := d0.LetErr("FromStr(): strNumMod(%q) not nu,ber, err=\n\t%w", txtNumMod, resNum.Err())
  33. return d0.ResErr[*LModuleNum](err)
  34. }
  35. sf := &LModuleNum{
  36. num: AModNum(resNum.Ok()),
  37. }
  38. return d0.ResOk(sf)
  39. }
  40. // Num -- получить номер модуля.
  41. func (sf *LModuleNum) Num() AModNum {
  42. return sf.num
  43. }
  44. // Get -- внутренняя строка модуля.
  45. func (sf *LModuleNum) Get() d0.Txt {
  46. return d0.LetTxt("%v", sf.num).Get()
  47. }
  48. // String -- строковое представление номера модуля.
  49. func (sf *LModuleNum) String() string {
  50. return fmt.Sprint(sf.num)
  51. }