[libcamera-devel] [PATCH v2] libcamera: yaml_parser: Return nullopt on error
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Aug 3 13:37:28 CEST 2022
Hi Jacopo,
Thank you for the patch.
On Wed, Aug 03, 2022 at 01:29:37PM +0200, Jacopo Mondi via libcamera-devel wrote:
> The YamlParser::getList<>() function returns an std::optional<> to allow
> callers to identify cases where parsing the .yaml file failed from cases
> where the parsed list is just empty.
>
> The current implementation returns an empty vector in case of parsing
> errors, which evaluates to std::nullopt but it less explicit.
{} is not an empty vector, as it's not a vector :-)
The current implementation returns a default-constructed std::optional
in case of errors with
return {};
The returned value is thus equal to std::nullopt, but the code can be
easily misinterpreted as returning an empty vector by a reader.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Change this by returning std::nullopt in case of errors to make the
> intended behaviour more explicit.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> src/libcamera/yaml_parser.cpp | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
> index 84cb57d6de83..c96e99e1317c 100644
> --- a/src/libcamera/yaml_parser.cpp
> +++ b/src/libcamera/yaml_parser.cpp
> @@ -319,7 +319,7 @@ template<typename T,
> std::optional<std::vector<T>> YamlObject::getList() const
> {
> if (type_ != Type::List)
> - return {};
> + return std::nullopt;
>
> std::vector<T> values;
> values.reserve(list_.size());
> @@ -327,7 +327,7 @@ std::optional<std::vector<T>> YamlObject::getList() const
> for (const YamlObject &entry : asList()) {
> const auto value = entry.get<T>();
> if (!value)
> - return {};
> + return std::nullopt;
> values.emplace_back(*value);
> }
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list