package isshot

import (
	"sync"
)

/*
	Потокобезопасный признак внешнего разрешения выстрела
*/

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

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

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

// Set -- устанавливает хранимое состояние
func (sf *IsShot) Set() {
	sf.block.Lock()
	defer sf.block.Unlock()
	sf.val = true
}

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