blob: 9fd2d2bff2abf6eacc0c82c94e63c080b7650411 [file] [log] [blame]
#include <string.h>
#define BITOP(a, b, op) \
((a)[(size_t)(b) / (8 * sizeof *(a))] op(size_t) 1 << ((size_t)(b) % (8 * sizeof *(a))))
size_t strspn(const char* s, const char* c) {
const char* a = s;
size_t byteset[32 / sizeof(size_t)] = {};
if (!c[0])
return 0;
if (!c[1]) {
for (; *s == *c; s++)
;
return s - a;
}
for (; *c && BITOP(byteset, *(unsigned char*)c, |=); c++)
;
for (; *s && BITOP(byteset, *(unsigned char*)s, &); s++)
;
return s - a;
}