{"id":12973,"url":"https://patchwork.libcamera.org/api/1.1/patches/12973/?format=json","web_url":"https://patchwork.libcamera.org/patch/12973/","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":"<20210715211459.19373-3-laurent.pinchart@ideasonboard.com>","date":"2021-07-15T21:14:28","name":"[libcamera-devel,v3,02/33] cam: options: Move Option struct to options.cpp","commit_ref":null,"pull_url":null,"state":"accepted","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/12973/mbox/","series":[{"id":2242,"url":"https://patchwork.libcamera.org/api/1.1/series/2242/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2242","date":"2021-07-15T21:14:26","name":"Multi-camera support in the cam application","version":3,"mbox":"https://patchwork.libcamera.org/series/2242/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12973/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12973/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 10A94C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 Jul 2021 21:15:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 84A946853A;\n\tThu, 15 Jul 2021 23:15:09 +0200 (CEST)","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 2E14A6852A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Jul 2021 23:15:05 +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 BD16F340\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Jul 2021 23:15:04 +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=\"BRkh0kVP\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626383704;\n\tbh=Q09DAc+EA4PbrCY0WSTGaN66bxiaHwiGUZauxDxVooY=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=BRkh0kVPtmxg8B82rEKsjALTgGDGaPjdb0/ezlFuD3UvbPcGXPNViCKe7DJ3HownK\n\txDLYyMtDOvA1T1VVf8ZloHyjdbYVBJjR5scE14ZA8I63K8jqw+zVqztn7RGm5EuBcV\n\tdrY+JCOWi9YK3rx1LnoX4K2Rg2dOxgMJW/XmGOxI=","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Fri, 16 Jul 2021 00:14:28 +0300","Message-Id":"<20210715211459.19373-3-laurent.pinchart@ideasonboard.com>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210715211459.19373-1-laurent.pinchart@ideasonboard.com>","References":"<20210715211459.19373-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v3 02/33] cam: options: Move Option struct\n\tto options.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>\nReviewed-by: Kieran Bingham <kieran.bingham@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","v3","02/33"]}