src/utility.h

changeset 8
44679e468ba9
child 24
1a0faaaceb84
equal deleted inserted replaced
7:68443f5be176 8:44679e468ba9
1 #pragma once
2 #include "basics.h"
3
4 namespace utility
5 {
6 template<typename T, std::size_t N>
7 constexpr std::size_t countof(T(&)[N])
8 {
9 return N;
10 }
11
12 // http://stackoverflow.com/a/18204188/3629665
13 template<typename T>
14 inline T rotl10(T x)
15 {
16 return (x << 10) | ((x >> 22) & 0x000000ff);
17 }
18
19 template<typename T>
20 inline T rotl20(T x)
21 {
22 return (x << 20) | ((x >> 12) & 0x000000ff);
23 }
24
25 inline QString format(const QString& format_string)
26 {
27 return format_string;
28 }
29
30 template<typename T, typename... Rest>
31 QString format(const QString& format_string, T&& arg, Rest&&... rest)
32 {
33 return format(format_string.arg(arg), std::forward<Rest>(rest)...);
34 }
35
36 inline QString quoted(QString string)
37 {
38 if (string.contains("'"))
39 {
40 string.replace("\"", "\\\"");
41 string = "\"" + string + "\"";
42 }
43 else
44 {
45 string = "'" + string + "'";
46 }
47 return string;
48 }
49
50 template<typename T, typename R>
51 bool contains(T&& container, R&& value)
52 {
53 return std::find(std::begin(container), std::end(container), value) != std::end(container);
54 }
55 }

mercurial