From 8c40d71acb262d9efe84af89e28a448bddadbabe Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 10 Oct 2020 22:24:27 +0200 Subject: [PATCH] Implement support for larger basevals in TurboPFor. --- turbopfor-encode.h | 6 ++++++ turbopfor.cpp | 6 ++++++ 2 files changed, 12 insertions(+) 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. } -- 2.39.2