[libcamera-devel] [RFC PATCH v2 01/14] libcamera: yaml_object: Turn Type into an enum class

paul.elder at ideasonboard.com paul.elder at ideasonboard.com
Mon Jun 13 06:11:12 CEST 2022


Hi Laurent,

On Sat, Jun 04, 2022 at 09:59:26PM +0300, Laurent Pinchart via libcamera-devel wrote:
> Turn the Type enum into an enum class to force qualifying 'List' and
> 'Dictionary' in the YamlObject namespace scope. This will help avoiding
> ambiguities when adding iterator support.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
>  include/libcamera/internal/yaml_parser.h |  8 +++---
>  src/libcamera/yaml_parser.cpp            | 32 ++++++++++++------------
>  2 files changed, 20 insertions(+), 20 deletions(-)
> 
> diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h
> index 3a4f3052fb65..e002fcf59278 100644
> --- a/include/libcamera/internal/yaml_parser.h
> +++ b/include/libcamera/internal/yaml_parser.h
> @@ -28,15 +28,15 @@ public:
>  
>  	bool isValue() const
>  	{
> -		return type_ == Value;
> +		return type_ == Type::Value;
>  	}
>  	bool isList() const
>  	{
> -		return type_ == List;
> +		return type_ == Type::List;
>  	}
>  	bool isDictionary() const
>  	{
> -		return type_ == Dictionary;
> +		return type_ == Type::Dictionary;
>  	}
>  
>  #ifndef __DOXYGEN__
> @@ -65,7 +65,7 @@ private:
>  
>  	friend class YamlParserContext;
>  
> -	enum Type {
> +	enum class Type {
>  		Dictionary,
>  		List,
>  		Value,
> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
> index 92fedaebebfd..4b5ea427bf45 100644
> --- a/src/libcamera/yaml_parser.cpp
> +++ b/src/libcamera/yaml_parser.cpp
> @@ -47,7 +47,7 @@ void setOk(bool *ok, bool result)
>   */
>  
>  YamlObject::YamlObject()
> -	: type_(Value)
> +	: type_(Type::Value)
>  {
>  }
>  
> @@ -99,7 +99,7 @@ bool YamlObject::get(const bool &defaultValue, bool *ok) const
>  {
>  	setOk(ok, false);
>  
> -	if (type_ != Value)
> +	if (type_ != Type::Value)
>  		return defaultValue;
>  
>  	if (value_ == "true") {
> @@ -118,7 +118,7 @@ int32_t YamlObject::get(const int32_t &defaultValue, bool *ok) const
>  {
>  	setOk(ok, false);
>  
> -	if (type_ != Value)
> +	if (type_ != Type::Value)
>  		return defaultValue;
>  
>  	if (value_ == "")
> @@ -141,7 +141,7 @@ uint32_t YamlObject::get(const uint32_t &defaultValue, bool *ok) const
>  {
>  	setOk(ok, false);
>  
> -	if (type_ != Value)
> +	if (type_ != Type::Value)
>  		return defaultValue;
>  
>  	if (value_ == "")
> @@ -175,7 +175,7 @@ double YamlObject::get(const double &defaultValue, bool *ok) const
>  {
>  	setOk(ok, false);
>  
> -	if (type_ != Value)
> +	if (type_ != Type::Value)
>  		return defaultValue;
>  
>  	if (value_ == "")
> @@ -198,7 +198,7 @@ std::string YamlObject::get(const std::string &defaultValue, bool *ok) const
>  {
>  	setOk(ok, false);
>  
> -	if (type_ != Value)
> +	if (type_ != Type::Value)
>  		return defaultValue;
>  
>  	setOk(ok, true);
> @@ -210,7 +210,7 @@ Size YamlObject::get(const Size &defaultValue, bool *ok) const
>  {
>  	setOk(ok, false);
>  
> -	if (type_ != List)
> +	if (type_ != Type::List)
>  		return defaultValue;
>  
>  	if (list_.size() != 2)
> @@ -248,7 +248,7 @@ Size YamlObject::get(const Size &defaultValue, bool *ok) const
>   */
>  std::size_t YamlObject::size() const
>  {
> -	if (type_ != List)
> +	if (type_ != Type::List)
>  		return 0;
>  
>  	return list_.size();
> @@ -266,7 +266,7 @@ std::size_t YamlObject::size() const
>   */
>  const YamlObject &YamlObject::operator[](std::size_t index) const
>  {
> -	if (type_ != List || index >= size())
> +	if (type_ != Type::List || index >= size())
>  		return empty;
>  
>  	return *list_[index];
> @@ -326,7 +326,7 @@ std::vector<std::string> YamlObject::memberNames() const
>   */
>  const YamlObject &YamlObject::operator[](const std::string &key) const
>  {
> -	if (type_ != Dictionary || !contains(key))
> +	if (type_ != Type::Dictionary || !contains(key))
>  		return empty;
>  
>  	auto iter = dictionary_.find(key);
> @@ -510,7 +510,7 @@ int YamlParserContext::parseDictionaryOrList(YamlObject::Type type,
>  					     const std::function<int(EventPtr event)> &parseItem)
>  {
>  	yaml_event_type_t endEventType = YAML_SEQUENCE_END_EVENT;
> -	if (type == YamlObject::Dictionary)
> +	if (type == YamlObject::Type::Dictionary)
>  		endEventType = YAML_MAPPING_END_EVENT;
>  
>  	/*
> @@ -554,22 +554,22 @@ int YamlParserContext::parseNextYamlObject(YamlObject &yamlObject, EventPtr even
>  
>  	switch (event->type) {
>  	case YAML_SCALAR_EVENT:
> -		yamlObject.type_ = YamlObject::Value;
> +		yamlObject.type_ = YamlObject::Type::Value;
>  		readValue(yamlObject.value_, std::move(event));
>  		return 0;
>  
>  	case YAML_SEQUENCE_START_EVENT: {
> -		yamlObject.type_ = YamlObject::List;
> +		yamlObject.type_ = YamlObject::Type::List;
>  		auto &list = yamlObject.list_;
>  		auto handler = [this, &list](EventPtr evt) {
>  			list.emplace_back(new YamlObject());
>  			return parseNextYamlObject(*list.back(), std::move(evt));
>  		};
> -		return parseDictionaryOrList(YamlObject::List, handler);
> +		return parseDictionaryOrList(YamlObject::Type::List, handler);
>  	}
>  
>  	case YAML_MAPPING_START_EVENT: {
> -		yamlObject.type_ = YamlObject::Dictionary;
> +		yamlObject.type_ = YamlObject::Type::Dictionary;
>  		auto &dictionary = yamlObject.dictionary_;
>  		auto handler = [this, &dictionary](EventPtr evtKey) {
>  			/* Parse key */
> @@ -592,7 +592,7 @@ int YamlParserContext::parseNextYamlObject(YamlObject &yamlObject, EventPtr even
>  			auto elem = dictionary.emplace(key, std::make_unique<YamlObject>());
>  			return parseNextYamlObject(*elem.first->second.get(), std::move(evtValue));
>  		};
> -		return parseDictionaryOrList(YamlObject::Dictionary, handler);
> +		return parseDictionaryOrList(YamlObject::Type::Dictionary, handler);
>  	}
>  
>  	default:
> -- 
> Regards,
> 
> Laurent Pinchart
> 


More information about the libcamera-devel mailing list