1 | #ifndef RXVT_UTIL_H |
1 | #ifndef RXVT_UTIL_H |
2 | #define RXVT_UTIL_H |
2 | #define RXVT_UTIL_H |
3 | |
3 | |
4 | #include <cstdlib> |
4 | #include <cstdlib> |
5 | #include <cstring> |
5 | #include <cstring> |
|
|
6 | |
|
|
7 | using namespace std; |
6 | |
8 | |
7 | #define PP_CONCAT_(a, b) a ## b |
9 | #define PP_CONCAT_(a, b) a ## b |
8 | #define PP_CONCAT(a, b) PP_CONCAT_(a, b) |
10 | #define PP_CONCAT(a, b) PP_CONCAT_(a, b) |
9 | #define PP_STRINGIFY_(a) #a |
11 | #define PP_STRINGIFY_(a) #a |
10 | #define PP_STRINGIFY(a) PP_STRINGIFY_(a) |
12 | #define PP_STRINGIFY(a) PP_STRINGIFY_(a) |
… | |
… | |
61 | // linear interpolation |
63 | // linear interpolation |
62 | template<typename T, typename U, typename P> |
64 | template<typename T, typename U, typename P> |
63 | static inline |
65 | static inline |
64 | T lerp (T a, U b, P p) |
66 | T lerp (T a, U b, P p) |
65 | { |
67 | { |
66 | return (int(a) * int(p) + int(b) * int(100 - p)) / 100; |
68 | return (long(a) * long(100 - p) + long(b) * long(p) + 50) / 100; |
67 | } |
69 | } |
68 | |
70 | |
69 | // some bit functions, xft fuck me plenty |
71 | // some bit functions, xft fuck me plenty |
70 | #if HAVE_GCC_BUILTINS |
72 | #if HAVE_GCC_BUILTINS |
71 | static inline int ctz (unsigned int x) CONST { return __builtin_ctz (x); } |
73 | static inline int ctz (unsigned int x) CONST { return __builtin_ctz (x); } |