OLD | NEW |
1 #include <string.h> | 1 #include <string.h> |
2 | 2 |
3 #define BITOP(a,b,op) \ | 3 #define BITOP(a, b, op) \ |
4 ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof *(a)))) | 4 ((a)[(size_t)(b) / (8 * sizeof *(a))] op(size_t) 1 \ |
| 5 << ((size_t)(b) % (8 * sizeof *(a)))) |
5 | 6 |
6 size_t strspn(const char *s, const char *c) | 7 size_t strspn(const char* s, const char* c) { |
7 { | 8 const char* a = s; |
8 » const char *a = s; | 9 size_t byteset[32 / sizeof(size_t)] = {0}; |
9 » size_t byteset[32/sizeof(size_t)] = { 0 }; | |
10 | 10 |
11 » if (!c[0]) return 0; | 11 if (!c[0]) |
12 » if (!c[1]) { | 12 return 0; |
13 » » for (; *s == *c; s++); | 13 if (!c[1]) { |
14 » » return s-a; | 14 for (; *s == *c; s++) |
15 » } | 15 ; |
| 16 return s - a; |
| 17 } |
16 | 18 |
17 » for (; *c && BITOP(byteset, *(unsigned char *)c, |=); c++); | 19 for (; *c && BITOP(byteset, *(unsigned char*)c, |=); c++) |
18 » for (; *s && BITOP(byteset, *(unsigned char *)s, &); s++); | 20 ; |
19 » return s-a; | 21 for (; *s && BITOP(byteset, *(unsigned char*)s, &); s++) |
| 22 ; |
| 23 return s - a; |
20 } | 24 } |
OLD | NEW |