summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/bound_method.h15
-rw-r--r--include/libcamera/object.h7
2 files changed, 12 insertions, 10 deletions
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_; }