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