diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -16,6 +16,10 @@ uint64_t stop; Slot(uint64_t startIn, uint64_t stopIn) : start(startIn), stop(stopIn) {} + + bool contains(uint64_t slot) const { return start <= slot && slot < stop; } + bool precedes(uint64_t slot) const { return slot >= stop; } + bool follows(uint64_t slot) const { return start > slot; } }; class PeerManager { diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -72,19 +72,19 @@ size_t i = begin + ((slot - bottom) * (end - begin) / (top - bottom)); // We have a match. - if (slots[i].start <= slot && slot < slots[i].stop) { + if (slots[i].contains(slot)) { return i; } // We undershooted. - if (slot >= slots[i].stop) { + if (slots[i].precedes(slot)) { begin = i + 1; bottom = slots[begin].start; continue; } // We overshooted. - if (slots[i].start > slot) { + if (slots[i].follows(slot)) { end = i; top = slots[end].start; continue; @@ -97,7 +97,7 @@ // Enough of that nonsense, let fallback to linear search. for (size_t i = begin; i < end; i++) { // We have a match. - if (slots[i].start <= slot && slot < slots[i].stop) { + if (slots[i].contains(slot)) { return i; } } diff --git a/src/avalanche/test/peermanager_tests.cpp b/src/avalanche/test/peermanager_tests.cpp --- a/src/avalanche/test/peermanager_tests.cpp +++ b/src/avalanche/test/peermanager_tests.cpp @@ -137,8 +137,7 @@ for (int k = 0; k < 100; k++) { uint64_t s = InsecureRandRange(max); auto i = selectPeerImpl(slots, s, max); - BOOST_CHECK(i == NO_PEER || - (slots[i].start <= s && s < slots[i].stop)); + BOOST_CHECK(i == NO_PEER || slots[i].contains(s)); } } }