quark_byte.go 2.3 KB

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