#pragma once

//! @file Mix/ScopedLock.h
//! @brief スコープロッククラスインクルードファイル

#include "Mix/Noncopyable.h"
#include "Mix/CriticalSection.h"

namespace Mix{

	//! @class ScopedLock
	//! @brief スコープクラス
	//! @note スコープの同期をとる際に使用することができます
	//! <pre>
	//! 例
	//! Mix::CriticalSection m_Sync;
	//! void Test( void )
	//! {
	//!    Mix::ScopedLock lock( m_Sync );
	//!    同期をとるコード
	//! }
	//! </pre>
	class _MIX_DLL_API ScopedLock : public Noncopyable
	{
	private:
		const Mix::CriticalSection& m_Sync;	//!< クリティカルセクション

	public:
		//! @brief コンストラクタ
		//! @param[in] cs クリティカルセクション
		ScopedLock( const Mix::CriticalSection& cs );
		//! @brief デストラクタ
		~ScopedLock( void );
	};

}
