#ifndef SHARED_H #define SHARED_H namespace khtml { template class Shared { public: Shared() { _ref=0; /*counter++;*/ } ~Shared() { /*counter--;*/ } void ref() { _ref++; } void deref() { if(_ref) _ref--; if(!_ref) delete static_cast(this); } bool hasOneRef() { //kdDebug(300) << "ref=" << _ref << endl; return _ref==1; } int refCount() const { return _ref; } // static int counter; protected: unsigned int _ref; }; template class TreeShared { public: TreeShared() { _ref = 0; m_parent = 0; /*counter++;*/ } TreeShared( type *parent ) { _ref=0; m_parent = parent; /*counter++;*/ } ~TreeShared() { /*counter--;*/ } void ref() { _ref++; } void deref() { if(_ref) _ref--; if(!_ref && !m_parent) { delete static_cast(this); } } bool hasOneRef() { //kdDebug(300) << "ref=" << _ref << endl; return _ref==1; } int refCount() const { return _ref; } // static int counter; void setParent(type *parent) { m_parent = parent; } type *parent() const { return m_parent; } private: unsigned int _ref; protected: type *m_parent; }; }; #endif