freeswitch/libs/xmlrpc-c/include/xmlrpc-c/girmem.hpp

69 lines
1.5 KiB
C++

#ifndef GIRMEM_HPP_INCLUDED
#define GIRMEM_HPP_INCLUDED
/* The following pthread crap mirrors what is in pthreadx.h, which is
what girmem.cpp uses to declare the lock interface. We can't simply
include pthreadx.h here, because it's an internal Xmlrpc-c header file,
and this is an external one.
This is a stopgap measure until we do something cleaner, such as expose
pthreadx.h as an external interface (class girlock, maybe?) or create
a lock class with virtual methods.
The problem we're solving is that class autoObject contains
a pthread_mutex_t member, and on Windows, there's no such type.
*/
#ifndef WIN32
# include <pthread.h>
typedef pthread_mutex_t girmem_lock;
#else
typedef CRITICAL_SECTION girmem_lock;
#endif
namespace girmem {
class autoObjectPtr;
class autoObject {
friend class autoObjectPtr;
public:
void incref();
void decref(bool * const unreferencedP);
protected:
autoObject();
virtual ~autoObject();
private:
girmem_lock refcountLock;
unsigned int refcount;
};
class autoObjectPtr {
public:
autoObjectPtr();
autoObjectPtr(girmem::autoObject * objectP);
autoObjectPtr(girmem::autoObjectPtr const& autoObjectPtr);
~autoObjectPtr();
void
instantiate(girmem::autoObject * const objectP);
autoObjectPtr
operator=(girmem::autoObjectPtr const& objectPtr);
girmem::autoObject *
operator->() const;
protected:
girmem::autoObject * objectP;
};
} // namespace
#endif