This commit is contained in:
Doug Hoyte
2023-03-06 00:50:36 -05:00
parent f4cd35d2ed
commit bfc2d690b3
3 changed files with 8 additions and 8 deletions

View File

@ -93,17 +93,15 @@ struct XorView {
uint64_t lowerTimestamp = decodeTimestampIn(query); uint64_t lowerTimestamp = decodeTimestampIn(query);
uint64_t lowerLength = decodeVarInt(query); uint64_t lowerLength = decodeVarInt(query);
if (lowerLength > idSize) throw herr("lower too long"); if (lowerLength > idSize) throw herr("lower too long");
auto lowerKeyRaw = getBytes(query, lowerLength); auto lowerKey = getBytes(query, lowerLength);
XorElem lowerKey(lowerTimestamp, lowerKeyRaw);
uint64_t upperTimestamp = decodeTimestampIn(query); uint64_t upperTimestamp = decodeTimestampIn(query);
uint64_t upperLength = decodeVarInt(query); uint64_t upperLength = decodeVarInt(query);
if (upperLength > idSize) throw herr("upper too long"); if (upperLength > idSize) throw herr("upper too long");
auto upperKeyRaw = getBytes(query, upperLength); auto upperKey = getBytes(query, upperLength);
XorElem upperKey(upperTimestamp, upperKeyRaw);
auto lower = std::lower_bound(prevUpper, elems.end(), lowerKey); auto lower = std::lower_bound(prevUpper, elems.end(), XorElem(lowerTimestamp, lowerKey));
auto upper = std::upper_bound(lower, elems.end(), upperKey); auto upper = std::upper_bound(lower, elems.end(), XorElem(upperTimestamp, upperKey));
prevUpper = upper; prevUpper = upper;
uint64_t mode = decodeVarInt(query); // 0 = range, 8 and above = n-8 inline IDs uint64_t mode = decodeVarInt(query); // 0 = range, 8 and above = n-8 inline IDs
@ -114,7 +112,7 @@ struct XorView {
XorElem ourXorSet; XorElem ourXorSet;
for (auto i = lower; i < upper; ++i) ourXorSet ^= *i; 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) { } else if (mode >= 8) {
flat_hash_map<XorElem, bool> theirElems; flat_hash_map<XorElem, bool> theirElems;
for (uint64_t i = 0; i < mode - 8; i++) { for (uint64_t i = 0; i < mode - 8; i++) {

View File

@ -83,6 +83,8 @@ int main() {
if (ids2.contains(id)) throw herr("redundant set"); if (ids2.contains(id)) throw herr("redundant set");
ids2.insert(id); ids2.insert(id);
} }
std::cerr << "HAVE " << (have.size() * idSize) << " bytes "
<< "NEED " << (need.size() * idSize) << " bytes " << std::endl;
} }
if (q.size()) { if (q.size()) {

View File

@ -16,7 +16,7 @@ while(1) {
for (1..$num) { for (1..$num) {
my $mode; my $mode;
if (rand() < 0.001) { if (rand() < 0.01) {
$mode = rnd(2) + 1; $mode = rnd(2) + 1;
} else { } else {
$mode = 3; $mode = 3;