quark_byte.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // package quark_byte -- кварк байт
  2. package quark_byte
  3. import (
  4. "fmt"
  5. "strconv"
  6. . "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. func (sf *QByte[T]) Get() byte {
  34. return sf.Val().Get()
  35. }
  36. // Set -- установить значение
  37. func Set(sf *QByte[quark_val.Mut], val byte) {
  38. quark_val.Set(sf.Val(), val)
  39. }
  40. // ToInt -- представить значение как int
  41. func (sf *QByte[T]) ToInt() int {
  42. return int(sf.Val().Get())
  43. }
  44. // ToStr -- представить значение как строку из одного байта
  45. func (sf *QByte[T]) ToStr() string {
  46. return fmt.Sprint(sf.Val().Get())
  47. }
  48. // FromInt -- установить значение из int
  49. func FromInt(sf *QByte[quark_val.Mut], v int) {
  50. Hassert(v >= 0 && v <= 255, "QByte.FromInt(): значение вне диапазона байта")
  51. quark_val.Set(sf.Val(), byte(v))
  52. }
  53. // FromStr -- установить значение из строки (как из целого числа)
  54. func FromStr(sf *QByte[quark_val.Mut], s string) {
  55. // Конвертируем строку в int и используем FromInt для всех проверок
  56. v, err := strconv.Atoi(s)
  57. Hassert(err == nil, "QByte.FromStr(): не удалось преобразовать строку в int, err=\n\t%v", err)
  58. FromInt(sf, v)
  59. }