[libcamera-devel,RFC,v2,01/14] libcamera: yaml_object: Turn Type into an enum class
diff mbox series

Message ID 20220604185939.29163-2-laurent.pinchart@ideasonboard.com
State RFC
Headers show
Series
  • Replace boost JSON parser with libyaml in Raspberry Pi IPA
Related show

Commit Message

Laurent Pinchart June 4, 2022, 6:59 p.m. UTC
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@ideasonboard.com>
---
 include/libcamera/internal/yaml_parser.h |  8 +++---
 src/libcamera/yaml_parser.cpp            | 32 ++++++++++++------------
 2 files changed, 20 insertions(+), 20 deletions(-)

Comments

Nicolas Dufresne via libcamera-devel June 13, 2022, 4:11 a.m. UTC | #1
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@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@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
>

Patch
diff mbox series

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: