Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=d0edffffda0d24ef743a4c56fac391793d998800
commit d0edffffda0d24ef743a4c56fac391793d998800 Author: Michel Hermier <[email protected]> Date: Tue May 13 09:51:54 2014 +0200 libpacman: Implement a basic refcounter for Object. diff --git a/lib/libpacman/object.cpp b/lib/libpacman/object.cpp index ad9b300..511fb5c 100644 --- a/lib/libpacman/object.cpp +++ b/lib/libpacman/object.cpp @@ -29,20 +29,37 @@ using namespace libpacman; +void Object::operator delete(void *ptr) +{ + free(ptr); +} + void *Object::operator new(std::size_t size) { return f_zalloc(size); } -void *Object::operator new[](std::size_t size) +Object::Object() + : m_reference_counter(1) { - return f_zalloc(size); } Object::~Object() { } +void Object::acquire() const +{ + ++m_reference_counter; +} + +void Object::release() const +{ + if(--m_reference_counter == 0) { + delete this; + } +} + int Object::get(unsigned val, unsigned long *data) const { return -1; diff --git a/lib/libpacman/object.h b/lib/libpacman/object.h index e6b3f12..facbfab 100644 --- a/lib/libpacman/object.h +++ b/lib/libpacman/object.h @@ -29,13 +29,23 @@ namespace libpacman class Object { public: + void operator delete(void *ptr); void *operator new(std::size_t size); - void *operator new[](std::size_t size); + Object(); virtual ~Object(); + void acquire() const; + void release() const; + virtual int get(unsigned val, unsigned long *data) const; virtual int set(unsigned val, unsigned long data); + +private: + void operator delete[](void *ptr); + void *operator new[](std::size_t size); + + mutable unsigned m_reference_counter; }; } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
