| 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 |