| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // package quark_byte -- кварк байт.
- package quark_byte
- import (
- "fmt"
- "strconv"
- mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_base"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
- )
- // QByte -- кварк байт.
- type QByte[M quark_val.CMod] struct {
- *quark_base.QBase[M, byte] // базовый кварк
- }
- // NewQByte -- создать фиксированный кварк байт.
- func NewQByte(val byte) *QByte[quark_val.Fix] {
- optMass := quark_base.QBaseOptMass[quark_val.Fix, byte](1)
- optVal := quark_base.QBaseOptVal(val)
- sf := &QByte[quark_val.Fix]{
- QBase: quark_base.NewQBase(optMass, optVal),
- }
- return sf
- }
- // NewQByteMut -- создать мутируемый кварк байт.
- func NewQByteMut(val byte) *QByte[quark_val.Mut] {
- optMass := quark_base.QBaseOptMass[quark_val.Mut, byte](1)
- optVal := quark_base.QBaseOptValMut(val)
- sf := &QByte[quark_val.Mut]{
- QBase: quark_base.NewQBaseMut(optMass, optVal),
- }
- return sf
- }
- // Get -- получить значение.
- //
- //go:fix inline
- func (sf *QByte[T]) Get() byte {
- return sf.Val().Get()
- }
- // Set -- установить значение.
- //
- //go:fix inline
- func Set(sf *QByte[quark_val.Mut], val byte) {
- quark_val.Set(sf.Val(), val)
- }
- // ToInt -- представить значение как int.
- //
- //go:fix inline
- func (sf *QByte[T]) ToInt() int {
- return int(sf.Val().Get())
- }
- // ToStr -- представить значение как строку из одного байта.
- //
- //go:fix inline
- func (sf *QByte[T]) ToStr() string {
- return fmt.Sprint(sf.Val().Get())
- }
- // FromInt -- установить значение из int.
- func FromInt(sf *QByte[quark_val.Mut], v int) {
- mKh.Hassert(v >= 0 && v <= 255, "QByte.FromInt(): значение вне диапазона байта")
- quark_val.Set(sf.Val(), byte(v))
- }
- // FromStr -- установить значение из строки (как из целого числа).
- //
- //go:fix inline
- func FromStr(sf *QByte[quark_val.Mut], s string) {
- // Конвертируем строку в int и используем FromInt для всех проверок
- v, err := strconv.Atoi(s)
- mKh.Hassert(err == nil, "QByte.FromStr(): не удалось преобразовать строку в int, err=\n\t%v", err)
- mKh.Hassert(v >= 0 && v <= 255, "QByte.FromInt(): значение вне диапазона байта")
- quark_val.Set(sf.Val(), byte(v))
- }
|