src/utility.h

changeset 8
44679e468ba9
child 24
1a0faaaceb84
--- /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);
+	}
+}

mercurial