|
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 } |