Multiple inheritance considered harmful

This commit is contained in:
Ehmry - 2019-09-26 14:31:52 +02:00
parent d07ff84f5c
commit a83ffd4821
2 changed files with 12 additions and 12 deletions

View File

@ -13,7 +13,7 @@ using namespace Kernel;
Object::~Object() Object::~Object()
{ {
for (Object_identity * oi = first(); oi; oi = first()) for (Object_identity * oi = list.first(); oi; oi = list.first())
oi->invalidate(); oi->invalidate();
} }
@ -24,18 +24,18 @@ Object::~Object()
void Object_identity::invalidate() void Object_identity::invalidate()
{ {
for (Object_identity_reference * oir = first(); oir; oir = first()) for (Object_identity_reference * oir = list.first(); oir; oir = list.first())
oir->invalidate(); oir->invalidate();
if (_object) { if (_object) {
_object->remove(this); _object->list.remove(this);
_object = nullptr; _object = nullptr;
} }
} }
Object_identity::Object_identity(Object & object) Object_identity::Object_identity(Object & object)
: _object(&object) { _object->insert(this); } : _object(&object) { _object->list.insert(this); }
Object_identity::~Object_identity() { invalidate(); } Object_identity::~Object_identity() { invalidate(); }
@ -50,7 +50,7 @@ Object_identity_reference::find(Pd &pd)
{ {
if (!_identity) return nullptr; if (!_identity) return nullptr;
for (Object_identity_reference * oir = _identity->first(); for (Object_identity_reference * oir = _identity->list.first();
oir; oir = oir->next()) oir; oir = oir->next())
if (&pd == &(oir->_pd)) return oir; if (&pd == &(oir->_pd)) return oir;
return nullptr; return nullptr;
@ -79,7 +79,7 @@ Object_identity_reference * Object_identity_reference::factory(void * dst,
void Object_identity_reference::invalidate() { void Object_identity_reference::invalidate() {
if (_identity) _identity->remove(this); if (_identity) _identity->list.remove(this);
_identity = nullptr; _identity = nullptr;
} }
@ -88,7 +88,7 @@ Object_identity_reference::Object_identity_reference(Object_identity *oi,
Pd &pd) Pd &pd)
: _capid(pd.capid_alloc().alloc()), _identity(oi), _pd(pd), _in_utcbs(0) : _capid(pd.capid_alloc().alloc()), _identity(oi), _pd(pd), _in_utcbs(0)
{ {
if (_identity) _identity->insert(this); if (_identity) _identity->list.insert(this);
_pd.cap_tree().insert(this); _pd.cap_tree().insert(this);
} }

View File

@ -71,18 +71,16 @@ namespace Kernel
} }
struct Kernel::Object : private Object_identity_list class Kernel::Object
{ {
using Object_identity_list::remove; Object_identity_list list { };
using Object_identity_list::insert;
virtual ~Object(); virtual ~Object();
}; };
class Kernel::Object_identity class Kernel::Object_identity
: public Object_identity_list::Element, : public Object_identity_list::Element
public Kernel::Object_identity_reference_list
{ {
private: private:
@ -96,6 +94,8 @@ class Kernel::Object_identity
public: public:
Kernel::Object_identity_reference_list list { };
Object_identity(Object & object); Object_identity(Object & object);
~Object_identity(); ~Object_identity();