From patchwork Fri Sep 18 15:20:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 9669 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 58EE8BF01C for ; Fri, 18 Sep 2020 15:21:02 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 2486B62FCF; Fri, 18 Sep 2020 17:21:02 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="h3wXPs/q"; dkim-atps=neutral Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 55AC362F4F for ; Fri, 18 Sep 2020 17:20:59 +0200 (CEST) Received: by mail-lf1-x130.google.com with SMTP id b12so6515392lfp.9 for ; Fri, 18 Sep 2020 08:20:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KsNV7hPubnwpAA0/Hbjp4VcYJ38B/XQfNuqba0A+rgc=; b=h3wXPs/qOo2L/FP6P90EnrZL7ClyoRz7vMNtTTpxTeFHtHfkU8uJ+gh2TQyQ6/yZhB A7+rlKd48Pu+OnWNFOfvdGadSenXP7R+iHVGQVGzszsz1LhwA5ZAUcWQD5F/97oxGuIm 5clgfHZ2rkry6B6ocEu56XYo0RLsJ3j+xAx2Je0fYJcs3+VBRgWAt5KcGeWl7lQDbYax rEeIfbPL0DOd6q7jo1aQe0eJQ772AWFpfDXwZPi19DkNJIwhwK8i4DXkepL+VPK0MEQu LWOKzLIvcNeQYZJaU/rWEbAj/jw3ERpFv/NUJVSAzwcMkcQfzue2vrf2RUC+ACZxLkaI TAWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=KsNV7hPubnwpAA0/Hbjp4VcYJ38B/XQfNuqba0A+rgc=; b=Q2kBK2Nm/1Qf6587h5V6+eeN9fqMnmWBnPo70RYygMWh9lJatvmDza9WNFxoD9LEaN RkEwBbt7bAsgDwhAae/Q0JaqkGCwS69/Hz3kyVe0InOeoDs0RkUbwnfjsePfAlq30XfY 8LNwaDh/VduOCt7NbzJ3q68XJBa755SQJQ6eWQmyBgcQViUE+9/jupS4XBxdNAXbD8iT dolB1V++2pveMWUnrc+NMQ1dBJZP3jCHmMp5ONhcleOahMIhZ2gtfwLvLK65hP/75XuC E/xZq0PTvFV1rta401s4fpVafvgp/+nmrsojq80s42+NW0TY1lujvCRMUqgmG7Wlwvmf UCQQ== X-Gm-Message-State: AOAM531hSD/U2u2Hvg1yZ7Lg8jlCCZljAbNaDmRcZLFcJJfnAxVxaoe9 0ETE3zcPiA/V3a/8NS+mpYDE3aBbuOWYTA== X-Google-Smtp-Source: ABdhPJzTbFcNZdaZUR9T2/GY3pcCIqK3qU6Iaj2uSgr5ombjd9lWqHtBBYf+nKadO/XPi9uAag7itQ== X-Received: by 2002:a19:b97:: with SMTP id 145mr12082108lfl.269.1600442458620; Fri, 18 Sep 2020 08:20:58 -0700 (PDT) Received: from deskari.ti.com (91-152-83-50.elisa-laajakaista.fi. [91.152.83.50]) by smtp.gmail.com with ESMTPSA id i63sm666472lji.66.2020.09.18.08.20.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2020 08:20:58 -0700 (PDT) From: Tomi Valkeinen To: libcamera-devel@lists.libcamera.org Date: Fri, 18 Sep 2020 18:20:17 +0300 Message-Id: <20200918152019.784315-3-tomi.valkeinen@iki.fi> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200918152019.784315-1-tomi.valkeinen@iki.fi> References: <20200918152019.784315-1-tomi.valkeinen@iki.fi> MIME-Version: 1.0 Subject: [libcamera-devel] [RFC 2/4] Add BoundMethodFunction X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tomi Valkeinen Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Note: no way to disconnect, except disconnect all. Signed-off-by: Tomi Valkeinen --- include/libcamera/bound_method.h | 25 +++++++++++++++++++++++++ include/libcamera/signal.h | 6 ++++++ 2 files changed, 31 insertions(+) diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h index d1e4448..d720199 100644 --- a/include/libcamera/bound_method.h +++ b/include/libcamera/bound_method.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace libcamera { @@ -228,6 +229,30 @@ private: R (*func_)(Args...); }; +template +class BoundMethodFunction : public BoundMethodArgs +{ +public: + BoundMethodFunction(std::function func) + : BoundMethodArgs(nullptr, nullptr, ConnectionTypeAuto), + func_(func) + { + } + + R activate(Args... args, [[maybe_unused]] bool deleteMethod = false) override + { + return func_(args...); + } + + R invoke(Args...) override + { + return R(); + } + +private: + std::function func_; +}; + } /* namespace libcamera */ #endif /* __LIBCAMERA_BOUND_METHOD_H__ */ diff --git a/include/libcamera/signal.h b/include/libcamera/signal.h index accb797..939169f 100644 --- a/include/libcamera/signal.h +++ b/include/libcamera/signal.h @@ -68,6 +68,12 @@ public: SignalBase::connect(new BoundMethodStatic(func)); } + template + void connect(std::function func) + { + SignalBase::connect(new BoundMethodFunction(func)); + } + void disconnect() { SignalBase::disconnect([]([[maybe_unused]] SlotList::iterator &iter) {