package safeint

import "sync"

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

// SafeInt -- потокобезопасное целое
type SafeInt struct {
	val   int
	block sync.RWMutex
}

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

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

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