[libcamera-devel,02/30] cam: options: Move Option struct to options.cpp
diff mbox series

Message ID 20210707021941.20804-3-laurent.pinchart@ideasonboard.com
State Superseded
Headers show
Series
  • Multi-camera support in the cam application
Related show

Commit Message

Laurent Pinchart July 7, 2021, 2:19 a.m. UTC
The Option structure is an internal implementation detail and shouldn't
be exposed in the API. Move it to options.cpp. This requires moving the
inline constructors and destructors for the KeyValueParser and
OptionsParser classes to options.cpp as well, as they need a full
definition of the Option structure.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/cam/options.cpp | 21 +++++++++++++++++++++
 src/cam/options.h   | 22 ++++++----------------
 2 files changed, 27 insertions(+), 16 deletions(-)

Comments

Kieran Bingham July 12, 2021, 1:29 p.m. UTC | #1
On 07/07/2021 03:19, Laurent Pinchart wrote:
> The Option structure is an internal implementation detail and shouldn't
> be exposed in the API. Move it to options.cpp. This requires moving the
> inline constructors and destructors for the KeyValueParser and
> OptionsParser classes to options.cpp as well, as they need a full
> definition of the Option structure.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/cam/options.cpp | 21 +++++++++++++++++++++
>  src/cam/options.h   | 22 ++++++----------------
>  2 files changed, 27 insertions(+), 16 deletions(-)
> 
> diff --git a/src/cam/options.cpp b/src/cam/options.cpp
> index 417c3ab49bc9..41968caa0ccb 100644
> --- a/src/cam/options.cpp
> +++ b/src/cam/options.cpp
> @@ -17,6 +17,21 @@
>   * Option
>   */
>  
> +struct Option {
> +	int opt;
> +	OptionType type;
> +	const char *name;
> +	OptionArgument argument;
> +	const char *argumentName;
> +	const char *help;
> +	KeyValueParser *keyValueParser;
> +	bool isArray;
> +
> +	bool hasShortOption() const { return isalnum(opt); }
> +	bool hasLongOption() const { return name != nullptr; }
> +	const char *typeName() const;
> +};
> +
>  const char *Option::typeName() const
>  {
>  	switch (type) {
> @@ -129,6 +144,9 @@ template class OptionsBase<std::string>;
>   * KeyValueParser
>   */
>  
> +KeyValueParser::KeyValueParser() = default;
> +KeyValueParser::~KeyValueParser() = default;
> +
>  bool KeyValueParser::addOption(const char *name, OptionType type,
>  			       const char *help, OptionArgument argument)
>  {
> @@ -349,6 +367,9 @@ std::vector<OptionValue> OptionValue::toArray() const
>   * OptionsParser
>   */
>  
> +OptionsParser::OptionsParser() = default;
> +OptionsParser::~OptionsParser() = default;
> +
>  bool OptionsParser::addOption(int opt, OptionType type, const char *help,
>  			      const char *name, OptionArgument argument,
>  			      const char *argumentName, bool array)
> diff --git a/src/cam/options.h b/src/cam/options.h
> index d0defb4bd665..688fe26011f8 100644
> --- a/src/cam/options.h
> +++ b/src/cam/options.h
> @@ -14,6 +14,7 @@
>  
>  class KeyValueParser;
>  class OptionValue;
> +struct Option;
>  
>  enum OptionArgument {
>  	ArgumentNone,
> @@ -28,21 +29,6 @@ enum OptionType {
>  	OptionKeyValue,
>  };
>  
> -struct Option {
> -	int opt;
> -	OptionType type;
> -	const char *name;
> -	OptionArgument argument;
> -	const char *argumentName;
> -	const char *help;
> -	KeyValueParser *keyValueParser;
> -	bool isArray;
> -
> -	bool hasShortOption() const { return isalnum(opt); }
> -	bool hasLongOption() const { return name != nullptr; }
> -	const char *typeName() const;
> -};
> -
>  template<typename T>
>  class OptionsBase
>  {
> @@ -73,7 +59,8 @@ public:
>  	{
>  	};
>  
> -	virtual ~KeyValueParser() = default;
> +	KeyValueParser();
> +	virtual ~KeyValueParser();
>  
>  	bool addOption(const char *name, OptionType type, const char *help,
>  		       OptionArgument argument = ArgumentNone);
> @@ -133,6 +120,9 @@ public:
>  	{
>  	};
>  
> +	OptionsParser();
> +	~OptionsParser();
> +
>  	bool addOption(int opt, OptionType type, const char *help,
>  		       const char *name = nullptr,
>  		       OptionArgument argument = ArgumentNone,
>

Patch
diff mbox series

diff --git a/src/cam/options.cpp b/src/cam/options.cpp
index 417c3ab49bc9..41968caa0ccb 100644
--- a/src/cam/options.cpp
+++ b/src/cam/options.cpp
@@ -17,6 +17,21 @@ 
  * Option
  */
 
+struct Option {
+	int opt;
+	OptionType type;
+	const char *name;
+	OptionArgument argument;
+	const char *argumentName;
+	const char *help;
+	KeyValueParser *keyValueParser;
+	bool isArray;
+
+	bool hasShortOption() const { return isalnum(opt); }
+	bool hasLongOption() const { return name != nullptr; }
+	const char *typeName() const;
+};
+
 const char *Option::typeName() const
 {
 	switch (type) {
@@ -129,6 +144,9 @@  template class OptionsBase<std::string>;
  * KeyValueParser
  */
 
+KeyValueParser::KeyValueParser() = default;
+KeyValueParser::~KeyValueParser() = default;
+
 bool KeyValueParser::addOption(const char *name, OptionType type,
 			       const char *help, OptionArgument argument)
 {
@@ -349,6 +367,9 @@  std::vector<OptionValue> OptionValue::toArray() const
  * OptionsParser
  */
 
+OptionsParser::OptionsParser() = default;
+OptionsParser::~OptionsParser() = default;
+
 bool OptionsParser::addOption(int opt, OptionType type, const char *help,
 			      const char *name, OptionArgument argument,
 			      const char *argumentName, bool array)
diff --git a/src/cam/options.h b/src/cam/options.h
index d0defb4bd665..688fe26011f8 100644
--- a/src/cam/options.h
+++ b/src/cam/options.h
@@ -14,6 +14,7 @@ 
 
 class KeyValueParser;
 class OptionValue;
+struct Option;
 
 enum OptionArgument {
 	ArgumentNone,
@@ -28,21 +29,6 @@  enum OptionType {
 	OptionKeyValue,
 };
 
-struct Option {
-	int opt;
-	OptionType type;
-	const char *name;
-	OptionArgument argument;
-	const char *argumentName;
-	const char *help;
-	KeyValueParser *keyValueParser;
-	bool isArray;
-
-	bool hasShortOption() const { return isalnum(opt); }
-	bool hasLongOption() const { return name != nullptr; }
-	const char *typeName() const;
-};
-
 template<typename T>
 class OptionsBase
 {
@@ -73,7 +59,8 @@  public:
 	{
 	};
 
-	virtual ~KeyValueParser() = default;
+	KeyValueParser();
+	virtual ~KeyValueParser();
 
 	bool addOption(const char *name, OptionType type, const char *help,
 		       OptionArgument argument = ArgumentNone);
@@ -133,6 +120,9 @@  public:
 	{
 	};
 
+	OptionsParser();
+	~OptionsParser();
+
 	bool addOption(int opt, OptionType type, const char *help,
 		       const char *name = nullptr,
 		       OptionArgument argument = ArgumentNone,