package safe_bool

import "sync"

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

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

// НовБезопБул -- возвращает новый *SafeBool
func НовБезопБул() *БезопБул {
	return &БезопБул{}
}

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

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

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