mod_num.go 1.4 KB

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