def_num_let.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // package def_num -- внутреннее число
  2. package def_num
  3. import (
  4. "encoding/binary"
  5. "fmt"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_fn"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/d0/helpers"
  10. )
  11. // LNum -- внутренне неизменяемое число.
  12. type LNum struct {
  13. *owner.OwnerPass
  14. val def_spec_base.Num
  15. }
  16. // LetNum -- возвращает новое внутреннее неизменяемое число.
  17. func LetNum[T def_spec_base.NumConstraint](owner *owner.LOwner, val T) *LNum {
  18. helpers.If(owner == nil).Hassert("LetNum(): LOwner==nil")
  19. sf := &LNum{
  20. OwnerPass: owner.Pass(),
  21. val: def_spec_base.Num(val),
  22. }
  23. return sf
  24. }
  25. // Get -- возвращает хранимое значение числа.
  26. func (sf *LNum) Get() def_spec_base.Num {
  27. sf.CheckOwner()
  28. return sf.val
  29. }
  30. // Txt -- возвращает как текст.
  31. func (sf *LNum) Txt() def_spec_base.Txt {
  32. sf.CheckOwner()
  33. return def_spec_fn.Sprintf("%v", sf.val)
  34. }
  35. // ToByte -- возвращает как срез байт.
  36. func (sf *LNum) ToByte() []byte {
  37. sf.CheckOwner()
  38. buf := make([]byte, 8)
  39. binary.BigEndian.PutUint64(buf, uint64(sf.val))
  40. return buf
  41. }
  42. // Int -- возвращает целое
  43. func (sf *LNum) Int() int {
  44. sf.CheckOwner()
  45. return int(sf.val)
  46. }
  47. // Num -- возвращает как число
  48. func (sf *LNum) Num() def_spec_base.Num {
  49. sf.CheckOwner()
  50. return sf.val
  51. }
  52. // String -- возвращает строку
  53. func (sf *LNum) String() string {
  54. sf.CheckOwner()
  55. return fmt.Sprintf("%v", sf.val)
  56. }
  57. // Let -- возвращает неизменяемое значение
  58. func (sf *LNum) Let() *LNum {
  59. sf.CheckOwner()
  60. return sf
  61. }