69 lines
1.5 KiB
C++
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
|