Celartem::Locker Class Reference

#include <cel_lockable.h>

List of all members.

Public Member Functions

 Locker ()
 Locker (const Lockable &inLockable)
 Locker (const Locker &inLocker)
 ~Locker ()
Lockeroperator= (const Lockable &inLockable)
Lockeroperator= (const Locker &inLocker)
void lock (const Lockable &inLockable)
void unlock ()
void swap (Locker &inLocker)


Detailed Description

This class is to lock Lockable instances.
This class is introduced to make the code exception-safe. Since the scheme of calling lock method in the first of a function and unlock on return is usually not easy to be exception-safe and the programmers may happen to introduce dirty try-catch hack to recover from it. The Locker object is to get rid of such dirty temporary hacks; all you have to do is to initialize the instance of Locker class directly in the local scope. (This class is intended to be initialized as auto variable or class member variable.) The following code shows how to use Locker class.
            void someOperation(Mutex& mutex)
            {
                // Locking the mutex; Locker is initialized as an auto object.
                Locker lock(mutex);

                // do something
                ....

                if(err)
                {
                    // At the time the exception is thrown, the instance of
                    // the Locker class is automatically deleted and the mutex
                    // is released.
                    celThrow(errOperationFailed);
                }
            }

The code which does same operation but in the old syntax:

            void someOperation(Mutex& mutex)
            {
                mutex->lock(); // lock the mutex

                try
                {
                    // do something; it may throw some exception...
                    ....
                }
                catch(...)
                {
                    mutex->unlock();
                    throw; // re-throw
                }

                // place unlock here to deal with both of error and non-error
                // cases.
                mutex->unlock();

                if(err)
                    celThrow(errOperationFailed);
            }

See also:
Lockable, Mutex, Semaphore

Definition at line 102 of file cel_lockable.h.


Constructor & Destructor Documentation

Celartem::Locker::Locker (  )  [inline]

Initializes the instance without any lockable instances.

Definition at line 108 of file cel_lockable.h.

Celartem::Locker::Locker ( const Lockable inLockable  )  [inline]

This constructor it to lock the specified lockable instance.

Parameters:
inLockable An instance to lock.

Definition at line 117 of file cel_lockable.h.

Celartem::Locker::Locker ( const Locker inLocker  )  [inline]

This constructor duplicates the lock; it is dengerous when you are deal with non-recursive Mutex.

Parameters:
inLocker An instance of Locker.

Definition at line 128 of file cel_lockable.h.

Celartem::Locker::~Locker (  )  [inline]

Unlocks the lockable.

Definition at line 136 of file cel_lockable.h.


Member Function Documentation

Locker& Celartem::Locker::operator= ( const Lockable inLockable  )  [inline]

This method sets the lockable instance to lock.

Parameters:
inLockable An instance to lock. You can also pass NULL to release the currently locked Lockable instance.
Returns:
This instance (*this ).

Definition at line 149 of file cel_lockable.h.

Locker& Celartem::Locker::operator= ( const Locker inLocker  )  [inline]

This method duplicates the lock; it is dengerous when you are deal with non-recursive Mutex.

Parameters:
inLocker An instance of Locker.
Returns:
This instance (*this ).

Definition at line 163 of file cel_lockable.h.

void Celartem::Locker::lock ( const Lockable inLockable  )  [inline]

This method locks the specified Lockable instance.

Parameters:
inLockable An instance to lock. You can also pass NULL to release the currently locked Lockable instance.

Definition at line 189 of file cel_lockable.h.

void Celartem::Locker::unlock (  )  [inline]

This method unlocks the currently locked instance.

Definition at line 197 of file cel_lockable.h.

Referenced by ~Locker().

void Celartem::Locker::swap ( Locker inLocker  )  [inline]

This method swaps the locked instances of the two Locker instances.

Parameters:
inLocker The locker to exchange the locked instance with.

Definition at line 212 of file cel_lockable.h.


The documentation for this class was generated from the following file:
This document is automatically generated using doxygen 1.5.4 at Fri Jun 27 18:23:18 2008.