Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <time.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- static void
- encode_cycle(uint64_t value, uint8_t *buffer)
- {
- while (value >= 0x80) {
- *(buffer++) = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- }
- *buffer = (uint8_t) value;
- }
- #define BYTE1_MAX ((uint64_t)((uint64_t)-1) & 0x7f)
- #define BYTE2_MAX ((BYTE1_MAX << 7) | BYTE1_MAX)
- #define BYTE3_MAX ((BYTE2_MAX << 7) | BYTE1_MAX)
- #define BYTE4_MAX ((BYTE3_MAX << 7) | BYTE1_MAX)
- #define BYTE5_MAX ((BYTE4_MAX << 7) | BYTE1_MAX)
- #define BYTE6_MAX ((BYTE5_MAX << 7) | BYTE1_MAX)
- #define BYTE7_MAX ((BYTE6_MAX << 7) | BYTE1_MAX)
- static void
- encode_ifs(uint64_t value, uint8_t *buffer)
- {
- if (value <= BYTE1_MAX) {
- buffer[0] = (uint8_t) value;
- return;
- }
- buffer[0] = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- if (value <= BYTE2_MAX) {
- buffer[1] = (uint8_t) value;
- return;
- }
- buffer[1] = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- if (value <= BYTE3_MAX) {
- buffer[2] = (uint8_t) value;
- return;
- }
- buffer[2] = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- if (value <= BYTE4_MAX) {
- buffer[3] = (uint8_t) value;
- return;
- }
- buffer[3] = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- if (value <= BYTE5_MAX) {
- buffer[4] = (uint8_t) value;
- return;
- }
- buffer[4] = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- if (value <= BYTE6_MAX) {
- buffer[5] = (uint8_t) value;
- return;
- }
- buffer[5] = ((uint8_t) value & 0x7f) | 0x80;
- value >>= 7;
- if (value <= BYTE7_MAX) {
- buffer[6] = (uint8_t) value;
- return;
- }
- buffer[6] = ((uint8_t) value & 0x7f) | 0x80;
- buffer[7] = (uint8_t) (value >> 7);
- }
- int
- main(void)
- {
- uint8_t buffer[100];
- srand(time(NULL));
- clock_t start = clock();
- for (int i = 0; i < 1000000; ++i) {
- uint64_t first = (uint64_t) rand() << (sizeof(int) * 8);
- int second = rand();
- encode_ifs(first | second, buffer);
- }
- clock_t end = clock();
- printf("time = %f\n", (end - start + 1.0) / CLOCKS_PER_SEC);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement