Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. #include <time.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <stdint.h>
  6.  
  7. static void
  8. encode_cycle(uint64_t value, uint8_t *buffer)
  9. {
  10. while (value >= 0x80) {
  11. *(buffer++) = ((uint8_t) value & 0x7f) | 0x80;
  12. value >>= 7;
  13. }
  14. *buffer = (uint8_t) value;
  15. }
  16.  
  17.  
  18. #define BYTE1_MAX ((uint64_t)((uint64_t)-1) & 0x7f)
  19. #define BYTE2_MAX ((BYTE1_MAX << 7) | BYTE1_MAX)
  20. #define BYTE3_MAX ((BYTE2_MAX << 7) | BYTE1_MAX)
  21. #define BYTE4_MAX ((BYTE3_MAX << 7) | BYTE1_MAX)
  22. #define BYTE5_MAX ((BYTE4_MAX << 7) | BYTE1_MAX)
  23. #define BYTE6_MAX ((BYTE5_MAX << 7) | BYTE1_MAX)
  24. #define BYTE7_MAX ((BYTE6_MAX << 7) | BYTE1_MAX)
  25.  
  26. static void
  27. encode_ifs(uint64_t value, uint8_t *buffer)
  28. {
  29. if (value <= BYTE1_MAX) {
  30. buffer[0] = (uint8_t) value;
  31. return;
  32. }
  33. buffer[0] = ((uint8_t) value & 0x7f) | 0x80;
  34. value >>= 7;
  35. if (value <= BYTE2_MAX) {
  36. buffer[1] = (uint8_t) value;
  37. return;
  38. }
  39. buffer[1] = ((uint8_t) value & 0x7f) | 0x80;
  40. value >>= 7;
  41. if (value <= BYTE3_MAX) {
  42. buffer[2] = (uint8_t) value;
  43. return;
  44. }
  45. buffer[2] = ((uint8_t) value & 0x7f) | 0x80;
  46. value >>= 7;
  47. if (value <= BYTE4_MAX) {
  48. buffer[3] = (uint8_t) value;
  49. return;
  50. }
  51. buffer[3] = ((uint8_t) value & 0x7f) | 0x80;
  52. value >>= 7;
  53. if (value <= BYTE5_MAX) {
  54. buffer[4] = (uint8_t) value;
  55. return;
  56. }
  57. buffer[4] = ((uint8_t) value & 0x7f) | 0x80;
  58. value >>= 7;
  59. if (value <= BYTE6_MAX) {
  60. buffer[5] = (uint8_t) value;
  61. return;
  62. }
  63. buffer[5] = ((uint8_t) value & 0x7f) | 0x80;
  64. value >>= 7;
  65. if (value <= BYTE7_MAX) {
  66. buffer[6] = (uint8_t) value;
  67. return;
  68. }
  69. buffer[6] = ((uint8_t) value & 0x7f) | 0x80;
  70. buffer[7] = (uint8_t) (value >> 7);
  71. }
  72.  
  73. int
  74. main(void)
  75. {
  76. uint8_t buffer[100];
  77. srand(time(NULL));
  78. clock_t start = clock();
  79. for (int i = 0; i < 1000000; ++i) {
  80. uint64_t first = (uint64_t) rand() << (sizeof(int) * 8);
  81. int second = rand();
  82. encode_ifs(first | second, buffer);
  83. }
  84. clock_t end = clock();
  85. printf("time = %f\n", (end - start + 1.0) / CLOCKS_PER_SEC);
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement