[libcamera-devel] [RFC PATCH v2 01/14] libcamera: yaml_object: Turn Type into an enum class
paul.elder at ideasonboard.com
paul.elder at ideasonboard.com
Mon Jun 13 06:11:12 CEST 2022
Hi Laurent,
On Sat, Jun 04, 2022 at 09:59:26PM +0300, Laurent Pinchart via libcamera-devel wrote:
> Turn the Type enum into an enum class to force qualifying 'List' and
> 'Dictionary' in the YamlObject namespace scope. This will help avoiding
> ambiguities when adding iterator support.
>
> 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 | 8 +++---
> src/libcamera/yaml_parser.cpp | 32 ++++++++++++------------
> 2 files changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h
> index 3a4f3052fb65..e002fcf59278 100644
> --- a/include/libcamera/internal/yaml_parser.h
> +++ b/include/libcamera/internal/yaml_parser.h
> @@ -28,15 +28,15 @@ public:
>
> bool isValue() const
> {
> - return type_ == Value;
> + return type_ == Type::Value;
> }
> bool isList() const
> {
> - return type_ == List;
> + return type_ == Type::List;
> }
> bool isDictionary() const
> {
> - return type_ == Dictionary;
> + return type_ == Type::Dictionary;
> }
>
> #ifndef __DOXYGEN__
> @@ -65,7 +65,7 @@ private:
>
> friend class YamlParserContext;
>
> - enum Type {
> + enum class Type {
> Dictionary,
> List,
> Value,
> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
> index 92fedaebebfd..4b5ea427bf45 100644
> --- a/src/libcamera/yaml_parser.cpp
> +++ b/src/libcamera/yaml_parser.cpp
> @@ -47,7 +47,7 @@ void setOk(bool *ok, bool result)
> */
>
> YamlObject::YamlObject()
> - : type_(Value)
> + : type_(Type::Value)
> {
> }
>
> @@ -99,7 +99,7 @@ bool YamlObject::get(const bool &defaultValue, bool *ok) const
> {
> setOk(ok, false);
>
> - if (type_ != Value)
> + if (type_ != Type::Value)
> return defaultValue;
>
> if (value_ == "true") {
> @@ -118,7 +118,7 @@ int32_t YamlObject::get(const int32_t &defaultValue, bool *ok) const
> {
> setOk(ok, false);
>
> - if (type_ != Value)
> + if (type_ != Type::Value)
> return defaultValue;
>
> if (value_ == "")
> @@ -141,7 +141,7 @@ uint32_t YamlObject::get(const uint32_t &defaultValue, bool *ok) const
> {
> setOk(ok, false);
>
> - if (type_ != Value)
> + if (type_ != Type::Value)
> return defaultValue;
>
> if (value_ == "")
> @@ -175,7 +175,7 @@ double YamlObject::get(const double &defaultValue, bool *ok) const
> {
> setOk(ok, false);
>
> - if (type_ != Value)
> + if (type_ != Type::Value)
> return defaultValue;
>
> if (value_ == "")
> @@ -198,7 +198,7 @@ std::string YamlObject::get(const std::string &defaultValue, bool *ok) const
> {
> setOk(ok, false);
>
> - if (type_ != Value)
> + if (type_ != Type::Value)
> return defaultValue;
>
> setOk(ok, true);
> @@ -210,7 +210,7 @@ Size YamlObject::get(const Size &defaultValue, bool *ok) const
> {
> setOk(ok, false);
>
> - if (type_ != List)
> + if (type_ != Type::List)
> return defaultValue;
>
> if (list_.size() != 2)
> @@ -248,7 +248,7 @@ Size YamlObject::get(const Size &defaultValue, bool *ok) const
> */
> std::size_t YamlObject::size() const
> {
> - if (type_ != List)
> + if (type_ != Type::List)
> return 0;
>
> return list_.size();
> @@ -266,7 +266,7 @@ std::size_t YamlObject::size() const
> */
> const YamlObject &YamlObject::operator[](std::size_t index) const
> {
> - if (type_ != List || index >= size())
> + if (type_ != Type::List || index >= size())
> return empty;
>
> return *list_[index];
> @@ -326,7 +326,7 @@ std::vector<std::string> YamlObject::memberNames() const
> */
> const YamlObject &YamlObject::operator[](const std::string &key) const
> {
> - if (type_ != Dictionary || !contains(key))
> + if (type_ != Type::Dictionary || !contains(key))
> return empty;
>
> auto iter = dictionary_.find(key);
> @@ -510,7 +510,7 @@ int YamlParserContext::parseDictionaryOrList(YamlObject::Type type,
> const std::function<int(EventPtr event)> &parseItem)
> {
> yaml_event_type_t endEventType = YAML_SEQUENCE_END_EVENT;
> - if (type == YamlObject::Dictionary)
> + if (type == YamlObject::Type::Dictionary)
> endEventType = YAML_MAPPING_END_EVENT;
>
> /*
> @@ -554,22 +554,22 @@ int YamlParserContext::parseNextYamlObject(YamlObject &yamlObject, EventPtr even
>
> switch (event->type) {
> case YAML_SCALAR_EVENT:
> - yamlObject.type_ = YamlObject::Value;
> + yamlObject.type_ = YamlObject::Type::Value;
> readValue(yamlObject.value_, std::move(event));
> return 0;
>
> case YAML_SEQUENCE_START_EVENT: {
> - yamlObject.type_ = YamlObject::List;
> + yamlObject.type_ = YamlObject::Type::List;
> auto &list = yamlObject.list_;
> auto handler = [this, &list](EventPtr evt) {
> list.emplace_back(new YamlObject());
> return parseNextYamlObject(*list.back(), std::move(evt));
> };
> - return parseDictionaryOrList(YamlObject::List, handler);
> + return parseDictionaryOrList(YamlObject::Type::List, handler);
> }
>
> case YAML_MAPPING_START_EVENT: {
> - yamlObject.type_ = YamlObject::Dictionary;
> + yamlObject.type_ = YamlObject::Type::Dictionary;
> auto &dictionary = yamlObject.dictionary_;
> auto handler = [this, &dictionary](EventPtr evtKey) {
> /* Parse key */
> @@ -592,7 +592,7 @@ int YamlParserContext::parseNextYamlObject(YamlObject &yamlObject, EventPtr even
> auto elem = dictionary.emplace(key, std::make_unique<YamlObject>());
> return parseNextYamlObject(*elem.first->second.get(), std::move(evtValue));
> };
> - return parseDictionaryOrList(YamlObject::Dictionary, handler);
> + return parseDictionaryOrList(YamlObject::Type::Dictionary, handler);
> }
>
> default:
> --
> Regards,
>
> Laurent Pinchart
>
More information about the libcamera-devel
mailing list