[libcamera-devel] [RFC PATCH v2 02/14] libcamera: yaml_parser: Extend YamlObject::size() to dictionaries

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


Hi Laurent,

On Sat, Jun 04, 2022 at 09:59:27PM +0300, Laurent Pinchart via libcamera-devel wrote:
> Dictionaries have a size too, extend the size() function to support
> them.
> 
> 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 |  3 +-
>  src/libcamera/yaml_parser.cpp            | 42 +++++++++++++-----------
>  test/yaml-parser.cpp                     |  5 +++
>  3 files changed, 30 insertions(+), 20 deletions(-)
> 
> diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h
> index e002fcf59278..b4f852b1ce54 100644
> --- a/include/libcamera/internal/yaml_parser.h
> +++ b/include/libcamera/internal/yaml_parser.h
> @@ -39,6 +39,8 @@ public:
>  		return type_ == Type::Dictionary;
>  	}
>  
> +	std::size_t size() const;
> +
>  #ifndef __DOXYGEN__
>  	template<typename T,
>  		 typename std::enable_if_t<
> @@ -53,7 +55,6 @@ public:
>  #endif
>  	T get(const T &defaultValue, bool *ok = nullptr) const;
>  
> -	std::size_t size() const;
>  	const YamlObject &operator[](std::size_t index) const;
>  
>  	bool contains(const std::string &key) const;
> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
> index 4b5ea427bf45..5b872dbb0a2d 100644
> --- a/src/libcamera/yaml_parser.cpp
> +++ b/src/libcamera/yaml_parser.cpp
> @@ -74,6 +74,29 @@ YamlObject::~YamlObject() = default;
>   * \return True if the YamlObject is a dictionary, false otherwise
>   */
>  
> +/**
> + * \fn YamlObject::size()
> + * \brief Retrieve the number of elements in a dictionary or list YamlObject
> + *
> + * This function retrieves the size of the YamlObject, defined as the number of
> + * child elements it contains. Only YamlObject instances of Dictionary or List
> + * types have a size, calling this function on other types of instances is
> + * invalid and results in undefined behaviour.
> + *
> + * \return The size of the YamlObject
> + */
> +std::size_t YamlObject::size() const
> +{
> +	switch (type_) {
> +	case Type::Dictionary:
> +		return dictionary_.size();
> +	case Type::List:
> +		return list_.size();
> +	default:
> +		return 0;
> +	}
> +}
> +
>  /**
>   * \fn template<typename T> YamlObject::get<T>(
>   *	const T &defaultValue, bool *ok) const
> @@ -235,25 +258,6 @@ Size YamlObject::get(const Size &defaultValue, bool *ok) const
>  
>  #endif /* __DOXYGEN__ */
>  
> -/**
> - * \fn YamlObject::size()
> - * \brief Retrieve the number of elements in a list YamlObject
> - *
> - * This function retrieves the size of the YamlObject, defined as the number of
> - * child elements it contains. Only YamlObject instances of List type have a
> - * size, calling this function on other types of instances is invalid and
> - * results in undefined behaviour.
> - *
> - * \return The size of the YamlObject
> - */
> -std::size_t YamlObject::size() const
> -{
> -	if (type_ != Type::List)
> -		return 0;
> -
> -	return list_.size();
> -}
> -
>  /**
>   * \fn YamlObject::operator[](std::size_t index) const
>   * \brief Retrieve the element from list YamlObject by index
> diff --git a/test/yaml-parser.cpp b/test/yaml-parser.cpp
> index 5315d99fae5d..c5b4ddbb19e5 100644
> --- a/test/yaml-parser.cpp
> +++ b/test/yaml-parser.cpp
> @@ -421,6 +421,11 @@ protected:
>  			return TestFail;
>  		}
>  
> +		if (dictObj.size() != 3) {
> +			cerr << "Dictionary object parse with wrong size" << std::endl;
> +			return TestFail;
> +		}
> +
>  		auto memeberNames = dictObj.memberNames();
>  		sort(memeberNames.begin(), memeberNames.end());
>  
> -- 
> Regards,
> 
> Laurent Pinchart
> 


More information about the libcamera-devel mailing list