package safebool

import "sync"

/*
	Потокобезопасный булевый признак.
*/

// SafeBool -- потокобезопасный булевый признак
type SafeBool struct {
	val   bool
	block sync.RWMutex
}

// NewSafeBool -- возвращает новый *SafeBool
func NewSafeBool() *SafeBool {
	return &SafeBool{}
}

// Получ -- возвращает хранимое значение булевого признака
func (sf *SafeBool) Получ() bool {
	sf.block.RLock()
	defer sf.block.RUnlock()
	return sf.val
}

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

// Сброс -- сбарсывает хранимое значение булевого признака
func (sf *SafeBool) Сброс() {
	sf.block.Lock()
	defer sf.block.Unlock()
	sf.val = false
}
