From bfc2d690b37f4dddea71c1b0a5dc29da89b11420 Mon Sep 17 00:00:00 2001 From: Doug Hoyte Date: Mon, 6 Mar 2023 00:50:36 -0500 Subject: [PATCH] wip --- src/xor.h | 12 +++++------- test/xor.cpp | 2 ++ test/xorTest.pl | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/xor.h b/src/xor.h index f0750eb..db57b27 100644 --- a/src/xor.h +++ b/src/xor.h @@ -93,17 +93,15 @@ struct XorView { uint64_t lowerTimestamp = decodeTimestampIn(query); uint64_t lowerLength = decodeVarInt(query); if (lowerLength > idSize) throw herr("lower too long"); - auto lowerKeyRaw = getBytes(query, lowerLength); - XorElem lowerKey(lowerTimestamp, lowerKeyRaw); + auto lowerKey = getBytes(query, lowerLength); uint64_t upperTimestamp = decodeTimestampIn(query); uint64_t upperLength = decodeVarInt(query); if (upperLength > idSize) throw herr("upper too long"); - auto upperKeyRaw = getBytes(query, upperLength); - XorElem upperKey(upperTimestamp, upperKeyRaw); + auto upperKey = getBytes(query, upperLength); - auto lower = std::lower_bound(prevUpper, elems.end(), lowerKey); - auto upper = std::upper_bound(lower, elems.end(), upperKey); + auto lower = std::lower_bound(prevUpper, elems.end(), XorElem(lowerTimestamp, lowerKey)); + auto upper = std::upper_bound(lower, elems.end(), XorElem(upperTimestamp, upperKey)); prevUpper = upper; uint64_t mode = decodeVarInt(query); // 0 = range, 8 and above = n-8 inline IDs @@ -114,7 +112,7 @@ struct XorView { XorElem ourXorSet; for (auto i = lower; i < upper; ++i) ourXorSet ^= *i; - if (theirXorSet.getId(idSize) != ourXorSet.getId(idSize)) splitRange(lower, upper, lowerTimestamp, lowerKeyRaw, upperTimestamp, upperKeyRaw, lastTimestampOut, output); + if (theirXorSet.getId(idSize) != ourXorSet.getId(idSize)) splitRange(lower, upper, lowerTimestamp, lowerKey, upperTimestamp, upperKey, lastTimestampOut, output); } else if (mode >= 8) { flat_hash_map theirElems; for (uint64_t i = 0; i < mode - 8; i++) { diff --git a/test/xor.cpp b/test/xor.cpp index 14d8e37..c7209ca 100644 --- a/test/xor.cpp +++ b/test/xor.cpp @@ -83,6 +83,8 @@ int main() { if (ids2.contains(id)) throw herr("redundant set"); ids2.insert(id); } + std::cerr << "HAVE " << (have.size() * idSize) << " bytes " + << "NEED " << (need.size() * idSize) << " bytes " << std::endl; } if (q.size()) { diff --git a/test/xorTest.pl b/test/xorTest.pl index ea88071..a4b6823 100644 --- a/test/xorTest.pl +++ b/test/xorTest.pl @@ -16,7 +16,7 @@ while(1) { for (1..$num) { my $mode; - if (rand() < 0.001) { + if (rand() < 0.01) { $mode = rnd(2) + 1; } else { $mode = 3;