Message ID | 20220604185939.29163-3-laurent.pinchart@ideasonboard.com |
---|---|
State | RFC |
Headers | show |
Series |
|
Related | show |
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@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@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 >
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());
Dictionaries have a size too, extend the size() function to support them. Signed-off-by: Laurent Pinchart <laurent.pinchart@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(-)