mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01:00
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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user