// package safe_bool -- потокобезопасный булевый признак
package safe_bool

import "sync"

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

// NewSafeBool -- возвращает новый потокобезопасный булевый признак
func NewSafeBool() *SafeBool {
	sf := &SafeBool{}
	return sf
}

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

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

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