mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-07-23 12:42:02 +00:00
add xmlrpc-c 1.03.14 to in tree libs
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3772 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
#include "pthreadx.h"
|
||||
#include "xmlrpc-c/girerr.hpp"
|
||||
using girerr::error;
|
||||
#include "xmlrpc-c/girmem.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace girmem;
|
||||
|
||||
|
||||
namespace girmem {
|
||||
|
||||
|
||||
void
|
||||
autoObject::incref() {
|
||||
pthread_mutex_lock(&this->refcountLock);
|
||||
++this->refcount;
|
||||
pthread_mutex_unlock(&this->refcountLock);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
autoObject::decref(bool * const unreferencedP) {
|
||||
|
||||
if (this->refcount == 0)
|
||||
throw(error("Decrementing ref count of unreferenced object"));
|
||||
pthread_mutex_lock(&this->refcountLock);
|
||||
--this->refcount;
|
||||
*unreferencedP = (this->refcount == 0);
|
||||
pthread_mutex_unlock(&this->refcountLock);
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObject::autoObject() {
|
||||
int rc;
|
||||
|
||||
rc = pthread_mutex_init(&this->refcountLock, NULL);
|
||||
|
||||
if (rc != 0)
|
||||
throw(error("Unable to initialize pthread mutex"));
|
||||
|
||||
this->refcount = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObject::~autoObject() {
|
||||
if (this->refcount > 0)
|
||||
throw(error("Destroying referenced object"));
|
||||
|
||||
int rc;
|
||||
|
||||
rc = pthread_mutex_destroy(&this->refcountLock);
|
||||
|
||||
if (rc != 0)
|
||||
throw(error("Unable to destroy pthread mutex"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObjectPtr::autoObjectPtr() : objectP(NULL) {}
|
||||
|
||||
|
||||
|
||||
autoObjectPtr::autoObjectPtr(autoObject * const objectP) {
|
||||
this->objectP = objectP;
|
||||
objectP->incref();
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObjectPtr::autoObjectPtr(autoObjectPtr const& autoObjectPtr) {
|
||||
// copy constructor
|
||||
|
||||
this->objectP = autoObjectPtr.objectP;
|
||||
if (this->objectP)
|
||||
this->objectP->incref();
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObjectPtr::~autoObjectPtr() {
|
||||
if (this->objectP) {
|
||||
bool dead;
|
||||
this->objectP->decref(&dead);
|
||||
if (dead)
|
||||
delete(this->objectP);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
autoObjectPtr::instantiate(autoObject * const objectP) {
|
||||
|
||||
this->objectP = objectP;
|
||||
objectP->incref();
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObjectPtr
|
||||
autoObjectPtr::operator=(autoObjectPtr const& autoObjectPtr) {
|
||||
|
||||
if (this->objectP != NULL)
|
||||
throw(error("Already instantiated"));
|
||||
this->objectP = autoObjectPtr.objectP;
|
||||
this->objectP->incref();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
autoObject *
|
||||
autoObjectPtr::operator->() const {
|
||||
return this->objectP;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user