Blame include/cppunit/SynchronizedObject.h

Packit Service e31359
#ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H
Packit Service e31359
#define CPPUNIT_SYNCHRONIZEDOBJECT_H
Packit Service e31359
Packit Service e31359
#include <cppunit/Portability.h>
Packit Service e31359
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_BEGIN
Packit Service e31359
Packit Service e31359
Packit Service e31359
/*! \brief Base class for synchronized object.
Packit Service e31359
 *
Packit Service e31359
 * Synchronized object are object which members are used concurrently by mutiple
Packit Service e31359
 * threads.
Packit Service e31359
 *
Packit Service e31359
 * This class define the class SynchronizationObject which must be subclassed
Packit Service e31359
 * to implement an actual lock.
Packit Service e31359
 *
Packit Service e31359
 * Each instance of this class holds a pointer on a lock object.
Packit Service e31359
 *
Packit Service e31359
 * See src/msvc6/MfcSynchronizedObject.h for an example.
Packit Service e31359
 */
Packit Service e31359
class CPPUNIT_API SynchronizedObject
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
  /*! \brief Abstract synchronization object (mutex)
Packit Service e31359
   */
Packit Service e31359
  class SynchronizationObject
Packit Service e31359
  {
Packit Service e31359
    public:
Packit Service e31359
      SynchronizationObject() {}
Packit Service e31359
      virtual ~SynchronizationObject() {}
Packit Service e31359
Packit Service e31359
      virtual void lock() {}
Packit Service e31359
      virtual void unlock() {}
Packit Service e31359
  };
Packit Service e31359
Packit Service e31359
  /*! Constructs a SynchronizedObject object.
Packit Service e31359
   */
Packit Service e31359
  SynchronizedObject( SynchronizationObject *syncObject =0 );
Packit Service e31359
Packit Service e31359
  /// Destructor.
Packit Service e31359
  virtual ~SynchronizedObject();
Packit Service e31359
Packit Service e31359
protected:
Packit Service e31359
  /*! \brief Locks a synchronization object in the current scope.
Packit Service e31359
   */
Packit Service e31359
  class ExclusiveZone
Packit Service e31359
  {
Packit Service e31359
    SynchronizationObject *m_syncObject;
Packit Service e31359
Packit Service e31359
  public:
Packit Service e31359
    ExclusiveZone( SynchronizationObject *syncObject ) 
Packit Service e31359
        : m_syncObject( syncObject )
Packit Service e31359
    { 
Packit Service e31359
      m_syncObject->lock();
Packit Service e31359
    }
Packit Service e31359
Packit Service e31359
    ~ExclusiveZone() 
Packit Service e31359
    { 
Packit Service e31359
      m_syncObject->unlock ();
Packit Service e31359
    }
Packit Service e31359
  private:
Packit Service e31359
    /// Prevents the use of the copy constructor.
Packit Service e31359
    ExclusiveZone( const ExclusiveZone& );
Packit Service e31359
Packit Service e31359
    /// Prevents the use of the copy operator.
Packit Service e31359
    ExclusiveZone& operator=( const ExclusiveZone& );
Packit Service e31359
  };
Packit Service e31359
Packit Service e31359
  virtual void setSynchronizationObject( SynchronizationObject *syncObject );
Packit Service e31359
Packit Service e31359
protected:
Packit Service e31359
  SynchronizationObject *m_syncObject;
Packit Service e31359
Packit Service e31359
private:
Packit Service e31359
  /// Prevents the use of the copy constructor.
Packit Service e31359
  SynchronizedObject( const SynchronizedObject &copy );
Packit Service e31359
Packit Service e31359
  /// Prevents the use of the copy operator.
Packit Service e31359
  void operator =( const SynchronizedObject &copy );
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_END
Packit Service e31359
Packit Service e31359
#endif  // CPPUNIT_SYNCHRONIZEDOBJECT_H