summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBarnabás Pőcze <pobrn@protonmail.com>2024-10-01 16:03:32 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-10-03 01:36:29 +0300
commite879a86979ab368cd3744bd82fdc7c3013685f0f (patch)
treeab3f66bffff3205250a3abf1a4a90d52ee7d51b6 /include
parent3088e14e814eb3bb25103de8f5402ef6b0211689 (diff)
libcamera: yaml_parser: Take string keys in `std::string_view`
In many cases a static string literal is used as key. Thus having the argument type be `const std::string&` is suboptimal since an `std::string` object needs to be constructed before the call. C++17 introduced `std::string_view`, using which the call can be done with less overhead, as the `std::string_view` is non-owning and may be passed in registers entirely. So make `YamlObject::{contains,operator[]}` take the string keys in `std::string_view`s. Unfortunately, that is not sufficient yet, because `std::map::find()` takes an reference to `const key_type`, which would be `const std::string&` in the case of `YamlParser`. However, with a transparent comparator such as `std::less<>` `std::map::find()` is able to accept any object as the argument, and it forwards it to the comparator. So make `YamlParser::dictionary_` use `std::less<>` as the comparator to enable the use of `std::map::find()` with any type of argument. Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'include')
-rw-r--r--include/libcamera/internal/yaml_parser.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h
index 6211ff4a..de452844 100644
--- a/include/libcamera/internal/yaml_parser.h
+++ b/include/libcamera/internal/yaml_parser.h
@@ -12,6 +12,7 @@
#include <optional>
#include <stdint.h>
#include <string>
+#include <string_view>
#include <vector>
#include <libcamera/base/class.h>
@@ -206,8 +207,8 @@ public:
const YamlObject &operator[](std::size_t index) const;
- bool contains(const std::string &key) const;
- const YamlObject &operator[](const std::string &key) const;
+ bool contains(std::string_view key) const;
+ const YamlObject &operator[](std::string_view key) const;
private:
LIBCAMERA_DISABLE_COPY_AND_MOVE(YamlObject)
@@ -232,7 +233,7 @@ private:
std::string value_;
Container list_;
- std::map<std::string, YamlObject *> dictionary_;
+ std::map<std::string, YamlObject *, std::less<>> dictionary_;
};
class YamlParser final