Files
libkeke/libkeke_utils.c
2026-09-03 21:13:45 -05:00

30 lines
532 B
C

#include <stddef.h>
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;
}