1
0
mirror of https://github.com/anope/anope.git synced 2026-07-09 21:03:12 +02:00

Fixed bug #1187 - Fixed releasing enforcer clients on TS6 IRCds

This commit is contained in:
Adam
2010-09-10 15:46:19 -04:00
parent 46813ccb8c
commit 9eb7562bee
21 changed files with 210 additions and 235 deletions
-63
View File
@@ -1261,69 +1261,6 @@ class Service : public virtual Base
virtual ~Service();
};
class dynamic_reference_base : public virtual Base
{
protected:
bool invalid;
public:
dynamic_reference_base() : invalid(false) { }
virtual ~dynamic_reference_base() { }
inline void Invalidate() { this->invalid = true; }
};
template<typename T>
class dynamic_reference : public dynamic_reference_base
{
protected:
T *ref;
public:
dynamic_reference(T *obj) : ref(obj)
{
if (ref)
ref->AddReference(this);
}
virtual ~dynamic_reference()
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (ref)
ref->DelReference(this);
}
virtual operator bool()
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
return this->ref;
}
virtual inline void operator=(T *newref)
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (this->ref)
this->ref->DelReference(this);
this->ref = newref;
if (this->ref)
this->ref->AddReference(this);
}
virtual inline T *operator->()
{
return this->ref;
}
};
template<typename T>
class service_reference : public dynamic_reference<T>
{