diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-05-24 12:23:38 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-06-16 02:43:47 +0300 |
commit | 27fb47f70b55000fbd793c40377c20d915216f70 (patch) | |
tree | 902c9f46c8f02cac96707c12d1337d3ffec1d2c2 | |
parent | 27483e971fb43c0874b8399e7431dd805efa3994 (diff) |
libcamera: yaml_parser: Extend YamlObject::size() to dictionaries
Dictionaries have a size too, extend the size() function to support
them.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
-rw-r--r-- | include/libcamera/internal/yaml_parser.h | 3 | ||||
-rw-r--r-- | src/libcamera/yaml_parser.cpp | 42 | ||||
-rw-r--r-- | 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 e002fcf5..b4f852b1 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 4b5ea427..5b872dbb 100644 --- a/src/libcamera/yaml_parser.cpp +++ b/src/libcamera/yaml_parser.cpp @@ -75,6 +75,29 @@ YamlObject::~YamlObject() = default; */ /** + * \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 * \brief Parse the YamlObject as a \a T value @@ -236,25 +259,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 5315d99f..c5b4ddbb 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()); |