src/utility.h

Sun, 03 Nov 2019 12:56:42 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Sun, 03 Nov 2019 12:56:42 +0200
changeset 9
8b9780700b5e
parent 8
44679e468ba9
child 24
1a0faaaceb84
permissions
-rw-r--r--

added saving of splitter state and recent files

#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