fork download
  1. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2.  
  3. #if _WIN64
  4. typedef unsigned long long step_t;
  5. #else
  6. typedef unsigned int step_t;
  7. #endif
  8.  
  9. #define s_return(n) if (!s[n]) return n
  10. #define w_check(n) if (has_zero_byte(w[n])) { w += n; break; }
  11. #define w_return(n) if (!(w[0] & (step_t)(0xFFULL << (8 * n)))) \
  12.   return (size_t)w - (size_t)s + n
  13.  
  14. inline step_t has_zero_byte(const step_t n)
  15. {
  16. const step_t finder = (step_t)0x0101010101010101ULL;
  17. const step_t masker = (step_t)0x8080808080808080ULL;
  18. return (n - finder) & (~n & masker);
  19. }
  20.  
  21. size_t strlen_ex(const char* s)
  22. {
  23. step_t* w;
  24.  
  25. s_return(0); s_return(1); s_return(2); s_return(3);
  26. #if _WIN64
  27. s_return(4); s_return(5); s_return(6); s_return(7);
  28. #endif
  29.  
  30. w = (step_t*)
  31. (((step_t)s & ((step_t)-1 - (sizeof(step_t) - 1))) + sizeof(step_t));
  32.  
  33. while (1)
  34. {
  35. w_check( 0); w_check( 1); w_check( 2); w_check( 3);
  36. w_check( 4); w_check( 5); w_check( 6); w_check( 7);
  37. #if _WIN64
  38. w_check( 8); w_check( 9); w_check(10); w_check(11);
  39. w_check(12); w_check(13); w_check(14); w_check(15);
  40. #endif
  41.  
  42. w += sizeof(step_t) * 2;
  43. }
  44. w_return(0); w_return(1); w_return(2); w_return(3);
  45. #if _WIN64
  46. w_return(4); w_return(5); w_return(6); w_return(7);
  47. #endif
  48. }
  49. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  50.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:21:1: error: 'size_t' does not name a type
 size_t strlen_ex(const char* s)
 ^
stdout
Standard output is empty