#pragma once

namespace FDK
{
	// bool 専用の、内部に参照オブジェクトを持たないタイプの CAtom。
	// CAtom<bool> は、保有者のDispose時に内部のlockObjectが解放されてしまうので
	// 例えば CAtom<bool> bDisposed; など、Dispose 後にアクセスする用途には使用できない。
	public ref class CAtomBool
	{
	public:
		CAtomBool()
		{
		}
		CAtomBool( bool b初期値 )
			:CAtomBool()
		{
			this->Set( b初期値 );
		}

		bool Get()
		{
			int now = Interlocked::Add( this->atomNum, 0 );
			return ( now != 0 ) ? true : false;
		}

		void Set( bool value )
		{
			Interlocked::Exchange( this->atomNum, ( value ) ? 1 : 0 );
		}

	private:
		int atomNum;
	};
}
