CS.H

#ifndef __CS_H 
#define __CS_H

//------------------------
//
// class CCriticalSection
//
class CCriticalSection
{
friend class CS;
friend class ConditionalCS;

public:
CCriticalSection(){InitializeCriticalSection(&_cs);}
~CCriticalSection(){DeleteCriticalSection(&_cs);}
void Enter() {EnterCriticalSection(&_cs);}
void Leave() {LeaveCriticalSection(&_cs);}

private:
void Lock() { Enter(); }
void Unlock() { Leave(); }

private:
CRITICAL_SECTION _cs;
};


//------------------------
//
// class CS
//
class CS {
CCriticalSection* m_lock;

public:
CS(CCriticalSection& lock);
~CS();
};

//- implementation -------
//
// class CS
//
inline CS::CS(CCriticalSection& lock) :
m_lock(&lock)
{
m_lock->Lock();
}

inline CS::~CS()
{
m_lock->Unlock();
}


#endif // _CS_H