quark_byte.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // package quark_byte -- кварк байт.
  2. package quark_byte
  3. import (
  4. "fmt"
  5. "strconv"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_base"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
  10. )
  11. // QByte -- кварк байт.
  12. type QByte[M quark_val.CMod] struct {
  13. *quark_base.QBase[M, byte] // базовый кварк
  14. }
  15. // NewQByte -- создать фиксированный кварк байт.
  16. func NewQByte(val byte) *QByte[quark_val.Fix] {
  17. optMass := quark_base.QBaseOptMass[quark_val.Fix, byte](1)
  18. optVal := quark_base.QBaseOptVal(val)
  19. sf := &QByte[quark_val.Fix]{
  20. QBase: quark_base.NewQBase(optMass, optVal),
  21. }
  22. return sf
  23. }
  24. // NewQByteMut -- создать мутируемый кварк байт.
  25. func NewQByteMut(val byte) *QByte[quark_val.Mut] {
  26. optMass := quark_base.QBaseOptMass[quark_val.Mut, byte](1)
  27. optVal := quark_base.QBaseOptValMut(val)
  28. sf := &QByte[quark_val.Mut]{
  29. QBase: quark_base.NewQBaseMut(optMass, optVal),
  30. }
  31. return sf
  32. }
  33. // Get -- получить значение.
  34. //
  35. //go:fix inline
  36. func (sf *QByte[T]) Get() byte {
  37. return sf.Val().Get()
  38. }
  39. // Set -- установить значение.
  40. //
  41. //go:fix inline
  42. func Set(sf *QByte[quark_val.Mut], val byte) {
  43. quark_val.Set(sf.Val(), val)
  44. }
  45. // ToInt -- представить значение как int.
  46. //
  47. //go:fix inline
  48. func (sf *QByte[T]) ToInt() int {
  49. return int(sf.Val().Get())
  50. }
  51. // ToStr -- представить значение как строку из одного байта.
  52. //
  53. //go:fix inline
  54. func (sf *QByte[T]) ToStr() string {
  55. return fmt.Sprint(sf.Val().Get())
  56. }
  57. // FromInt -- установить значение из int.
  58. func FromInt(sf *QByte[quark_val.Mut], v int) {
  59. mKh.Hassert(v >= 0 && v <= 255,
  60. defs.Str("QByte.FromInt(): значение вне диапазона байта"))
  61. quark_val.Set(sf.Val(), byte(v))
  62. }
  63. // FromStr -- установить значение из строки (как из целого числа).
  64. //
  65. //go:fix inline
  66. func FromStr(sf *QByte[quark_val.Mut], s string) {
  67. // Конвертируем строку в int и используем FromInt для всех проверок
  68. v, err := strconv.Atoi(s)
  69. mKh.Hassert(err == nil,
  70. defs.Str("QByte.FromStr(): не удалось преобразовать строку в int, err=\n\t%v", err))
  71. mKh.Hassert(v >= 0 && v <= 255,
  72. defs.Str("QByte.FromInt(): значение вне диапазона байта"))
  73. quark_val.Set(sf.Val(), byte(v))
  74. }