88 #define __swap_fast(A,B) __extension__ \ 89 (__builtin_choose_expr( \ 90 __builtin_types_compatible_p(__typeof__(A), int[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 91 __builtin_choose_expr( \ 92 __builtin_types_compatible_p(__typeof__(A), const int[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 93 __builtin_choose_expr( \ 94 __builtin_types_compatible_p(__typeof__(A), unsigned int[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 95 __builtin_choose_expr( \ 96 __builtin_types_compatible_p(__typeof__(A), const unsigned int[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 97 __builtin_choose_expr( \ 98 __builtin_types_compatible_p(__typeof__(A), short[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 99 __builtin_choose_expr( \ 100 __builtin_types_compatible_p(__typeof__(A), const short[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 101 __builtin_choose_expr( \ 102 __builtin_types_compatible_p(__typeof__(A), unsigned short[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 103 __builtin_choose_expr( \ 104 __builtin_types_compatible_p(__typeof__(A), const unsigned short[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 105 __builtin_choose_expr( \ 106 __builtin_types_compatible_p(__typeof__(A), long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 107 __builtin_choose_expr( \ 108 __builtin_types_compatible_p(__typeof__(A), const long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 109 __builtin_choose_expr( \ 110 __builtin_types_compatible_p(__typeof__(A), unsigned long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 111 __builtin_choose_expr( \ 112 __builtin_types_compatible_p(__typeof__(A), const unsigned long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 113 __builtin_choose_expr( \ 114 __builtin_types_compatible_p(__typeof__(A), long long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 115 __builtin_choose_expr( \ 116 __builtin_types_compatible_p(__typeof__(A), const long long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 117 __builtin_choose_expr( \ 118 __builtin_types_compatible_p(__typeof__(A), unsigned long long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 119 __builtin_choose_expr( \ 120 __builtin_types_compatible_p(__typeof__(A), unsigned const long long[]), __swap_p(A, B, sizeof(A), sizeof(B)), \ 121 __builtin_choose_expr( \ 122 __builtin_types_compatible_p(__typeof__(A), char*), __swap_pp((void**)&A, (void**)&B), \ 123 __builtin_choose_expr( \ 124 __builtin_types_compatible_p(__typeof__(A), const char*), __swap_pp((void**)&A, (void**)&B), \ 125 __builtin_choose_expr( \ 126 __builtin_types_compatible_p(__typeof__(A), char[]), __swap_p(A, B, (sizeof(A) - 1), (sizeof(B) - 1)), \ 127 __builtin_choose_expr( \ 128 __builtin_types_compatible_p(__typeof__(A), const char[]), __swap_p(A, B, (sizeof(A) - 1), (sizeof(B) - 1)), \ 129 __builtin_choose_expr( \ 130 __builtin_types_compatible_p(__typeof__(A), unsigned char*), __swap_pp((void**)&A, (void**)&B), \ 131 __builtin_choose_expr( \ 132 __builtin_types_compatible_p(__typeof__(A), const unsigned char*), __swap_pp((void**)&A, (void**)&B), \ 133 __builtin_choose_expr( \ 134 __builtin_types_compatible_p(__typeof__(A), unsigned char[]), __swap_p(A, B, (sizeof(A) - 1), (sizeof(B) - 1)), \ 135 __builtin_choose_expr( \ 136 __builtin_types_compatible_p(__typeof__(A), const unsigned char[]), __swap_p(A, B, (sizeof(A) - 1), (sizeof(B) - 1)), \ 137 __builtin_choose_expr( \ 138 __builtin_types_compatible_p(__typeof__(A), void*), __swap_pp((void**)&A, (void**)&B), \ 139 __builtin_choose_expr( \ 140 __builtin_types_compatible_p(__typeof__(A), const void*), __swap_pp((void**)&A, (void**)&B), \ 141 __builtin_choose_expr( \ 142 __builtin_types_compatible_p(__typeof__(A), void*[]), __swap_ppp((void***)&A, (void***)&B), \ 143 __builtin_choose_expr( \ 144 __builtin_types_compatible_p(__typeof__(A), const void*[]), __swap_ppp((void***)&A, (void***)&B), \ 145 __swap_p(A, B, sizeof(*A), sizeof(*B))))))))))))))))))))))))))))))) 156 __attribute__((always_inline)) inline
void __swap_ppp(
void ***a,
void ***b)
171 __attribute__((always_inline)) inline
void __swap_pp(
void **a,
void **b)
189 __attribute__((always_inline)) inline
void __swap_p(
void *a,
void *b,
size_t na,
size_t nb)
191 if ((!na) || (na != nb)) {
return; }
196 if (va == vb) {
return; }
198 __builtin_prefetch(va + na, 1, 1);
199 __builtin_prefetch(vb + nb, 1, 1);
void __swap_ppp(void ***a, void ***b)
Swap triple pointers types.
Definition: fswap.h:156
void __swap_p(void *a, void *b, size_t na, size_t nb)
Swap all sized types.
Definition: fswap.h:189
void __swap_pp(void **a, void **b)
Swap double pointers types.
Definition: fswap.h:171