paradigm_3/html/
/*! \file guard.h
  This is the Guard class definition and implementation inlined.

  \author Jon A. Lambert
  \date 05/02/2003
  \version 0.30
 */
#ifndef	GUARD_H
#define	GUARD_H

/*!
  The Guard class implements a synchronization mechanism based on
  the aquistion and release of a CRITICAL_SECTION upon construction
  and destruction of a Guard object.

  \note
  Objects that wish to use this must have a Critical Section, must initialze
  it in their constructor (InitializeCriticalSection), and must destroy it
  in their destructor (DeleteCriticalSection).

  \remarks
  BSD and Unix would use mutexes here.
 */
class Guard {
  CRITICAL_SECTION &Lock; //!< Reference to Critical Section we are guarding.
public:
  /*!
    Constructor for Guard class.

    \param l A reference to the Object's Critical Section
   */
  Guard(CRITICAL_SECTION &l) : Lock(l) {
    EnterCriticalSection(&Lock);
  }
  /*!
    Destructor for Guard class.
   */
  ~Guard() {
    LeaveCriticalSection(&Lock);
  }
};

#endif //	GUARD_H