12 #ifndef TMCAUTOLOCK_HH 
   13 #define TMCAUTOLOCK_HH 
   88 #define TMCMULTITHREADED 1 
   91 #if defined(TMCMULTITHREADED) 
   94 typedef pthread_mutex_t TMCMutex;
 
   95 #define TMCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER 
   96 #define TMCMUTEXLOCK pthread_mutex_lock 
   97 #define TMCMUTEXUNLOCK pthread_mutex_unlock 
   98 typedef int (*TMCthread_lock)(TMCMutex *);
 
   99 typedef int (*TMCthread_unlock)(TMCMutex *);
 
  101 typedef int TMCMutex;
 
  102 int fake_mutex_lock_unlock(TMCMutex *);
 
  103 #define TMCMUTEX_INITIALIZER 1 
  104 #define TMCMUTEXLOCK fake_mutex_lock_unlock 
  105 #define TMCMUTEXUNLOCK fake_mutex_lock_unlock 
  106 typedef int (*TMCthread_lock)(TMCMutex *);
 
  107 typedef int (*TMCthread_unlock)(TMCMutex *);
 
  117 template <
class M, 
typename L, 
typename U>
 
  118 class TMCTemplateAutoLock {
 
  120    TMCTemplateAutoLock(M *mtx, L l, U u) : locked(false), _m(mtx), _l(l), _u(u) { lock(); }
 
  122    virtual ~TMCTemplateAutoLock() { unlock(); }
 
  141    TMCTemplateAutoLock(
const TMCTemplateAutoLock &rhs);
 
  142    TMCTemplateAutoLock &operator=(
const TMCTemplateAutoLock &rhs);
 
  155 struct TMCImpMutexAutoLock : 
public TMCTemplateAutoLock<TMCMutex, TMCthread_lock, TMCthread_unlock> {
 
  156    TMCImpMutexAutoLock(TMCMutex *mtx)
 
  157       : TMCTemplateAutoLock<TMCMutex, TMCthread_lock, TMCthread_unlock>(mtx, &TMCMUTEXLOCK, &TMCMUTEXUNLOCK)
 
  161 typedef TMCImpMutexAutoLock TMCAutoLock;
 
  163 #endif // TMCAUTOLOCK_HH