package safe_int

import (
	"sync"

	"wartank/pkg/types"
)

/*
	Потокобезопасное целое
*/

// БезопЦелое -- потокобезопасное целое
type БезопЦелое struct {
	знач int
	блок sync.RWMutex
}

// НовБезопЦелое -- возвращает новый *БезопЦелое
func НовБезопЦелое() *БезопЦелое {
	сам := &БезопЦелое{}
	_ = types.ИСбрасыватель(сам)
	return сам
}

// Сброс -- сбрасывает в исходное значение
func (сам *БезопЦелое) Сброс() {
	сам.блок.Lock()
	defer сам.блок.Unlock()
	сам.знач = 0
}

// Получ -- возвращает хранимое значение
func (сам *БезопЦелое) Получ() int {
	сам.блок.RLock()
	defer сам.блок.RUnlock()
	return сам.знач
}

// Уст -- устанавливает хранимое значение
func (сам *БезопЦелое) Уст(val int) {
	сам.блок.Lock()
	defer сам.блок.Unlock()
	сам.знач = val
}
