From a915a65fab5b202b51fadf585797384adb7f6b0c Mon Sep 17 00:00:00 2001
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Sat, 4 Jan 2020 05:52:00 +0200
Subject: libcamera: object: Use activate() in invokeMethod()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The Object::invokeMethod() implementation duplicates pack creation code
from BoundMemberMethod::activate(). Call activate() instead of
activatePack() to share code.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
 include/libcamera/bound_method.h | 15 ++++++++++-----
 include/libcamera/object.h       |  7 ++-----
 2 files changed, 12 insertions(+), 10 deletions(-)

(limited to 'include')

diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h
index b841a2ae..5743cacf 100644
--- a/include/libcamera/bound_method.h
+++ b/include/libcamera/bound_method.h
@@ -37,10 +37,11 @@ public:
 	Object *object() const { return object_; }
 	ConnectionType connectionType() const { return connectionType_; }
 
-	void activatePack(void *pack, bool deleteMethod);
 	virtual void invokePack(void *pack) = 0;
 
 protected:
+	void activatePack(void *pack, bool deleteMethod);
+
 	void *obj_;
 	Object *object_;
 	ConnectionType connectionType_;
@@ -88,7 +89,7 @@ public:
 		invokePack(pack, typename generator<sizeof...(Args)>::type());
 	}
 
-	virtual void activate(Args... args) = 0;
+	virtual void activate(Args... args, bool deleteMethod = false) = 0;
 	virtual void invoke(Args... args) = 0;
 };
 
@@ -106,10 +107,10 @@ public:
 
 	bool match(void (T::*func)(Args...)) const { return func == func_; }
 
-	void activate(Args... args)
+	void activate(Args... args, bool deleteMethod = false)
 	{
 		if (this->object_)
-			BoundMethodBase::activatePack(new PackType{ args... }, false);
+			BoundMethodBase::activatePack(new PackType{ args... }, deleteMethod);
 		else
 			(static_cast<T *>(this->obj_)->*func_)(args...);
 	}
@@ -135,7 +136,11 @@ public:
 
 	bool match(void (*func)(Args...)) const { return func == func_; }
 
-	void activate(Args... args) { (*func_)(args...); }
+	void activate(Args... args, bool deleteMethod = false)
+	{
+		(*func_)(args...);
+	}
+
 	void invoke(Args...) {}
 
 private:
diff --git a/include/libcamera/object.h b/include/libcamera/object.h
index 21b70460..c45165de 100644
--- a/include/libcamera/object.h
+++ b/include/libcamera/object.h
@@ -35,11 +35,8 @@ public:
 			  Args... args)
 	{
 		T *obj = static_cast<T *>(this);
-		BoundMethodBase *method =
-			new BoundMemberMethod<T, FuncArgs...>(obj, this, func, type);
-		void *pack = new typename BoundMemberMethod<T, FuncArgs...>::PackType{ args... };
-
-		method->activatePack(pack, true);
+		auto *method = new BoundMemberMethod<T, FuncArgs...>(obj, this, func, type);
+		method->activate(args..., true);
 	}
 
 	Thread *thread() const { return thread_; }
-- 
cgit v1.2.1