in aios/storage/indexlib/index/common/numeric_compress/UnalignedUnpack.h [1339:1468]
inline void unaligned_unpack_15(Type* decode, const uint32_t* encode, uint32_t dataNum)
{
uint32_t offset = 0;
uint32_t rest = dataNum;
uint32_t decodedOffset = 0;
uint32_t val1 = encode[offset++];
decode[decodedOffset] = (val1 << 17) >> 17;
if (--rest == 0)
return;
decode[++decodedOffset] = (val1 << 2) >> 17;
if (--rest == 0)
return;
uint32_t val2 = encode[offset++];
decode[++decodedOffset] = ((val2 << 19) >> 17) | (val1 >> 30);
if (--rest == 0)
return;
decode[++decodedOffset] = (val2 << 4) >> 17;
if (--rest == 0)
return;
uint32_t val3 = encode[offset++];
decode[++decodedOffset] = ((val3 << 21) >> 17) | (val2 >> 28);
if (--rest == 0)
return;
decode[++decodedOffset] = (val3 << 6) >> 17;
if (--rest == 0)
return;
uint32_t val4 = encode[offset++];
decode[++decodedOffset] = ((val4 << 23) >> 17) | (val3 >> 26);
if (--rest == 0)
return;
decode[++decodedOffset] = (val4 << 8) >> 17;
if (--rest == 0)
return;
uint32_t val5 = encode[offset++];
decode[++decodedOffset] = ((val5 << 25) >> 17) | (val4 >> 24);
if (--rest == 0)
return;
decode[++decodedOffset] = (val5 << 10) >> 17;
if (--rest == 0)
return;
uint32_t val6 = encode[offset++];
decode[++decodedOffset] = ((val6 << 27) >> 17) | (val5 >> 22);
if (--rest == 0)
return;
decode[++decodedOffset] = (val6 << 12) >> 17;
if (--rest == 0)
return;
uint32_t val7 = encode[offset++];
decode[++decodedOffset] = ((val7 << 29) >> 17) | (val6 >> 20);
if (--rest == 0)
return;
decode[++decodedOffset] = (val7 << 14) >> 17;
if (--rest == 0)
return;
uint32_t val8 = encode[offset++];
decode[++decodedOffset] = ((val8 << 31) >> 17) | (val7 >> 18);
if (--rest == 0)
return;
decode[++decodedOffset] = (val8 << 16) >> 17;
if (--rest == 0)
return;
decode[++decodedOffset] = (val8 << 1) >> 17;
if (--rest == 0)
return;
uint32_t val9 = encode[offset++];
decode[++decodedOffset] = ((val9 << 18) >> 17) | (val8 >> 31);
if (--rest == 0)
return;
decode[++decodedOffset] = (val9 << 3) >> 17;
if (--rest == 0)
return;
uint32_t val10 = encode[offset++];
decode[++decodedOffset] = ((val10 << 20) >> 17) | (val9 >> 29);
if (--rest == 0)
return;
decode[++decodedOffset] = (val10 << 5) >> 17;
if (--rest == 0)
return;
uint32_t val11 = encode[offset++];
decode[++decodedOffset] = ((val11 << 22) >> 17) | (val10 >> 27);
if (--rest == 0)
return;
decode[++decodedOffset] = (val11 << 7) >> 17;
if (--rest == 0)
return;
uint32_t val12 = encode[offset++];
decode[++decodedOffset] = ((val12 << 24) >> 17) | (val11 >> 25);
if (--rest == 0)
return;
decode[++decodedOffset] = (val12 << 9) >> 17;
if (--rest == 0)
return;
uint32_t val13 = encode[offset++];
decode[++decodedOffset] = ((val13 << 26) >> 17) | (val12 >> 23);
if (--rest == 0)
return;
decode[++decodedOffset] = (val13 << 11) >> 17;
if (--rest == 0)
return;
uint32_t val14 = encode[offset++];
decode[++decodedOffset] = ((val14 << 28) >> 17) | (val13 >> 21);
if (--rest == 0)
return;
decode[++decodedOffset] = (val14 << 13) >> 17;
if (--rest == 0)
return;
uint32_t val15 = encode[offset++];
decode[++decodedOffset] = ((val15 << 30) >> 17) | (val14 >> 19);
if (--rest == 0)
return;
decode[++decodedOffset] = (val15 << 15) >> 17;
if (--rest == 0)
return;
decode[++decodedOffset] = val15 >> 17;
return;
}