{"id":12815,"url":"https://patchwork.libcamera.org/api/1.1/patches/12815/?format=json","web_url":"https://patchwork.libcamera.org/patch/12815/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210707021941.20804-3-laurent.pinchart@ideasonboard.com>","date":"2021-07-07T02:19:13","name":"[libcamera-devel,02/30] cam: options: Move Option struct to options.cpp","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"1ed41b9b3f5f214b7ddae2d47fbd7a7aaad7e07d","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/1.1/people/2/?format=json","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/12815/mbox/","series":[{"id":2213,"url":"https://patchwork.libcamera.org/api/1.1/series/2213/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2213","date":"2021-07-07T02:19:12","name":"Multi-camera support in the cam application","version":1,"mbox":"https://patchwork.libcamera.org/series/2213/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12815/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12815/checks/","tags":{},"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 1AAACBD794\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  7 Jul 2021 02:20:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 28DFD6851C;\n\tWed,  7 Jul 2021 04:20:36 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AE82468505\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  7 Jul 2021 04:20:32 +0200 (CEST)","from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id CC833DEE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  7 Jul 2021 04:20:31 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"lhPPx8P6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1625624432;\n\tbh=Qs4yKY4HsHIz4CTBHTwqrEiR7aQ44d6Yt03X2PgoEYA=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=lhPPx8P6RW3kxP8bGChy8RTkja8Hz5MvgTjdRCkvXXvAd/wwYQcHJDxGls48NrWcp\n\tAO4KU4uR81H8Ts/SPP/ok+gquQA6zL1vmaQrG+5LdUe8Lz0xbhrOckGMskJxrmI9si\n\tH50OR/t7k+75DBFwK5Bk+T0VTry0yCTc1lC+fIyI=","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Wed,  7 Jul 2021 05:19:13 +0300","Message-Id":"<20210707021941.20804-3-laurent.pinchart@ideasonboard.com>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210707021941.20804-1-laurent.pinchart@ideasonboard.com>","References":"<20210707021941.20804-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 02/30] cam: options: Move Option struct to\n\toptions.cpp","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>"},"content":"The Option structure is an internal implementation detail and shouldn't\nbe exposed in the API. Move it to options.cpp. This requires moving the\ninline constructors and destructors for the KeyValueParser and\nOptionsParser classes to options.cpp as well, as they need a full\ndefinition of the Option structure.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/cam/options.cpp | 21 +++++++++++++++++++++\n src/cam/options.h   | 22 ++++++----------------\n 2 files changed, 27 insertions(+), 16 deletions(-)","diff":"diff --git a/src/cam/options.cpp b/src/cam/options.cpp\nindex 417c3ab49bc9..41968caa0ccb 100644\n--- a/src/cam/options.cpp\n+++ b/src/cam/options.cpp\n@@ -17,6 +17,21 @@\n  * Option\n  */\n \n+struct Option {\n+\tint opt;\n+\tOptionType type;\n+\tconst char *name;\n+\tOptionArgument argument;\n+\tconst char *argumentName;\n+\tconst char *help;\n+\tKeyValueParser *keyValueParser;\n+\tbool isArray;\n+\n+\tbool hasShortOption() const { return isalnum(opt); }\n+\tbool hasLongOption() const { return name != nullptr; }\n+\tconst char *typeName() const;\n+};\n+\n const char *Option::typeName() const\n {\n \tswitch (type) {\n@@ -129,6 +144,9 @@ template class OptionsBase<std::string>;\n  * KeyValueParser\n  */\n \n+KeyValueParser::KeyValueParser() = default;\n+KeyValueParser::~KeyValueParser() = default;\n+\n bool KeyValueParser::addOption(const char *name, OptionType type,\n \t\t\t       const char *help, OptionArgument argument)\n {\n@@ -349,6 +367,9 @@ std::vector<OptionValue> OptionValue::toArray() const\n  * OptionsParser\n  */\n \n+OptionsParser::OptionsParser() = default;\n+OptionsParser::~OptionsParser() = default;\n+\n bool OptionsParser::addOption(int opt, OptionType type, const char *help,\n \t\t\t      const char *name, OptionArgument argument,\n \t\t\t      const char *argumentName, bool array)\ndiff --git a/src/cam/options.h b/src/cam/options.h\nindex d0defb4bd665..688fe26011f8 100644\n--- a/src/cam/options.h\n+++ b/src/cam/options.h\n@@ -14,6 +14,7 @@\n \n class KeyValueParser;\n class OptionValue;\n+struct Option;\n \n enum OptionArgument {\n \tArgumentNone,\n@@ -28,21 +29,6 @@ enum OptionType {\n \tOptionKeyValue,\n };\n \n-struct Option {\n-\tint opt;\n-\tOptionType type;\n-\tconst char *name;\n-\tOptionArgument argument;\n-\tconst char *argumentName;\n-\tconst char *help;\n-\tKeyValueParser *keyValueParser;\n-\tbool isArray;\n-\n-\tbool hasShortOption() const { return isalnum(opt); }\n-\tbool hasLongOption() const { return name != nullptr; }\n-\tconst char *typeName() const;\n-};\n-\n template<typename T>\n class OptionsBase\n {\n@@ -73,7 +59,8 @@ public:\n \t{\n \t};\n \n-\tvirtual ~KeyValueParser() = default;\n+\tKeyValueParser();\n+\tvirtual ~KeyValueParser();\n \n \tbool addOption(const char *name, OptionType type, const char *help,\n \t\t       OptionArgument argument = ArgumentNone);\n@@ -133,6 +120,9 @@ public:\n \t{\n \t};\n \n+\tOptionsParser();\n+\t~OptionsParser();\n+\n \tbool addOption(int opt, OptionType type, const char *help,\n \t\t       const char *name = nullptr,\n \t\t       OptionArgument argument = ArgumentNone,\n","prefixes":["libcamera-devel","02/30"]}