--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/utility.h Sun Nov 03 12:17:41 2019 +0200 @@ -0,0 +1,55 @@ +#pragma once +#include "basics.h" + +namespace utility +{ + template<typename T, std::size_t N> + constexpr std::size_t countof(T(&)[N]) + { + return N; + } + + // http://stackoverflow.com/a/18204188/3629665 + template<typename T> + inline T rotl10(T x) + { + return (x << 10) | ((x >> 22) & 0x000000ff); + } + + template<typename T> + inline T rotl20(T x) + { + return (x << 20) | ((x >> 12) & 0x000000ff); + } + + inline QString format(const QString& format_string) + { + return format_string; + } + + template<typename T, typename... Rest> + QString format(const QString& format_string, T&& arg, Rest&&... rest) + { + return format(format_string.arg(arg), std::forward<Rest>(rest)...); + } + + inline QString quoted(QString string) + { + if (string.contains("'")) + { + string.replace("\"", "\\\""); + string = "\"" + string + "\""; + } + else + { + string = "'" + string + "'"; + } + return string; + } + + template<typename T, typename R> + bool contains(T&& container, R&& value) + { + return std::find(std::begin(container), std::end(container), value) != std::end(container); + } +}