[libcamera-devel] [PATCH v2 2/3] cam: options: Add an array data type to OptionValue
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed Mar 27 01:21:06 CET 2019
To allow specifying the same argument option multiple times a new type
of OptionValue is needed. As parsing of options is an iterative process
there is a need to append options as they are parsed so instead of
setting values using the constructor a new add() method is used.
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/cam/options.cpp | 22 ++++++++++++++++++++++
src/cam/options.h | 7 +++++++
2 files changed, 29 insertions(+)
diff --git a/src/cam/options.cpp b/src/cam/options.cpp
index 497833397d894f82..556e7623c54b0658 100644
--- a/src/cam/options.cpp
+++ b/src/cam/options.cpp
@@ -5,6 +5,7 @@
* options.cpp - cam - Options parsing
*/
+#include <cassert>
#include <getopt.h>
#include <iomanip>
#include <iostream>
@@ -272,6 +273,14 @@ OptionValue::OptionValue(const KeyValueParser::Options &value)
{
}
+void OptionValue::addValue(const OptionValue &value)
+{
+ assert(type_ == ValueNone || type_ == ValueArray);
+
+ type_ = ValueArray;
+ array_.push_back(value);
+}
+
OptionValue::operator int() const
{
return toInteger();
@@ -287,6 +296,11 @@ OptionValue::operator KeyValueParser::Options() const
return toKeyValues();
}
+OptionValue::operator std::vector<OptionValue>() const
+{
+ return toArray();
+}
+
int OptionValue::toInteger() const
{
if (type_ != ValueInteger)
@@ -311,6 +325,14 @@ KeyValueParser::Options OptionValue::toKeyValues() const
return keyValues_;
}
+std::vector<OptionValue> OptionValue::toArray() const
+{
+ if (type_ != ValueArray)
+ return std::vector<OptionValue>{};
+
+ return array_;
+}
+
/* -----------------------------------------------------------------------------
* OptionsParser
*/
diff --git a/src/cam/options.h b/src/cam/options.h
index b33a90fc6058febf..e0ff50af2fa74986 100644
--- a/src/cam/options.h
+++ b/src/cam/options.h
@@ -10,6 +10,7 @@
#include <ctype.h>
#include <list>
#include <map>
+#include <vector>
class KeyValueParser;
class OptionValue;
@@ -84,6 +85,7 @@ public:
ValueInteger,
ValueString,
ValueKeyValue,
+ ValueArray,
};
OptionValue();
@@ -92,21 +94,26 @@ public:
OptionValue(const std::string &value);
OptionValue(const KeyValueParser::Options &value);
+ void addValue(const OptionValue &value);
+
ValueType type() const { return type_; }
operator int() const;
operator std::string() const;
operator KeyValueParser::Options() const;
+ operator std::vector<OptionValue>() const;
int toInteger() const;
std::string toString() const;
KeyValueParser::Options toKeyValues() const;
+ std::vector<OptionValue> toArray() const;
private:
ValueType type_;
int integer_;
std::string string_;
KeyValueParser::Options keyValues_;
+ std::vector<OptionValue> array_;
};
class OptionsParser
--
2.21.0
More information about the libcamera-devel
mailing list