[libcamera-devel] [RFC PATCH v2 02/14] libcamera: yaml_parser: Extend YamlObject::size() to dictionaries
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Jun 4 20:59:27 CEST 2022
Dictionaries have a size too, extend the size() function to support
them.
Signed-off-by: Laurent Pinchart <laurent.pinchart 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