diff options
author | Marco Bubke <marco.bubke@qt.io> | 2024-03-21 14:18:53 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2024-03-21 21:07:40 +0000 |
commit | 06f75dbdbfe8c57e602c4fc258ab8934cd208089 (patch) | |
tree | eadf7aea9f5a9d3e36e116ec271563f3ca0c36b2 /src/libs | |
parent | 431d29859bd28cfc38274eed896a0d813ca86c85 (diff) |
Nanotrace: Add generic map support
Change-Id: I5622697e7c5a34e204d045d61bafa874ce3783d5
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/nanotrace/nanotracehr.h | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/libs/nanotrace/nanotracehr.h b/src/libs/nanotrace/nanotracehr.h index 5f2b031d55..37e06b559b 100644 --- a/src/libs/nanotrace/nanotracehr.h +++ b/src/libs/nanotrace/nanotracehr.h @@ -12,6 +12,7 @@ #include <QByteArrayView> #include <QList> +#include <QMap> #include <QStringView> #include <QVarLengthArray> #include <QVariant> @@ -247,8 +248,10 @@ void convertToString(String &string, const Container &values) { string.append('['); - for (const auto &value : values) + for (const auto &value : values) { convertToString(string, value); + string.append(','); + } if (values.size()) string.pop_back(); @@ -256,6 +259,42 @@ void convertToString(String &string, const Container &values) string.append(']'); } +template<typename T> +struct is_map : std::false_type +{}; + +template<typename... Arguments> +struct is_map<QtPrivate::QKeyValueRange<Arguments...>> : std::true_type +{}; + +template<typename... Arguments> +struct is_map<std::map<Arguments...>> : std::true_type +{}; + +template<typename String, typename Map, typename std::enable_if_t<is_map<Map>::value, bool> = true> +void convertToString(String &string, const Map &map) +{ + string.append('{'); + + for (const auto &[key, value] : map) { + convertToString(string, key); + string.append(':'); + convertToString(string, value); + string.append(','); + } + + if (map.begin() != map.end()) + string.pop_back(); + + string.append('}'); +} + +template<typename String, typename Key, typename Value> +void convertToString(String &string, const QMap<Key, Value> &dictonary) +{ + convertToString(string, dictonary.asKeyValueRange()); +} + namespace Internal { template<typename String, typename... Arguments> |