#include void keke_swap(void *a, void *b, size_t size) { if(a == b) return; size_t i = 0; int *ia = a; int *ib = b; for(i = 0; i < (size / sizeof(int)); ++i) { ia[i] ^= ib[i]; ib[i] ^= ia[i]; ia[i] ^= ib[i]; } size %= sizeof(int); char *aa = a + (i * sizeof(int)); char *bb = b + (i * sizeof(int)); for(i = 0; i < size; i++) { aa[i] ^= bb[i]; bb[i] ^= aa[i]; aa[i] ^= bb[i]; } } size_t bit_ceil(size_t s) { size_t t = 1; while(t < s) t <<= 1; return t; }