summaryrefslogtreecommitdiff
path: root/include/libcamera/base/bound_method.h
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-08-27 02:50:29 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-02 01:16:45 +0300
commitd1315600b8d406291215efc2be722dd93a38e481 (patch)
treed535158272ed456c0f1b3159013e76ed1b1d9e3b /include/libcamera/base/bound_method.h
parenteb5c4ead8842ff91b7b32b25f78531e79c17e1b3 (diff)
libcamera: base: bound_method: Remove BoundMethodMember specialization
The BoundMethodMember specialization for the void return type is only needed to avoid accessing the ret_ member variable that is lacking from the corresponding BoundMethodPack specialization. By adding a BoundMethodPack::returnValue() function to read the member variable, we can remove the complete BoundMethodMember specialization. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Diffstat (limited to 'include/libcamera/base/bound_method.h')
-rw-r--r--include/libcamera/base/bound_method.h46
1 files changed, 10 insertions, 36 deletions
diff --git a/include/libcamera/base/bound_method.h b/include/libcamera/base/bound_method.h
index 282f9b58..9c212f1e 100644
--- a/include/libcamera/base/bound_method.h
+++ b/include/libcamera/base/bound_method.h
@@ -38,6 +38,11 @@ public:
{
}
+ R returnValue()
+ {
+ return ret_;
+ }
+
std::tuple<typename std::remove_reference_t<Args>...> args_;
R ret_;
};
@@ -51,6 +56,10 @@ public:
{
}
+ void returnValue()
+ {
+ }
+
std::tuple<typename std::remove_reference_t<Args>...> args_;
};
@@ -160,7 +169,7 @@ public:
auto pack = std::make_shared<PackType>(args...);
bool sync = BoundMethodBase::activatePack(pack, deleteMethod);
- return sync ? pack->ret_ : R();
+ return sync ? pack->returnValue() : R();
}
R invoke(Args... args) override
@@ -173,41 +182,6 @@ private:
R (T::*func_)(Args...);
};
-template<typename T, typename... Args>
-class BoundMethodMember<T, void, Args...> : public BoundMethodArgs<void, Args...>
-{
-public:
- using PackType = typename BoundMethodArgs<void, Args...>::PackType;
-
- BoundMethodMember(T *obj, Object *object, void (T::*func)(Args...),
- ConnectionType type = ConnectionTypeAuto)
- : BoundMethodArgs<void, Args...>(obj, object, type), func_(func)
- {
- }
-
- bool match(void (T::*func)(Args...)) const { return func == func_; }
-
- void activate(Args... args, bool deleteMethod = false) override
- {
- if (!this->object_) {
- T *obj = static_cast<T *>(this->obj_);
- return (obj->*func_)(args...);
- }
-
- auto pack = std::make_shared<PackType>(args...);
- BoundMethodBase::activatePack(pack, deleteMethod);
- }
-
- void invoke(Args... args) override
- {
- T *obj = static_cast<T *>(this->obj_);
- return (obj->*func_)(args...);
- }
-
-private:
- void (T::*func_)(Args...);
-};
-
template<typename R, typename... Args>
class BoundMethodStatic : public BoundMethodArgs<R, Args...>
{