| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- // package kint -- целочисленная переменная ядра.
- package kint
- import (
- "bytes"
- "encoding/binary"
- "os"
- "strconv"
- mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
- )
- // Целочисленная переменная ядра.
- type KernInt struct {
- val defs.Int
- }
- // NewInt -- возвращает новое целое ядра.
- func NewInt(val defs.Int) core_spec.Int {
- sf := &KernInt{
- val: val,
- }
- return sf
- }
- // Get -- возвращает хранимое значение потокобезопасной переменной.
- func (sf *KernInt) Get() defs.Int {
- return sf.val
- }
- // Set -- устанавливает хранимое потокобезопасное значение.
- func (sf *KernInt) Set(val defs.Int) {
- sf.val = val
- }
- // Inc -- увеличивает на единицу.
- func (sf *KernInt) Inc() {
- sf.val++
- }
- // Dec -- уменьшает на единицу.
- func (sf *KernInt) Dec() {
- sf.val--
- }
- // Reset -- сбрасывает хранимое потокобезопасное значение.
- func (sf *KernInt) Reset() {
- sf.val = 0
- }
- // FromStr -- устанавливает значение из строки.
- func (sf *KernInt) FromStr(strVal defs.ITxtFix) mL0.IResult[defs.Int] {
- iVal, err := strconv.Atoi(strVal.String())
- if err != nil {
- err := defs.Err("KInt.FromStr(): vak(%v) bad, err=\n\t%w", strVal, err)
- return mL0.NewErr[defs.Int](err)
- }
- sf.val = defs.Int(iVal)
- return mL0.NewOk(sf.val)
- }
- // ToStr -- возвращает как строку.
- func (sf *KernInt) ToStr() defs.ITxtFix {
- return defs.Txt("%v", sf.val)
- }
- // FromByte -- устанавливает значение из байтов (BigEndian, net order).
- func (sf *KernInt) FromByte(binData []byte) mL0.IResult[defs.Int] {
- lenBin := len(binData)
- if lenBin < 8 {
- err := defs.Err("KInt.FromByte(): len(%v) bytes shorts", lenBin)
- return mL0.NewErr[defs.Int](err)
- }
- var signed int64
- buf := bytes.NewReader(binData)
- err := binary.Read(buf, binary.BigEndian, &signed)
- if err != nil {
- err := defs.Err("KInt.FromByte(): in read []byte, err=\n\t%w", err)
- return mL0.NewErr[defs.Int](err)
- }
- sf.val = defs.Int(signed)
- return mL0.NewOk(sf.val)
- }
- // ToByte -- возвращает как срез байт.
- func (sf *KernInt) ToByte() []byte {
- buf := make([]byte, 8)
- binary.BigEndian.PutUint64(buf, uint64(sf.val))
- return buf
- }
- // FromBool -- устанавливает значение из булева.
- func (sf *KernInt) FromBool(isVal bool) defs.Int {
- if isVal {
- sf.val = -1
- return -1
- }
- sf.val = 0
- return 0
- }
- // ToBool -- возвращает как булево значение.
- func (sf *KernInt) ToBool() bool {
- return sf.val != 0
- }
- // Getenv -- устанавливает значение из окружения.
- func (sf *KernInt) Getenv(env defs.ITxtFix) core_spec.IResult[defs.Int] {
- strVal := defs.ATxt(os.Getenv(env.String()))
- res := sf.FromStr(defs.Txt(strVal))
- if res.IsErr() {
- err := defs.Err("safeInt.Getenv(): from env %v, err=\n\t%w", env, res.Err())
- return mL0.NewErr[defs.Int](err)
- }
- return mL0.NewOk(sf.val)
- }
|