--- a/src/basics.h Thu Jun 09 19:11:27 2022 +0300 +++ b/src/basics.h Sat Jun 11 14:30:30 2022 +0300 @@ -22,6 +22,7 @@ #include <compare> #include <memory> #include <optional> +#include <set> #include <type_traits> #include <QDataStream> #include <QDebug> @@ -118,6 +119,7 @@ template<typename T, typename R, typename K> R* findInMap(std::map<T, R>& map, K&& key) { + static_assert(std::is_convertible_v<K, T>, "bad type for key parameter"); auto pair = map.find(key); if (pair != map.end()) { @@ -304,3 +306,20 @@ { return qHash(key.x) ^ rotl10(qHash(key.y)) ^ rotl20(qHash(key.z)); } + +template<typename K, typename V, typename Fn> +void forValueInMap(const std::map<K, V>& map, Fn&& fn) +{ + for (const auto& it : map) { + fn(it.second); + } +} + +inline QString joined(QString value, const QString& separator, const QString& element) +{ + if (not value.isEmpty()) { + value += separator; + } + value += element; + return value; +}