From a83ffd4821d3071e20170c922af86b13bb85e1b3 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 26 Sep 2019 14:31:52 +0200 Subject: [PATCH] Multiple inheritance considered harmful --- repos/base-hw/src/core/kernel/object.cc | 14 +++++++------- repos/base-hw/src/core/kernel/object.h | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/repos/base-hw/src/core/kernel/object.cc b/repos/base-hw/src/core/kernel/object.cc index 8e445cf32..e4b380977 100644 --- a/repos/base-hw/src/core/kernel/object.cc +++ b/repos/base-hw/src/core/kernel/object.cc @@ -13,7 +13,7 @@ using namespace Kernel; Object::~Object() { - for (Object_identity * oi = first(); oi; oi = first()) + for (Object_identity * oi = list.first(); oi; oi = list.first()) oi->invalidate(); } @@ -24,18 +24,18 @@ Object::~Object() 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(); if (_object) { - _object->remove(this); + _object->list.remove(this); _object = nullptr; } } Object_identity::Object_identity(Object & object) -: _object(&object) { _object->insert(this); } +: _object(&object) { _object->list.insert(this); } Object_identity::~Object_identity() { invalidate(); } @@ -50,7 +50,7 @@ Object_identity_reference::find(Pd &pd) { if (!_identity) return nullptr; - for (Object_identity_reference * oir = _identity->first(); + for (Object_identity_reference * oir = _identity->list.first(); oir; oir = oir->next()) if (&pd == &(oir->_pd)) return oir; return nullptr; @@ -79,7 +79,7 @@ Object_identity_reference * Object_identity_reference::factory(void * dst, void Object_identity_reference::invalidate() { - if (_identity) _identity->remove(this); + if (_identity) _identity->list.remove(this); _identity = nullptr; } @@ -88,7 +88,7 @@ Object_identity_reference::Object_identity_reference(Object_identity *oi, Pd &pd) : _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); } diff --git a/repos/base-hw/src/core/kernel/object.h b/repos/base-hw/src/core/kernel/object.h index 3d4fbb71b..d9fb825b6 100644 --- a/repos/base-hw/src/core/kernel/object.h +++ b/repos/base-hw/src/core/kernel/object.h @@ -71,18 +71,16 @@ namespace Kernel } -struct Kernel::Object : private Object_identity_list +class Kernel::Object { - using Object_identity_list::remove; - using Object_identity_list::insert; + Object_identity_list list { }; virtual ~Object(); }; class Kernel::Object_identity -: public Object_identity_list::Element, - public Kernel::Object_identity_reference_list +: public Object_identity_list::Element { private: @@ -96,6 +94,8 @@ class Kernel::Object_identity public: + Kernel::Object_identity_reference_list list { }; + Object_identity(Object & object); ~Object_identity();