csnip
0.1
src
csnip
util.h
Go to the documentation of this file.
1
#ifndef CSNIP_UTIL_H
2
#define CSNIP_UTIL_H
3
16
#include <string.h>
17
19
#define csnip_Tswap(type, a, b) \
20
do { \
21
type csnip_tmp =(a); \
22
(a) = (b); \
23
(b) = csnip_tmp; \
24
} while(0)
25
31
#define csnip_Swap(a, b) \
32
do { \
33
typeof(a) csnip_tmp = (a); \
34
(a) = (b); \
35
(b) = csnip_tmp; \
36
} while(0)
37
43
#define csnip_Cswap(a, b) \
44
do { \
45
_Static_assert(sizeof(a) == sizeof(b)); \
46
char csnip_tmp[sizeof(a)]; \
47
memcpy(csnip_tmp, &(a), sizeof(csnip_tmp)); \
48
(a) = (b); \
49
memcpy(&(b), csnip_tmp, sizeof(csnip_tmp)); \
50
} while(0)
51
53
#define csnip_Min(a, b) \
54
((a) < (b) ? (a) : (b))
55
57
#define csnip_Max(a, b) \
58
((a) > (b) ? (a) : (b))
59
61
#define csnip_Static_len(a) (sizeof(a) / sizeof(*(a)))
62
64
inline
size_t
csnip_next_pow_of_2
(
size_t
a)
65
{
66
if
(a == 0)
67
return
1;
68
--a;
69
a |= a >> 1;
70
a |= a >> 2;
71
a |= a >> 4;
72
a |= a >> 8;
73
a |= a >> 16;
74
if
(
sizeof
(a) > 4)
75
a |= a >> 32;
76
++a;
77
return
a;
78
}
79
88
#define csnip_Fill_n(dest, len, val) \
89
do { \
90
size_t csnip__n = (size_t)(len); \
91
size_t csnip__i = 0; \
92
for (; csnip__i < csnip__n; ++csnip__i) { \
93
(dest)[csnip__i] = (val); \
94
} \
95
} while (0)
96
102
#define csnip_Fill(dest_begin, dest_end, val) \
103
csnip_Fill_n(dest_begin, (dest_end) - (dest_begin), val)
104
112
#define csnip_Copy_n(src, len, dest) \
113
do { \
114
size_t csnip__n = (size_t)(len); \
115
size_t csnip__i = 0; \
116
for (; csnip__i < csnip__n; ++csnip__i) \
117
{ \
118
(dest)[csnip__i] = (src)[csnip__i]; \
119
} \
120
} while (0)
121
127
#define csnip_Copy(src_begin, src_end, dest) \
128
csnip_Copy_n(src_begin, (src_end) - (src_begin), dest)
129
132
#endif
/* CSNIP_UTIL_H */
133
134
#if defined(CSNIP_SHORT_NAMES) && !defined(CSNIP_UTIL_HAVE_SHORT_NAMES)
135
#define Tswap csnip_Tswap
136
#define Swap csnip_Swap
137
#define Cswap csnip_Cswap
138
#define Min csnip_Min
139
#define Max csnip_Max
140
#define Static_len csnip_Static_len
141
#define next_pow_of_2 csnip_next_pow_of_2
142
#define Fill_n csnip_Fill_n
143
#define Fill csnip_Fill
144
#define Copy_n csnip_Copy_n
145
#define Copy csnip_Copy
146
#define CSNIP_UTIL_HAVE_SHORT_NAMES
147
#endif
/* CSNIP_SHORT_NAMES && !CSNIP_UTIL_HAVE_SHORT_NAMES */
csnip_next_pow_of_2
size_t csnip_next_pow_of_2(size_t a)
Compute the next power of 2 of a number.
Definition:
util.h:64
Generated by
1.9.1