cam: options: Add an array data type to OptionValue
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 addValue() method is used. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user