moved epicsMutex implementation out of header file

This commit is contained in:
Jeff Hill
2002-03-21 22:20:40 +00:00
parent 1464be33db
commit d9e41a12bd
+1 -112
View File
@@ -12,7 +12,7 @@ typedef enum {
#ifdef __cplusplus
class epicsMutex {
class epicsShareClass epicsMutex {
public:
epicsMutex ();
~epicsMutex ();
@@ -30,32 +30,6 @@ private:
epicsMutex & operator = ( const epicsMutex & );
};
// Automatically applies and releases the mutex.
// This is for use in situations where C++ exceptions are possible.
class epicsAutoMutex {
public:
epicsAutoMutex ( epicsMutex & );
~epicsAutoMutex ();
private:
epicsMutex & rMutex;
epicsAutoMutex ( const epicsAutoMutex & );
epicsAutoMutex & operator = ( const epicsAutoMutex & );
friend class epicsAutoMutexRelease;
};
// Automatically releases and reapplies the mutex.
// This is for use in situations where C++ exceptions are possible.
class epicsAutoMutexRelease {
public:
epicsAutoMutexRelease ( epicsAutoMutex & );
~epicsAutoMutexRelease ();
private:
epicsAutoMutex & autoMutex;
epicsAutoMutexRelease ( const epicsAutoMutexRelease & );
epicsAutoMutexRelease & operator = ( const epicsAutoMutexRelease & );
};
#endif /*__cplusplus*/
#ifdef __cplusplus
@@ -96,89 +70,4 @@ epicsShareFunc void epicsShareAPI epicsMutexShowAll(
#include "osdMutex.h"
#ifdef __cplusplus
#include "locationException.h"
inline epicsMutex :: epicsMutex () :
id ( epicsMutexCreate () )
{
if ( this->id == 0 ) {
throwWithLocation ( noMemory () );
}
}
inline epicsMutex ::~epicsMutex ()
{
epicsMutexDestroy ( this->id );
}
inline void epicsMutex :: lock ()
{
epicsMutexLockStatus status = epicsMutexLock ( this->id );
if ( status != epicsMutexLockOK ) {
throwWithLocation ( invalidSemaphore () );
}
}
inline bool epicsMutex :: lock ( double timeOut )
{
epicsMutexLockStatus status = epicsMutexLockWithTimeout ( this->id, timeOut );
if (status==epicsMutexLockOK) {
return true;
} else if (status==epicsMutexLockTimeout) {
return false;
} else {
throwWithLocation ( invalidSemaphore () );
}
return false; // never here, compiler is happy
}
inline bool epicsMutex :: tryLock ()
{
epicsMutexLockStatus status = epicsMutexTryLock ( this->id );
if ( status == epicsMutexLockOK ) {
return true;
} else if ( status == epicsMutexLockTimeout ) {
return false;
} else {
throwWithLocation ( invalidSemaphore () );
}
return false; // never here, but compiler is happy
}
inline void epicsMutex :: unlock ()
{
epicsMutexUnlock ( this->id );
}
inline void epicsMutex :: show ( unsigned level ) const
{
epicsMutexShow ( this->id, level );
}
inline epicsAutoMutex :: epicsAutoMutex ( epicsMutex & mutexIn ) :
rMutex ( mutexIn )
{
this->rMutex.lock ();
}
inline epicsAutoMutex :: ~epicsAutoMutex ()
{
this->rMutex.unlock ();
}
inline epicsAutoMutexRelease :: epicsAutoMutexRelease ( epicsAutoMutex & autoMutexIn ) :
autoMutex ( autoMutexIn )
{
this->autoMutex.rMutex.unlock ();
}
inline epicsAutoMutexRelease :: ~epicsAutoMutexRelease ()
{
this->autoMutex.rMutex.lock ();
}
#endif /*__cplusplus*/
#endif /* epicsMutexh */