[{"id":3532,"web_url":"https://patchwork.libcamera.org/comment/3532/","msgid":"<20200120114829.4ofmyfv5bryhut2a@uno.localdomain>","date":"2020-01-20T11:48:29","subject":"Re: [libcamera-devel] [PATCH 06/19] libcamera: bound_method: Use\n\tstd::index_sequence","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent\n\nOn Mon, Jan 20, 2020 at 02:24:24AM +0200, Laurent Pinchart wrote:\n> Now that we're using C++-14, replace the manual implementation of\n> std::integer_sequence with std::index_sequence, a specialization of\n> std::integer_sequence with the integer type equal to std::size_t.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nWhy the template parameter name change ? :D\nAnyway, that's good!\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n> ---\n>  include/libcamera/bound_method.h | 38 +++++++++-----------------------\n>  1 file changed, 10 insertions(+), 28 deletions(-)\n>\n> diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h\n> index ca501493bce2..7ffd2e426e18 100644\n> --- a/include/libcamera/bound_method.h\n> +++ b/include/libcamera/bound_method.h\n> @@ -10,6 +10,7 @@\n>  #include <memory>\n>  #include <tuple>\n>  #include <type_traits>\n> +#include <utility>\n>\n>  namespace libcamera {\n>\n> @@ -71,25 +72,6 @@ public:\n>  \tvirtual void invokePack(BoundMethodPackBase *pack) = 0;\n>\n>  protected:\n> -#ifndef __DOXYGEN__\n> -\t/*\n> -\t * This is a cheap partial implementation of std::integer_sequence<>\n> -\t * from C++14.\n> -\t */\n> -\ttemplate<int...>\n> -\tstruct sequence {\n> -\t};\n> -\n> -\ttemplate<int N, int... S>\n> -\tstruct generator : generator<N-1, N-1, S...> {\n> -\t};\n> -\n> -\ttemplate<int... S>\n> -\tstruct generator<0, S...> {\n> -\t\ttypedef sequence<S...> type;\n> -\t};\n> -#endif\n> -\n>  \tbool activatePack(std::shared_ptr<BoundMethodPackBase> pack,\n>  \t\t\t  bool deleteMethod);\n>\n> @@ -107,11 +89,11 @@ public:\n>  \tusing PackType = BoundMethodPack<R, Args...>;\n>\n>  private:\n> -\ttemplate<int... S>\n> -\tvoid invokePack(BoundMethodPackBase *pack, BoundMethodBase::sequence<S...>)\n> +\ttemplate<std::size_t... I>\n> +\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n>  \t{\n>  \t\tPackType *args = static_cast<PackType *>(pack);\n> -\t\targs->ret_ = invoke(std::get<S>(args->args_)...);\n> +\t\targs->ret_ = invoke(std::get<I>(args->args_)...);\n>  \t}\n>\n>  public:\n> @@ -120,7 +102,7 @@ public:\n>\n>  \tvoid invokePack(BoundMethodPackBase *pack) override\n>  \t{\n> -\t\tinvokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());\n> +\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n>  \t}\n>\n>  \tvirtual R activate(Args... args, bool deleteMethod = false) = 0;\n> @@ -134,12 +116,12 @@ public:\n>  \tusing PackType = BoundMethodPack<void, Args...>;\n>\n>  private:\n> -\ttemplate<int... S>\n> -\tvoid invokePack(BoundMethodPackBase *pack, BoundMethodBase::sequence<S...>)\n> +\ttemplate<std::size_t... I>\n> +\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n>  \t{\n> -\t\t/* args is effectively unused when the sequence S is empty. */\n> +\t\t/* args is effectively unused when the sequence I is empty. */\n>  \t\tPackType *args [[gnu::unused]] = static_cast<PackType *>(pack);\n> -\t\tinvoke(std::get<S>(args->args_)...);\n> +\t\tinvoke(std::get<I>(args->args_)...);\n>  \t}\n>\n>  public:\n> @@ -148,7 +130,7 @@ public:\n>\n>  \tvoid invokePack(BoundMethodPackBase *pack) override\n>  \t{\n> -\t\tinvokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());\n> +\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n>  \t}\n>\n>  \tvirtual void activate(Args... args, bool deleteMethod = false) = 0;\n> --\n> Regards,\n>\n> Laurent Pinchart\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9AE80600F5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jan 2020 12:45:58 +0100 (CET)","from uno.localdomain (93-34-114-233.ip49.fastwebnet.it\n\t[93.34.114.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 2978AFF804;\n\tMon, 20 Jan 2020 11:45:57 +0000 (UTC)"],"X-Originating-IP":"93.34.114.233","Date":"Mon, 20 Jan 2020 12:48:29 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200120114829.4ofmyfv5bryhut2a@uno.localdomain>","References":"<20200120002437.6633-1-laurent.pinchart@ideasonboard.com>\n\t<20200120002437.6633-7-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"gtv73iwqb5ob4glc\"","Content-Disposition":"inline","In-Reply-To":"<20200120002437.6633-7-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 06/19] libcamera: bound_method: Use\n\tstd::index_sequence","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Mon, 20 Jan 2020 11:45:58 -0000"}},{"id":3533,"web_url":"https://patchwork.libcamera.org/comment/3533/","msgid":"<20200120115047.GE20122@pendragon.ideasonboard.com>","date":"2020-01-20T11:50:47","subject":"Re: [libcamera-devel] [PATCH 06/19] libcamera: bound_method: Use\n\tstd::index_sequence","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Jan 20, 2020 at 12:48:29PM +0100, Jacopo Mondi wrote:\n> Hi Laurent\n> \n> On Mon, Jan 20, 2020 at 02:24:24AM +0200, Laurent Pinchart wrote:\n> > Now that we're using C++-14, replace the manual implementation of\n> > std::integer_sequence with std::index_sequence, a specialization of\n> > std::integer_sequence with the integer type equal to std::size_t.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> Why the template parameter name change ? :D\n\nTo align to the usage in the cppreference.com examples.\n\n> Anyway, that's good!\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThank you.\n\n> > ---\n> >  include/libcamera/bound_method.h | 38 +++++++++-----------------------\n> >  1 file changed, 10 insertions(+), 28 deletions(-)\n> >\n> > diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h\n> > index ca501493bce2..7ffd2e426e18 100644\n> > --- a/include/libcamera/bound_method.h\n> > +++ b/include/libcamera/bound_method.h\n> > @@ -10,6 +10,7 @@\n> >  #include <memory>\n> >  #include <tuple>\n> >  #include <type_traits>\n> > +#include <utility>\n> >\n> >  namespace libcamera {\n> >\n> > @@ -71,25 +72,6 @@ public:\n> >  \tvirtual void invokePack(BoundMethodPackBase *pack) = 0;\n> >\n> >  protected:\n> > -#ifndef __DOXYGEN__\n> > -\t/*\n> > -\t * This is a cheap partial implementation of std::integer_sequence<>\n> > -\t * from C++14.\n> > -\t */\n> > -\ttemplate<int...>\n> > -\tstruct sequence {\n> > -\t};\n> > -\n> > -\ttemplate<int N, int... S>\n> > -\tstruct generator : generator<N-1, N-1, S...> {\n> > -\t};\n> > -\n> > -\ttemplate<int... S>\n> > -\tstruct generator<0, S...> {\n> > -\t\ttypedef sequence<S...> type;\n> > -\t};\n> > -#endif\n> > -\n> >  \tbool activatePack(std::shared_ptr<BoundMethodPackBase> pack,\n> >  \t\t\t  bool deleteMethod);\n> >\n> > @@ -107,11 +89,11 @@ public:\n> >  \tusing PackType = BoundMethodPack<R, Args...>;\n> >\n> >  private:\n> > -\ttemplate<int... S>\n> > -\tvoid invokePack(BoundMethodPackBase *pack, BoundMethodBase::sequence<S...>)\n> > +\ttemplate<std::size_t... I>\n> > +\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n> >  \t{\n> >  \t\tPackType *args = static_cast<PackType *>(pack);\n> > -\t\targs->ret_ = invoke(std::get<S>(args->args_)...);\n> > +\t\targs->ret_ = invoke(std::get<I>(args->args_)...);\n> >  \t}\n> >\n> >  public:\n> > @@ -120,7 +102,7 @@ public:\n> >\n> >  \tvoid invokePack(BoundMethodPackBase *pack) override\n> >  \t{\n> > -\t\tinvokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());\n> > +\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n> >  \t}\n> >\n> >  \tvirtual R activate(Args... args, bool deleteMethod = false) = 0;\n> > @@ -134,12 +116,12 @@ public:\n> >  \tusing PackType = BoundMethodPack<void, Args...>;\n> >\n> >  private:\n> > -\ttemplate<int... S>\n> > -\tvoid invokePack(BoundMethodPackBase *pack, BoundMethodBase::sequence<S...>)\n> > +\ttemplate<std::size_t... I>\n> > +\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n> >  \t{\n> > -\t\t/* args is effectively unused when the sequence S is empty. */\n> > +\t\t/* args is effectively unused when the sequence I is empty. */\n> >  \t\tPackType *args [[gnu::unused]] = static_cast<PackType *>(pack);\n> > -\t\tinvoke(std::get<S>(args->args_)...);\n> > +\t\tinvoke(std::get<I>(args->args_)...);\n> >  \t}\n> >\n> >  public:\n> > @@ -148,7 +130,7 @@ public:\n> >\n> >  \tvoid invokePack(BoundMethodPackBase *pack) override\n> >  \t{\n> > -\t\tinvokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());\n> > +\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n> >  \t}\n> >\n> >  \tvirtual void activate(Args... args, bool deleteMethod = false) = 0;","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8CCC1600F5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jan 2020 12:50:48 +0100 (CET)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 01BAEA62;\n\tMon, 20 Jan 2020 12:50:47 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1579521048;\n\tbh=/O/iImE2actwZgWqu7FxVJpKUl0Xt3T1Nbm1/n0bn9E=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=J3pImVW59L3l3LxowM+LcKsn1KeCfImzzSfFZVI6bSKPRj3+yifQ5bblgRyggOL1o\n\tvR/osM1wgXM0VHabYCAHdNoWvccCnjl3eIzsruFgmJUqR/eIQ5T0wJkNO5mxQU70tm\n\tJkXU1TaTaoy90p7EFj3kuvZx/vyJsKYAsgxO6tQM=","Date":"Mon, 20 Jan 2020 13:50:47 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200120115047.GE20122@pendragon.ideasonboard.com>","References":"<20200120002437.6633-1-laurent.pinchart@ideasonboard.com>\n\t<20200120002437.6633-7-laurent.pinchart@ideasonboard.com>\n\t<20200120114829.4ofmyfv5bryhut2a@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200120114829.4ofmyfv5bryhut2a@uno.localdomain>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH 06/19] libcamera: bound_method: Use\n\tstd::index_sequence","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Mon, 20 Jan 2020 11:50:48 -0000"}},{"id":3567,"web_url":"https://patchwork.libcamera.org/comment/3567/","msgid":"<20200122151816.GN1124294@oden.dyn.berto.se>","date":"2020-01-22T15:18:16","subject":"Re: [libcamera-devel] [PATCH 06/19] libcamera: bound_method: Use\n\tstd::index_sequence","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your work.\n\nOn 2020-01-20 02:24:24 +0200, Laurent Pinchart wrote:\n> Now that we're using C++-14, replace the manual implementation of\n> std::integer_sequence with std::index_sequence, a specialization of\n> std::integer_sequence with the integer type equal to std::size_t.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  include/libcamera/bound_method.h | 38 +++++++++-----------------------\n>  1 file changed, 10 insertions(+), 28 deletions(-)\n> \n> diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h\n> index ca501493bce2..7ffd2e426e18 100644\n> --- a/include/libcamera/bound_method.h\n> +++ b/include/libcamera/bound_method.h\n> @@ -10,6 +10,7 @@\n>  #include <memory>\n>  #include <tuple>\n>  #include <type_traits>\n> +#include <utility>\n>  \n>  namespace libcamera {\n>  \n> @@ -71,25 +72,6 @@ public:\n>  \tvirtual void invokePack(BoundMethodPackBase *pack) = 0;\n>  \n>  protected:\n> -#ifndef __DOXYGEN__\n> -\t/*\n> -\t * This is a cheap partial implementation of std::integer_sequence<>\n> -\t * from C++14.\n> -\t */\n> -\ttemplate<int...>\n> -\tstruct sequence {\n> -\t};\n> -\n> -\ttemplate<int N, int... S>\n> -\tstruct generator : generator<N-1, N-1, S...> {\n> -\t};\n> -\n> -\ttemplate<int... S>\n> -\tstruct generator<0, S...> {\n> -\t\ttypedef sequence<S...> type;\n> -\t};\n> -#endif\n> -\n>  \tbool activatePack(std::shared_ptr<BoundMethodPackBase> pack,\n>  \t\t\t  bool deleteMethod);\n>  \n> @@ -107,11 +89,11 @@ public:\n>  \tusing PackType = BoundMethodPack<R, Args...>;\n>  \n>  private:\n> -\ttemplate<int... S>\n> -\tvoid invokePack(BoundMethodPackBase *pack, BoundMethodBase::sequence<S...>)\n> +\ttemplate<std::size_t... I>\n> +\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n>  \t{\n>  \t\tPackType *args = static_cast<PackType *>(pack);\n> -\t\targs->ret_ = invoke(std::get<S>(args->args_)...);\n> +\t\targs->ret_ = invoke(std::get<I>(args->args_)...);\n>  \t}\n>  \n>  public:\n> @@ -120,7 +102,7 @@ public:\n>  \n>  \tvoid invokePack(BoundMethodPackBase *pack) override\n>  \t{\n> -\t\tinvokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());\n> +\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n>  \t}\n>  \n>  \tvirtual R activate(Args... args, bool deleteMethod = false) = 0;\n> @@ -134,12 +116,12 @@ public:\n>  \tusing PackType = BoundMethodPack<void, Args...>;\n>  \n>  private:\n> -\ttemplate<int... S>\n> -\tvoid invokePack(BoundMethodPackBase *pack, BoundMethodBase::sequence<S...>)\n> +\ttemplate<std::size_t... I>\n> +\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n>  \t{\n> -\t\t/* args is effectively unused when the sequence S is empty. */\n> +\t\t/* args is effectively unused when the sequence I is empty. */\n>  \t\tPackType *args [[gnu::unused]] = static_cast<PackType *>(pack);\n> -\t\tinvoke(std::get<S>(args->args_)...);\n> +\t\tinvoke(std::get<I>(args->args_)...);\n>  \t}\n>  \n>  public:\n> @@ -148,7 +130,7 @@ public:\n>  \n>  \tvoid invokePack(BoundMethodPackBase *pack) override\n>  \t{\n> -\t\tinvokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());\n> +\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n>  \t}\n>  \n>  \tvirtual void activate(Args... args, bool deleteMethod = false) = 0;\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x243.google.com (mail-lj1-x243.google.com\n\t[IPv6:2a00:1450:4864:20::243])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9B14660854\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jan 2020 16:18:17 +0100 (CET)","by mail-lj1-x243.google.com with SMTP id y6so7259006lji.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jan 2020 07:18:17 -0800 (PST)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\th19sm20527601ljl.57.2020.01.22.07.18.16\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 22 Jan 2020 07:18:16 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=5WCdrJa0U408orTZlYzXhQY8TqcwrUAODF8dkHcdkHE=;\n\tb=oktFH7L6GlulGdjHiMuY7eVIld+LQANlnR27bITo9Q6Fq1OKo2Bg5Vo1SpGdlTqGBA\n\t/+T8FTkuILsDmJTLl70QUeQ+GqOe5iNVyrnwW9ImaFGCB0xb9kH+Gikgl4F/eHpDWYgQ\n\t3AlkaZ+TqYL7WyVshnQuSHvxKauTRGhV+2KSYO6gaeBM1x/OjUiHTPLL4KjKe5u0S23G\n\tEHlP9X8B6xXPIOuCYHNT4LpoaGoMPO/SyxD1MgLkdHUi1zAwtEFWEogtVXOk/gUcnqiG\n\t8csVvvyQoJ7Zb9eHUn9/4vJRfSbhKMY9VNKnhLamIVFHjg37JTl59BVC17hfgs6vmU9H\n\tLt7Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=5WCdrJa0U408orTZlYzXhQY8TqcwrUAODF8dkHcdkHE=;\n\tb=YjHZuc8UZTDrL+ry1Hm+fE6+fo9au0+SQ3JIZKOoC6hlecihcKwIvNaWM0/ylHCk5T\n\tcKmpq+IDVIrr+7H9vWjfT+I5dB2QzEA4UCftZlTyqKUjQGFiBNIu2C8Mrx+rBD+Q6c29\n\t2w/t3vhqTnL3tXljUPqV46LXH4JVNrKw16nbfQDReZk8mi7kj281bIpcZPvQWyEUL8qe\n\tPQSw8NMz7r7Xpurw7i0B3EDB1jswz6k8otI6Iy8ZriLcCiFNhZ1cO8I1qJLhi51lAqPT\n\tHwJu40Ezp8sBs4qyGI/aF00e2JVBz1yysgYSd0tzFTDupJmACfxw4lxY5dIUzT2DO1un\n\tQ3NQ==","X-Gm-Message-State":"APjAAAXK1KLMuYu7jgDAoXovFmvHMtCPNNslhAvypuKPaoPu/qIPkWgo\n\t6A+zT6Q0kIYi62Qy9kEGgcgn8A==","X-Google-Smtp-Source":"APXvYqzXSXJvs0UKBpWWGRtwH/Qs3VDVaMvRs++BNAWk7Mv4dpIeJSgbjBGm5iRB5uscuzqYm+LvrQ==","X-Received":"by 2002:a2e:9b12:: with SMTP id\n\tu18mr20657994lji.274.1579706297078; \n\tWed, 22 Jan 2020 07:18:17 -0800 (PST)","Date":"Wed, 22 Jan 2020 16:18:16 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200122151816.GN1124294@oden.dyn.berto.se>","References":"<20200120002437.6633-1-laurent.pinchart@ideasonboard.com>\n\t<20200120002437.6633-7-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200120002437.6633-7-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 06/19] libcamera: bound_method: Use\n\tstd::index_sequence","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Wed, 22 Jan 2020 15:18:17 -0000"}}]