//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: criticalSection.inl
//      Краткое описание: класс - критическая секция (монитор, мьютекс)
//

namespace ker
{
	inline CriticalSection::CriticalSection()
	{
		InitializeCriticalSection(&section);
		is_enter = false;
	};

	inline CriticalSection::~CriticalSection()
	{
		if(is_enter)
			leave();
		DeleteCriticalSection(&section);
	};

	// нельзя 2 раза сделать вызов функции EnterCriticalSection без предварительного вызова
	// DeleteCriticalSectino. Для безопасности один экземпляр класса это один вход и одни выход
	inline void CriticalSection::enter()
	{
		if(is_enter)
			return;
		EnterCriticalSection(&section);
		is_enter = true;
	};

	inline void CriticalSection::leave()
	{
		LeaveCriticalSection(&section);
		is_enter = false;
	};
};