#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