summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorStefan Klug <stefan.klug@ideasonboard.com>2024-09-20 12:13:41 +0200
committerStefan Klug <stefan.klug@ideasonboard.com>2024-09-23 13:03:35 +0200
commit6b67094cd231548df3a42d72351ca9e8841b7033 (patch)
treef2ef727891e69439ad9d4c2999e3d675c07af939 /include
parentf623f3ed645d706ed2a0dd129328b63add0dbf47 (diff)
libcamera: yaml-parser: Differentiate between empty and empty string
When accessing a nonexistent key on a dict the YamlObject returns an empty element. This element can happily be cast to a string which is unexpected. For example the following statement: yamlDict["nonexistent"].get<string>("default") is expected to return "default" but actually returns "". Fix this by introducing an empty type to distinguish between an empty YamlObject and a YamlObject of type value containing an empty string. For completeness add an isEmpty() function and an explicit cast to bool to be able to test for that type. Extend the tests accordingly. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'include')
-rw-r--r--include/libcamera/internal/yaml_parser.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h
index 16708e48..6211ff4a 100644
--- a/include/libcamera/internal/yaml_parser.h
+++ b/include/libcamera/internal/yaml_parser.h
@@ -159,6 +159,14 @@ public:
{
return type_ == Type::Dictionary;
}
+ bool isEmpty() const
+ {
+ return type_ == Type::Empty;
+ }
+ explicit operator bool() const
+ {
+ return type_ != Type::Empty;
+ }
std::size_t size() const;
@@ -212,6 +220,7 @@ private:
Dictionary,
List,
Value,
+ Empty,
};
template<typename T>