blob: b96ffa4fad0b230cf3f63afd6d51c1bcd0e022b6 [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)] = {0};
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;
}