From f83820a5d18bfdfa9853ef3ef71abfb47f626ac8 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 12 Aug 2019 02:59:19 +0300 Subject: libcamera: bound_method: Decouple from Signal implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To make the BoundMethod classes more generic, replace direct access to private member from Signal classes with accessors or helper functions. This allows removal of friend statements from the BoundMethod classes. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Niklas Söderlund --- include/libcamera/signal.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'include/libcamera/signal.h') diff --git a/include/libcamera/signal.h b/include/libcamera/signal.h index 3b6de30f..b8a60281 100644 --- a/include/libcamera/signal.h +++ b/include/libcamera/signal.h @@ -46,7 +46,9 @@ public: ~Signal() { for (BoundMethodBase *slot : slots_) { - slot->disconnect(this); + Object *object = slot->object(); + if (object) + object->disconnect(this); delete slot; } } @@ -95,11 +97,11 @@ public: /* * If the object matches the slot, the slot is * guaranteed to be a member slot, so we can safely - * cast it to BoundMemberMethod and access its - * func_ member. + * cast it to BoundMemberMethod to match + * func. */ if (slot->match(obj) && - static_cast *>(slot)->func_ == func) { + static_cast *>(slot)->match(func)) { iter = slots_.erase(iter); delete slot; } else { @@ -113,7 +115,7 @@ public: for (auto iter = slots_.begin(); iter != slots_.end(); ) { BoundMethodArgs *slot = *iter; if (slot->match(nullptr) && - static_cast *>(slot)->func_ == func) { + static_cast *>(slot)->match(func)) { iter = slots_.erase(iter); delete slot; } else { -- cgit v1.2.1