/* === H E A D E R S ======================================================= */
-// include the next line in an attempt to increase stability
-#define ETL_LOCK_REFCOUNTS
-
#include <cassert>
-#ifdef ETL_LOCK_REFCOUNTS
-#include <synfig/mutex.h>
-#endif
/* === M A C R O S ========================================================= */
{
private:
mutable int refcount;
-#ifdef ETL_LOCK_REFCOUNTS
- mutable synfig::Mutex mutex;
-#endif
protected:
shared_object():refcount(0) { }
public:
void ref()const
- {
-#ifdef ETL_LOCK_REFCOUNTS
- synfig::Mutex::Lock lock(mutex);
-#endif
- assert(refcount>=0); refcount++;
- }
+ { assert(refcount>=0); refcount++; }
//! Returns \c false if object needs to be deleted
bool unref()const
{
-#ifdef ETL_LOCK_REFCOUNTS
- synfig::Mutex::Lock lock(mutex);
-#endif
assert(refcount>0);
refcount--;
if(refcount==0) {
#ifdef ETL_SELF_DELETING_SHARED_OBJECT
refcount=-666;
-#ifdef ETL_LOCK_REFCOUNTS
- mutex.unlock();
-#endif
delete this;
#endif
return false;
}
int count()const
- {
-#ifdef ETL_LOCK_REFCOUNTS
- synfig::Mutex::Lock lock(mutex);
-#endif
- return refcount;
- }
+ { return refcount; }
}; // END of class shared_object
// ========================================================================
void add_to_rlist()
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
assert(obj);
obj->rref();
void del_from_rlist()
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
assert(obj);
obj->runref();
//! Constructor that constructs from a pointer to new object
rhandle(pointer x):handle<T>(x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(obj)add_to_rlist();
}
rhandle(const handle<value_type> &x):handle<T>(x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(obj)add_to_rlist();
}
//! Default copy constructor
rhandle(const rhandle<value_type> &x):handle<T>(x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(obj)add_to_rlist();
}
rhandle<value_type> &
operator=(const rhandle<value_type> &x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(x.get()==obj)
return *this;
rhandle<value_type>&
operator=(const handle<value_type> &x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(x.get()==obj)
return *this;
rhandle<value_type>&
operator=(value_type* x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(x==obj)
return *this;
void
detach()
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
if(obj)del_from_rlist();
handle<value_type>::detach();
obj=0;
count_type
rcount()const
{
-// value_type*const& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*const& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
return obj?obj->rcount():0;
}
bool
runique()const
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
assert(obj); return obj->front_==obj->back_;
}
//! \writeme
int replace(const handle<value_type> &x)
{
-// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 form barfing
+// value_type*& obj(handle<T>::obj); // Required to keep gcc 3.4.2 from barfing
assert(obj);
assert(x.get()!=obj);