static uint64_t crc64_little()

in sdk/src/utils/Crc64.cc [113:140]


static uint64_t crc64_little(uint64_t crc, void *buf, size_t len)
{
    unsigned char *next = (unsigned char *)buf;

    crc = ~crc;
    while (len && ((uintptr_t)next & 7) != 0) {
        crc = crc64_table[0][(crc ^ *next++) & 0xff] ^ (crc >> 8);
        len--;
    }
    while (len >= 8) {
        crc ^= *(uint64_t *)next;
        crc = crc64_table[7][crc & 0xff] ^
              crc64_table[6][(crc >> 8) & 0xff] ^
              crc64_table[5][(crc >> 16) & 0xff] ^
              crc64_table[4][(crc >> 24) & 0xff] ^
              crc64_table[3][(crc >> 32) & 0xff] ^
              crc64_table[2][(crc >> 40) & 0xff] ^
              crc64_table[1][(crc >> 48) & 0xff] ^
              crc64_table[0][crc >> 56];
        next += 8;
        len -= 8;
    }
    while (len) {
        crc = crc64_table[0][(crc ^ *next++) & 0xff] ^ (crc >> 8);
        len--;
    }
    return ~crc;
}