Squashed 'src/minisketch/' changes from 3472e2f5ec..eb37a9b8e7

eb37a9b8e7 Merge sipa/minisketch#87: Avoid copy in self-assign
fe6557642e Merge sipa/minisketch#88: build: Add `-Wundef`
8ea298bfa7 Avoid copy in self-assign
978a3d8869 build: Add `-Wundef`
3387044179 Merge sipa/minisketch#86: doc: fix typo in sketch_impl.h
15c2d13b60 doc: fix typo in sketch_impl.h
7be08b8a46 Merge sipa/minisketch#85: Fixes for integer precision loss
00fb4a4d83 Avoid or make integer precision conversion explicit
9d62a4d27c Avoid the need to cast/convert to size_t for vector operations
19e06cc7af Prevent overflows from large capacity/max_elements

git-subtree-dir: src/minisketch
git-subtree-split: eb37a9b8e79f9e49d73b96a49bf97a96d9eb676c
This commit is contained in:
fanquake
2024-06-12 14:38:39 +01:00
parent 1eea10a6d2
commit cb59af38e7
7 changed files with 15 additions and 11 deletions

View File

@@ -81,7 +81,8 @@ uint64_t BaseFPBits(uint32_t bits, uint32_t capacity) {
size_t ComputeCapacity(uint32_t bits, size_t max_elements, uint32_t fpbits) {
if (bits == 0) return 0;
uint64_t base_fpbits = BaseFPBits(bits, max_elements);
if (max_elements > 0xffffffff) return max_elements;
uint64_t base_fpbits = BaseFPBits(bits, static_cast<uint32_t>(max_elements));
// The fpbits provided by the base max_elements==capacity case are sufficient.
if (base_fpbits >= fpbits) return max_elements;
// Otherwise, increment capacity by ceil(fpbits / bits) beyond that.
@@ -90,6 +91,7 @@ size_t ComputeCapacity(uint32_t bits, size_t max_elements, uint32_t fpbits) {
size_t ComputeMaxElements(uint32_t bits, size_t capacity, uint32_t fpbits) {
if (bits == 0) return 0;
if (capacity > 0xffffffff) return capacity;
// Start with max_elements=capacity, and decrease max_elements until the corresponding capacity is capacity.
size_t max_elements = capacity;
while (true) {