From: Steinar H. Gunderson Date: Sat, 10 Oct 2020 20:24:27 +0000 (+0200) Subject: Implement support for larger basevals in TurboPFor. X-Git-Tag: 1.0.0~10 X-Git-Url: https://git.sesse.net/?p=plocate;a=commitdiff_plain;h=8c40d71acb262d9efe84af89e28a448bddadbabe Implement support for larger basevals in TurboPFor. --- diff --git a/turbopfor-encode.h b/turbopfor-encode.h index e6e3cd5..9341efc 100644 --- a/turbopfor-encode.h +++ b/turbopfor-encode.h @@ -52,6 +52,12 @@ unsigned char *write_baseval(Docid in, unsigned char *out) out[1] = in & 0xff; out[2] = (in >> 8) & 0xff; return out + 3; + } else if (in < 0x10000000) { + out[0] = (in >> 24) | 0xe0; + out[1] = (in >> 16) & 0xff; + out[2] = (in >> 8) & 0xff; + out[3] = in & 0xff; + return out + 4; } else { assert(false); // Not implemented. } diff --git a/turbopfor.cpp b/turbopfor.cpp index 8a91c33..279a2f9 100644 --- a/turbopfor.cpp +++ b/turbopfor.cpp @@ -74,6 +74,12 @@ const unsigned char *read_baseval(const unsigned char *in, Docid *out) (uint32_t(in[2]) << 8) | (uint32_t(in[1]))) & 0x1fffff; return in + 3; + } else if (*in < 240) { + *out = ((uint32_t(in[0]) << 24) | + (uint32_t(in[1]) << 16) | + (uint32_t(in[2]) << 8) | + (uint32_t(in[3]))) & 0xfffffff; + return in + 4; } else { assert(false); // Not implemented. }