[{"id":36483,"web_url":"https://patchwork.libcamera.org/comment/36483/","msgid":"<20251027121254.GG1544@pendragon.ideasonboard.com>","date":"2025-10-27T12:12:54","subject":"Re: [PATCH v1 1/2] libcamera: base: utils: Simplify `enumerate()`","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Oct 27, 2025 at 11:53:32AM +0100, Barnabás Pőcze wrote:\n> `std::{begin,end}()` support arrays, thus there is no need for a second\n\nI'd write \"C-style arrays\" here to differentiate it from std::array.\n\n> overload. The only reason it is currently needed is that the trailing\n> return type of the first overload uses `iterable.begin()`, which leads\n> to a substitution failure, so that overload is not considered.\n> \n> So remove the array overload, and let CTAD deduce the `Base` template\n> parameter of `enumerate_adapter`, which will make things work for\n> arrays as well.\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  include/libcamera/base/utils.h | 12 ++----------\n>  1 file changed, 2 insertions(+), 10 deletions(-)\n> \n> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h\n> index cb8caaa9ba..d32bd1cd62 100644\n> --- a/include/libcamera/base/utils.h\n> +++ b/include/libcamera/base/utils.h\n> @@ -355,19 +355,11 @@ private:\n>  } /* namespace details */\n>  \n>  template<typename T>\n> -auto enumerate(T &iterable) -> details::enumerate_adapter<decltype(iterable.begin())>\n> +auto enumerate(T &iterable)\n>  {\n> -\treturn { std::begin(iterable), std::end(iterable) };\n> +\treturn details::enumerate_adapter{ std::begin(iterable), std::end(iterable) };\n>  }\n>  \n> -#ifndef __DOXYGEN__\n> -template<typename T, size_t N>\n> -auto enumerate(T (&iterable)[N]) -> details::enumerate_adapter<T *>\n> -{\n> -\treturn { std::begin(iterable), std::end(iterable) };\n> -}\n> -#endif\n> -\n>  class Duration : public std::chrono::duration<double, std::nano>\n>  {\n>  \tusing BaseDuration = std::chrono::duration<double, std::nano>;","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BC74DC3259\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 27 Oct 2025 12:13:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6C6936075E;\n\tMon, 27 Oct 2025 13:13:09 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E6C556069A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Oct 2025 13:13:07 +0100 (CET)","from pendragon.ideasonboard.com (unknown [193.209.96.36])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 1DBE61661; \n\tMon, 27 Oct 2025 13:11:20 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"eu/RzdKy\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761567080;\n\tbh=q2EsL/T5bNvvqTqxn8a+v4/DjrI22xoehfddL2fEszc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=eu/RzdKyijB8XKJrEtd6uEztmKeFO/Z/c7UMHJYoxulF6BijxfdRPUlktt/j/CrYY\n\tvEL2MVu4CliJFWjLL+zO6Ba2OeiC5d+cXEEkYiLAWRZiqse1UWwsg0cEz2xN+S5dg3\n\tGVWzrdMDx2Vm147RFppMUYPTZD+yPF3f8/pDO5bI=","Date":"Mon, 27 Oct 2025 14:12:54 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1 1/2] libcamera: base: utils: Simplify `enumerate()`","Message-ID":"<20251027121254.GG1544@pendragon.ideasonboard.com>","References":"<20251027105333.103186-1-barnabas.pocze@ideasonboard.com>\n\t<20251027105333.103186-2-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20251027105333.103186-2-barnabas.pocze@ideasonboard.com>","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":36495,"web_url":"https://patchwork.libcamera.org/comment/36495/","msgid":"<176158659185.3742839.12700826589813652407@ping.linuxembedded.co.uk>","date":"2025-10-27T17:36:31","subject":"Re: [PATCH v1 1/2] libcamera: base: utils: Simplify `enumerate()`","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Barnabás Pőcze (2025-10-27 10:53:32)\n> `std::{begin,end}()` support arrays, thus there is no need for a second\n> overload. The only reason it is currently needed is that the trailing\n> return type of the first overload uses `iterable.begin()`, which leads\n> to a substitution failure, so that overload is not considered.\n> \n> So remove the array overload, and let CTAD deduce the `Base` template\n> parameter of `enumerate_adapter`, which will make things work for\n> arrays as well.\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> ---\n>  include/libcamera/base/utils.h | 12 ++----------\n>  1 file changed, 2 insertions(+), 10 deletions(-)\n> \n> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h\n> index cb8caaa9ba..d32bd1cd62 100644\n> --- a/include/libcamera/base/utils.h\n> +++ b/include/libcamera/base/utils.h\n> @@ -355,19 +355,11 @@ private:\n>  } /* namespace details */\n>  \n>  template<typename T>\n> -auto enumerate(T &iterable) -> details::enumerate_adapter<decltype(iterable.begin())>\n> +auto enumerate(T &iterable)\n>  {\n> -       return { std::begin(iterable), std::end(iterable) };\n> +       return details::enumerate_adapter{ std::begin(iterable), std::end(iterable) };\n>  }\n>  \n> -#ifndef __DOXYGEN__\n> -template<typename T, size_t N>\n> -auto enumerate(T (&iterable)[N]) -> details::enumerate_adapter<T *>\n> -{\n> -       return { std::begin(iterable), std::end(iterable) };\n> -}\n> -#endif\n> -\n>  class Duration : public std::chrono::duration<double, std::nano>\n>  {\n>         using BaseDuration = std::chrono::duration<double, std::nano>;\n> -- \n> 2.51.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id E16C1BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 27 Oct 2025 17:36:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 209D860765;\n\tMon, 27 Oct 2025 18:36:37 +0100 (CET)","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 2B3266069A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Oct 2025 18:36:35 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1F48122F;\n\tMon, 27 Oct 2025 18:34:47 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"DGrcyPzp\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761586487;\n\tbh=28izvVJfWCu7FZPXCnJu2LLUBLs91lLTB9B/WaL5LkQ=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=DGrcyPzpOzsDyKC948i0WCRf6n15kRFDK+d63COBdvAX7ppgRhRUY1TJjGxCg5Ioh\n\t7JzPJfiT7oYS0MYn3HFjSpGd2qYy46UXhB4AkfYBrIaPkOmnhf8Z5Q0kogJnrZJVdr\n\t4suJ+Vf90/NUU86F9s6tM5nNxkfboZOFJw00Fd/I=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20251027105333.103186-2-barnabas.pocze@ideasonboard.com>","References":"<20251027105333.103186-1-barnabas.pocze@ideasonboard.com>\n\t<20251027105333.103186-2-barnabas.pocze@ideasonboard.com>","Subject":"Re: [PATCH v1 1/2] libcamera: base: utils: Simplify `enumerate()`","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 27 Oct 2025 17:36:31 +0000","Message-ID":"<176158659185.3742839.12700826589813652407@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]