28 #ifndef __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H 
   29 #define __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H 
   32 #include <boost/noncopyable.hpp> 
   33 #include <boost/thread.hpp> 
   35 #define TE_SINGLETHREADING 1 
   36 #define TE_MULTITHREADING  2 
   40 #ifndef TE_THREADING_POLICIES 
   41   #define TE_THREADING_POLICIES TE_MULTITHREADING 
   44 #if !defined TE_DEFAULT_MUTEX_POLICY 
   45   #define TE_DEFAULT_MUTEX_POLICY  ::boost::mutex 
   48 #if !defined TE_DEFAULT_LOCK_READING_POLICY 
   49   #define TE_DEFAULT_LOCK_READING_POLICY  ::boost::lock_guard<TE_DEFAULT_MUTEX_POLICY> 
   52 #if !defined TE_DEFAULT_LOCK_WRITING_POLICY 
   53   #define TE_DEFAULT_LOCK_WRITING_POLICY  ::boost::lock_guard<TE_DEFAULT_MUTEX_POLICY> 
   71              class MutexPolicy = void,
 
   72              class LockReadingPolicy = void,
 
  134 #if TE_THREADING_POLICIES == TE_MULTITHREADING 
  208         friend class ObjectLevelLockingPolicy<LockReadingPolicy>;
 
  209         friend class ObjectLevelLockingPolicy<LockWritingPolicy>;
 
  305         friend class ClassLevelLockingPolicy<LockReadingPolicy>;
 
  306         friend class ClassLevelLockingPolicy<LockWritingPolicy>;
 
  315 #else // TE_THREADING_POLICIES == TE_SINGLETHREADING 
  317            class MutexPolicy = void,
 
  318            class LockReadingPolicy = void,
 
  319            class LockWritingPolicy = 
void> 
class ObjectLevelLockable : 
public NonLockable<ObjectLevelLockable<Host, MutexPolicy, LockReadingPolicy, LockWritingPolicy>, MutexPolicy, LockReadingPolicy, LockWritingPolicy>
 
  326            class LockWritingPolicy = 
TE_DEFAULT_LOCK_WRITING_POLICY> 
class ClassLevelLockable : 
public NonLockable<ClassLevelLockable<Host, MutexPolicy, LockReadingPolicy, LockWritingPolicy>, MutexPolicy, LockReadingPolicy, LockWritingPolicy>
 
  330 #endif // TE_THREADING_POLICIES == TE_MULTITHREADING 
  335 #endif  // __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H 
This policy doesn't actually perform a lock. 
 
friend class ObjectLevelLockingPolicy< LockWritingPolicy >
 
~ObjectLevelLockable()
Destructor. 
 
friend class ClassLevelLockingPolicy< LockWritingPolicy >
 
LockWritingPolicy LockWritingPolicyType
 
This class acquires a lock over the object class. 
 
NonLockingPolicy()
Constructor to keep the semantics of class-level lock. 
 
~NonLockingPolicy()
Destructor. 
 
ClassLevelLockingPolicy< LockWritingPolicy > LockWrite
 
ClassLevelLockingPolicy< LockReadingPolicy > LockRead
 
ObjectLevelLockingPolicy & operator=(const ObjectLevelLockingPolicy &)
 
ObjectLevelLockable()
Default constructor. 
 
LockingPolicy m_lock
lock policy. 
 
ClassLevelLockingPolicy & operator=(const ClassLevelLockingPolicy &)
 
volatile Host VolatileType
 
#define TE_DEFAULT_LOCK_READING_POLICY
 
This class acquires a lock over the host object. 
 
LockReadingPolicy LockReadingPolicyType
 
volatile Host VolatileType
 
NonLockingPolicy< LockReadingPolicy > LockRead
 
~ObjectLevelLockingPolicy()
Destructor. 
 
ClassLevelLockingPolicy(const Host &host)
Constructor to keep the semantics of object-level lock. 
 
friend class ClassLevelLockingPolicy< LockReadingPolicy >
 
ObjectLevelLockingPolicy(const Host *host)
Through this constructor the pointed host object will be locked. 
 
This class doesn't truelly acquire a lock over the host object/class. 
 
NonLockingPolicy< LockWritingPolicy > LockWrite
 
ObjectLevelLockable(const ObjectLevelLockable &)
Copy constructor. 
 
ObjectLevelLockingPolicy< LockWritingPolicy > LockWrite
 
LockingPolicy m_lock
lock policy. 
 
#define TE_DEFAULT_LOCK_WRITING_POLICY
 
NonLockingPolicy & operator=(const NonLockingPolicy &)
 
This policy assures a class-level locking scheme for a derived class. 
 
volatile Host VolatileType
 
#define TE_DEFAULT_MUTEX_POLICY
 
MutexPolicy m_mtx
The mutex used to control the object lock. 
 
NonLockingPolicy(const Host &)
Constructor. 
 
ClassLevelLockingPolicy(const Host *host)
Constructor to keep the semantics of object-level lock. 
 
NonLockingPolicy(const Host *)
Constructor. 
 
This policy assures an object-level locking scheme for a derived class. 
 
ObjectLevelLockingPolicy(const Host &host)
Through this constructor the host object will be locked. 
 
ObjectLevelLockingPolicy< LockReadingPolicy > LockRead
 
MutexPolicy MutexPolicyType
 
~ClassLevelLockingPolicy()
Destructor. 
 
friend class ObjectLevelLockingPolicy< LockReadingPolicy >
 
ClassLevelLockingPolicy()
Default constructor. 
 
static MutexPolicy sm_mtx
The mutex used to control the class lock.