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 | #include <inttypes.h> |
6 | |
7 | |
7 | using namespace std; |
8 | using namespace std; |
8 | |
9 | |
9 | #define ARRAY_LENGTH(v) (sizeof (v) / sizeof ((v)[0])) |
10 | #define ARRAY_LENGTH(v) (sizeof (v) / sizeof ((v)[0])) |
10 | |
11 | |
… | |
… | |
40 | #else |
41 | #else |
41 | # define NOTHROW throw() |
42 | # define NOTHROW throw() |
42 | # define THROW(x) throw x |
43 | # define THROW(x) throw x |
43 | #endif |
44 | #endif |
44 | |
45 | |
45 | extern class byteorder { |
46 | namespace byteorder { |
46 | static unsigned int e; // at least 32 bits |
47 | static uint32_t e () |
47 | public: |
48 | { |
48 | byteorder (); |
49 | char c [4] = { 0x11, 0x22, 0x33, 0x44 }; |
|
|
50 | return *(uint32_t *)c; |
|
|
51 | } |
49 | |
52 | |
50 | static bool big_endian () { return e == 0x11223344; }; |
53 | static bool big_endian () { return e () == 0x11223344; }; |
51 | static bool network () { return e == 0x11223344; }; |
54 | static bool network () { return big_endian (); }; |
52 | static bool little_endian () { return e == 0x44332211; }; |
55 | static bool little_endian () { return e () == 0x44332211; }; |
53 | static bool vax () { return e == 0x44332211; }; |
56 | static bool vax () { return little_endian (); }; |
54 | } byteorder; |
57 | }; |
55 | |
58 | |
56 | // various utility functions |
59 | // various utility functions |
57 | template<typename T, typename U> static inline T min (T a, U b) { return a < (T)b ? a : (T)b; } |
60 | template<typename T, typename U> static inline T min (T a, U b) { return a < (T)b ? a : (T)b; } |
58 | template<typename T, typename U> static inline void min_it (T &a, U b) { a = a < (T)b ? a : (T)b; } |
61 | template<typename T, typename U> static inline void min_it (T &a, U b) { a = a < (T)b ? a : (T)b; } |
59 | template<typename T, typename U> static inline T max (T a, U b) { return a > (T)b ? a : (T)b; } |
62 | template<typename T, typename U> static inline T max (T a, U b) { return a > (T)b ? a : (T)b; } |