[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