38 void p00_swap2(
void* p00_p0,
void* p00_p1,
size_t p00_size,
void*restrict p00_t0,
void*restrict p00_t1) {
39 if (p00_p0 != p00_p1) {
40 memcpy(p00_t0, p00_p0, p00_size);
41 memcpy(p00_t1, p00_p1, p00_size);
42 memcpy(p00_p1, p00_t0, p00_size);
43 memcpy(p00_p0, p00_t1, p00_size);
56 void p99_swap2(
void* p00_p0,
void* p00_p1,
size_t p00_size) {
57 if (p00_p0 != p00_p1) {
58 char* p00_t0 = malloc(2 * p00_size);
59 char* p00_t1 = p00_t0 + p00_size;
60 p00_swap2(p00_p0, p00_p1, p00_size, p00_t0, p00_t1);
66 void p00_swap1(
void* p00_p0,
void* p00_p1,
size_t p00_size,
void*restrict p00_t0) {
67 if (p00_p0 != p00_p1) {
68 memcpy(p00_t0, p00_p0, p00_size);
69 memcpy(p00_p0, p00_p1, p00_size);
70 memcpy(p00_p1, p00_t0, p00_size);
83 void p99_swap1(
void* p00_p0,
void* p00_p1,
size_t p00_size) {
84 if (p00_p0 != p00_p1) {
85 void* p00_t0 = malloc(p00_size);
86 p00_swap1(p00_p0, p00_p1, p00_size, p00_t0);
91 #define P00_SWAP2(_0, _1) \
94 P99_SIGN_PROMOTE(&(_0), ((_0) = (_1), (void*)0)), \
95 P99_SIGN_PROMOTE(&(_1), ((_1) = (_0), (void*)0)), \
99 [(intmax_t)sizeof(_0) - sizeof(_1)] = 0, \
102 (char[sizeof(_0)]){ \
103 [(intmax_t)sizeof(_1) - sizeof(_0)] = 0, \
106 #define P00_SWAP1(_0, _1) \
109 P99_SIGN_PROMOTE(&(_0), ((_0) = (_1), (void*)0)), \
110 P99_SIGN_PROMOTE(&(_1), ((_1) = (_0), (void*)0)), \
113 (char[sizeof(_0)]){ \
114 [(intmax_t)sizeof(_1) - sizeof(_0)] = 0, \
170 P00_DOCUMENT_PERMITTED_ARGUMENT(
P99_SWAP, 0)
171 P00_DOCUMENT_PERMITTED_ARGUMENT(
P99_SWAP, 1)
172 #define P99_SWAP(_0, _1) ((sizeof(_0) > sizeof(uintmax_t)) ? P00_SWAP1(_0, _1) : P00_SWAP2(_0, _1))
175 P00_DOCUMENT_PERMITTED_ARGUMENT(
P99_QSORT, 0)
176 #define P99_QSORT(TAB, NB, ...) \
177 P99_IF_LT(P99_NARG(__VA_ARGS__), 2) \
178 (qsort((TAB), (NB), sizeof (TAB)[0], __VA_ARGS__)) \
179 (qsort_s((TAB), (NB), sizeof (TAB)[0], __VA_ARGS__))
181 P00_DOCUMENT_PERMITTED_ARGUMENT(
P99_ASORT, 0)
182 #define P99_ASORT(TAB, ...) \
183 P99_IF_LT(P99_NARG(__VA_ARGS__), 2) \
184 (qsort((TAB), P99_ALEN(TAB), sizeof (TAB)[0], __VA_ARGS__)) \
185 (qsort_s((TAB), P99_ALEN(TAB), sizeof (TAB)[0], __VA_ARGS__))