[libcamera-devel] [PATCH 02/14] libcamera: object: Use activate() in invokeMethod()
Niklas Söderlund
niklas.soderlund at ragnatech.se
Tue Jan 7 19:59:17 CET 2020
Hi Laurent,
Thanks for your work.
On 2020-01-04 07:09:35 +0200, Laurent Pinchart wrote:
> 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 at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> include/libcamera/bound_method.h | 15 ++++++++++-----
> include/libcamera/object.h | 7 ++-----
> 2 files changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h
> index b841a2aed147..5743cacf5388 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 21b70460b516..c45165dec8ef 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_; }
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list