| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // package safe_int -- потокобезопасный целое.
- package safe_int
- import (
- "fmt"
- "sync"
- mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev1/kint"
- )
- // safeInt -- потокобезопасное целое.
- type safeInt struct {
- sync.RWMutex
- val mKs.Int
- }
- // NewSafeInt -- возвращает новое потокобезопасное целое.
- func NewSafeInt(val int) mKs.ISafeInt {
- sf := &safeInt{
- val: kint.NewInt(val),
- }
- return sf
- }
- // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
- func NewSafeIntFromStr(strVal string) mL0.IResult[mKs.ISafeInt] {
- sf := NewSafeInt(0)
- res := sf.FromStr(strVal)
- if res.IsErr() {
- err := fmt.Errorf("NewSafeIntFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Err())
- return mL0.NewErr[mKs.ISafeInt](err)
- }
- return mL0.NewRes(sf)
- }
- // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
- func NewSafeIntGetenv(env string) mL0.IResult[mKs.ISafeInt] {
- sf := NewSafeInt(0)
- res := sf.Getenv(env)
- if res.IsErr() {
- err := fmt.Errorf("NewSafeIntGetenv(): in parse env(%v), err=\n\t%w", env, res.Err())
- return mL0.NewErr[mKs.ISafeInt](err)
- }
- return mL0.NewRes(sf)
- }
- // FromBool -- устанавливает значение из булева значения.
- func (sf *safeInt) FromBool(val bool) int {
- sf.Lock()
- defer sf.Unlock()
- return sf.val.FromBool(val)
- }
- // Get -- возвращает хранимое целое.
- func (sf *safeInt) Get() int {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.Get()
- }
- // Dec -- уменьшает значение на 1.
- func (sf *safeInt) Dec() {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Dec()
- }
- // Inc -- увеличивает значение на 1.
- func (sf *safeInt) Inc() {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Inc()
- }
- // Set -- устанавливает целое.
- func (sf *safeInt) Set(val int) {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Set(val)
- }
- // Reset -- сбрасывает целое.
- func (sf *safeInt) Reset() {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Reset()
- }
- // FromStr -- получает число из строки.
- func (sf *safeInt) FromStr(strVal string) mL0.IResult[int] {
- sf.Lock()
- defer sf.Unlock()
- return sf.val.FromStr(strVal)
- }
- // FromByte -- получает число из среза байт.
- func (sf *safeInt) FromByte(binData []byte) mL0.IResult[int] {
- sf.Lock()
- defer sf.Unlock()
- return sf.val.FromByte(binData)
- }
- // ToByte -- конвертирует число в срез байт.
- func (sf *safeInt) ToByte() []byte {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.ToByte()
- }
- // ToBool -- конвертирует число в bool.
- func (sf *safeInt) ToBool() bool {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.ToBool()
- }
- // ToStr -- конвертирует число в строку.
- func (sf *safeInt) ToStr() string {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.ToStr()
- }
- // Getenv -- получает значение из окружения.
- func (sf *safeInt) Getenv(env string) mL0.IResult[int] {
- sf.Lock()
- defer sf.Unlock()
- return sf.val.Getenv(env)
- }
|