diff options
author | Luca Deri <deri@ntop.org> | 2023-02-13 01:02:27 +0100 |
---|---|---|
committer | Luca Deri <deri@ntop.org> | 2023-02-13 01:02:27 +0100 |
commit | 85bab9e660fbffbc8b4ba09b721e6797a489dbf6 (patch) | |
tree | 070eed7c47befc372edd732a7f4e80ba6d0817ee /src | |
parent | bf413afba1b79685caf1ccade5f984c2d6e92e3c (diff) |
Centos7 fixes
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/third_party/src/roaring.c | 434 |
1 files changed, 256 insertions, 178 deletions
diff --git a/src/lib/third_party/src/roaring.c b/src/lib/third_party/src/roaring.c index 58c1ea78c..ab95ab6e8 100644 --- a/src/lib/third_party/src/roaring.c +++ b/src/lib/third_party/src/roaring.c @@ -159,6 +159,17 @@ extern "C" { // portability definitions are in global scope, not a namespace #ifdef CROARING_DISABLE_X64 #undef CROARING_IS_X64 #endif + + +#if (defined(__GNUC_RH_RELEASE__) && (__GNUC_RH_RELEASE__ != 5)) || (__GNUC__ < 5) + /* RH 7 don't have atomic includes */ +#undef CROARING_IS_X64 +#undef ALLOW_UNALIGNED +#define ALLOW_UNALIGNED +#endif + + + // we include the intrinsic header #if !CROARING_REGULAR_VISUAL_STUDIO /* Non-Microsoft C/C++-compatible compiler */ @@ -403,12 +414,14 @@ static inline int hamming(uint64_t x) { #define CROARING_UNTARGET_REGION #endif +#ifndef ALLOW_UNALIGNED // Allow unaligned memory access #if defined(__GNUC__) || defined(__clang__) #define ALLOW_UNALIGNED __attribute__((no_sanitize("alignment"))) #else #define ALLOW_UNALIGNED #endif +#endif #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) #define CROARING_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) @@ -643,6 +656,17 @@ static inline uint32_t croaring_detect_supported_architectures() { return buffer; } #else // CROARING_VISUAL_STUDIO + + +#if (defined(__GNUC_RH_RELEASE__) && (__GNUC_RH_RELEASE__ != 5)) || (__GNUC__ < 5) +#define ROARING_DISABLE_AVX +#undef __AVX2__ +/* CentOS 7 */ +static inline uint32_t croaring_detect_supported_architectures() { + return(dynamic_croaring_detect_supported_architectures()); +} +#else + #include <stdatomic.h> static inline uint32_t croaring_detect_supported_architectures() { // we use an atomic for thread safety @@ -653,6 +677,7 @@ static inline uint32_t croaring_detect_supported_architectures() { } return buffer; } +#endif #endif // CROARING_REGULAR_VISUAL_STUDIO #ifdef ROARING_DISABLE_AVX @@ -1178,16 +1203,17 @@ extern "C" { namespace roaring { namespace internal { */ static inline void bitset_set_range(uint64_t *words, uint32_t start, uint32_t end) { + if (start == end) return; uint32_t firstword = start / 64; - uint32_t endword = (end - 1) / 64; + uint32_t endword = (end - 1) / 64, i; if (firstword == endword) { words[firstword] |= ((~UINT64_C(0)) << (start % 64)) & ((~UINT64_C(0)) >> ((~end + 1) % 64)); return; } words[firstword] |= (~UINT64_C(0)) << (start % 64); - for (uint32_t i = firstword + 1; i < endword; i++) { + for (i = firstword + 1; i < endword; i++) { words[i] = ~UINT64_C(0); } words[endword] |= (~UINT64_C(0)) >> ((~end + 1) % 64); @@ -1201,14 +1227,14 @@ static inline int bitset_lenrange_cardinality(const uint64_t *words, uint32_t start, uint32_t lenminusone) { uint32_t firstword = start / 64; - uint32_t endword = (start + lenminusone) / 64; + uint32_t endword = (start + lenminusone) / 64, i; if (firstword == endword) { return hamming(words[firstword] & ((~UINT64_C(0)) >> ((63 - lenminusone) % 64)) << (start % 64)); } int answer = hamming(words[firstword] & ((~UINT64_C(0)) << (start % 64))); - for (uint32_t i = firstword + 1; i < endword; i++) { + for (i = firstword + 1; i < endword; i++) { answer += hamming(words[i]); } answer += @@ -1223,7 +1249,7 @@ static inline int bitset_lenrange_cardinality(const uint64_t *words, static inline bool bitset_lenrange_empty(const uint64_t *words, uint32_t start, uint32_t lenminusone) { uint32_t firstword = start / 64; - uint32_t endword = (start + lenminusone) / 64; + uint32_t endword = (start + lenminusone) / 64, i; if (firstword == endword) { return (words[firstword] & ((~UINT64_C(0)) >> ((63 - lenminusone) % 64)) << (start % 64)) == 0; @@ -1231,7 +1257,7 @@ static inline bool bitset_lenrange_empty(const uint64_t *words, uint32_t start, if (((words[firstword] & ((~UINT64_C(0)) << (start%64)))) != 0) { return false; } - for (uint32_t i = firstword + 1; i < endword; i++) { + for ( i = firstword + 1; i < endword; i++) { if (words[i] != 0) { return false; } @@ -1249,7 +1275,7 @@ static inline bool bitset_lenrange_empty(const uint64_t *words, uint32_t start, static inline void bitset_set_lenrange(uint64_t *words, uint32_t start, uint32_t lenminusone) { uint32_t firstword = start / 64; - uint32_t endword = (start + lenminusone) / 64; + uint32_t endword = (start + lenminusone) / 64, i; if (firstword == endword) { words[firstword] |= ((~UINT64_C(0)) >> ((63 - lenminusone) % 64)) << (start % 64); @@ -1257,7 +1283,7 @@ static inline void bitset_set_lenrange(uint64_t *words, uint32_t start, } uint64_t temp = words[endword]; words[firstword] |= (~UINT64_C(0)) << (start % 64); - for (uint32_t i = firstword + 1; i < endword; i += 2) + for ( i = firstword + 1; i < endword; i += 2) words[i] = words[i + 1] = ~UINT64_C(0); words[endword] = temp | (~UINT64_C(0)) >> (((~start + 1) - lenminusone - 1) % 64); @@ -1270,9 +1296,9 @@ static inline void bitset_flip_range(uint64_t *words, uint32_t start, uint32_t end) { if (start == end) return; uint32_t firstword = start / 64; - uint32_t endword = (end - 1) / 64; + uint32_t endword = (end - 1) / 64, i; words[firstword] ^= ~((~UINT64_C(0)) << (start % 64)); - for (uint32_t i = firstword; i < endword; i++) { + for ( i = firstword; i < endword; i++) { words[i] = ~words[i]; } words[endword] ^= ((~UINT64_C(0)) >> ((~end + 1) % 64)); @@ -1285,14 +1311,14 @@ static inline void bitset_reset_range(uint64_t *words, uint32_t start, uint32_t end) { if (start == end) return; uint32_t firstword = start / 64; - uint32_t endword = (end - 1) / 64; + uint32_t endword = (end - 1) / 64, i; if (firstword == endword) { words[firstword] &= ~(((~UINT64_C(0)) << (start % 64)) & ((~UINT64_C(0)) >> ((~end + 1) % 64))); return; } words[firstword] &= ~((~UINT64_C(0)) << (start % 64)); - for (uint32_t i = firstword + 1; i < endword; i++) { + for ( i = firstword + 1; i < endword; i++) { words[i] = UINT64_C(0); } words[endword] &= ~((~UINT64_C(0)) >> ((~end + 1) % 64)); @@ -2077,6 +2103,7 @@ inline bool array_container_contains(const array_container_t *arr, // return binarySearch(arr->array, arr->cardinality, pos) >= 0; // binary search with fallback to linear search for short ranges int32_t low = 0; + int i; const uint16_t * carr = (const uint16_t *) arr->array; int32_t high = arr->cardinality - 1; // while (high - low >= 0) { @@ -2092,7 +2119,7 @@ inline bool array_container_contains(const array_container_t *arr, } } - for (int i=low; i <= high; i++) { + for (i=low; i <= high; i++) { uint16_t v = carr[i]; if (v == pos) { return true; @@ -2175,14 +2202,15 @@ static inline void array_container_add_range_nvals(array_container_t *array, uint32_t min, uint32_t max, int32_t nvals_less, int32_t nvals_greater) { - int32_t union_cardinality = nvals_less + (max - min + 1) + nvals_greater; + int32_t union_cardinality = nvals_less + (max - min + 1) + nvals_greater; + uint32_t i; if (union_cardinality > array->capacity) { array_container_grow(array, union_cardinality, true); } memmove(&(array->array[union_cardinality - nvals_greater]), &(array->array[array->cardinality - nvals_greater]), nvals_greater * sizeof(uint16_t)); - for (uint32_t i = 0; i <= max - min; i++) { + for ( i = 0; i <= max - min; i++) { array->array[nvals_less + i] = min + i; } array->cardinality = union_cardinality; @@ -2412,7 +2440,7 @@ static inline bool bitset_container_get_range(const bitset_container_t *bitset, const uint32_t start = pos_start >> 6; const uint32_t end = pos_end >> 6; - + uint16_t i; const uint64_t first = ~((1ULL << (pos_start & 0x3F)) - 1); const uint64_t last = (1ULL << (pos_end & 0x3F)) - 1; @@ -2424,7 +2452,7 @@ static inline bool bitset_container_get_range(const bitset_container_t *bitset, return false; } - for (uint16_t i = start + 1; (i < BITSET_CONTAINER_SIZE_IN_WORDS) && (i < end); ++i){ + for (i = start + 1; (i < BITSET_CONTAINER_SIZE_IN_WORDS) && (i < end); ++i){ if (bitset->words[i] != UINT64_C(0xFFFFFFFFFFFFFFFF)) return false; } @@ -2476,7 +2504,8 @@ int bitset_container_compute_cardinality(const bitset_container_t *bitset); static inline bool bitset_container_empty( const bitset_container_t *bitset) { if (bitset->cardinality == BITSET_UNKNOWN_CARDINALITY) { - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i ++) { + int i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i ++) { if((bitset->words[i]) != 0) return false; } return true; @@ -2970,14 +2999,14 @@ inline bool run_container_contains(const run_container_t *run, uint16_t pos) { static inline bool run_container_contains_range(const run_container_t *run, uint32_t pos_start, uint32_t pos_end) { uint32_t count = 0; - int32_t index = interleavedBinarySearch(run->runs, run->n_runs, pos_start); + int32_t index = interleavedBinarySearch(run->runs, run->n_runs, pos_start), i; if (index < 0) { index = -index - 2; if ((index == -1) || ((pos_start - run->runs[index].value) > run->runs[index].length)){ return false; } } - for (int32_t i = index; i < run->n_runs; ++i) { + for (i = index; i < run->n_runs; ++i) { const uint32_t stop = run->runs[i].value + run->runs[i].length; if (run->runs[i].value >= pos_end) break; if (stop >= pos_end) { @@ -9600,7 +9629,8 @@ CROARING_UNTARGET_REGION size_t bitset_extract_setbits(const uint64_t *words, size_t length, uint32_t *out, uint32_t base) { int outpos = 0; - for (size_t i = 0; i < length; ++i) { + size_t i; + for (i = 0; i < length; ++i) { uint64_t w = words[i]; while (w != 0) { uint64_t t = w & (~w + 1); // on x64, should compile to BLSI (careful: the Intel compiler seems to fail) @@ -9621,7 +9651,9 @@ size_t bitset_extract_intersection_setbits_uint16(const uint64_t * __restrict__ size_t length, uint16_t *out, uint16_t base) { int outpos = 0; - for (size_t i = 0; i < length; ++i) { + size_t i; + + for (i = 0; i < length; ++i) { uint64_t w = words1[i] & words2[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -9713,7 +9745,8 @@ CROARING_UNTARGET_REGION size_t bitset_extract_setbits_uint16(const uint64_t *words, size_t length, uint16_t *out, uint16_t base) { int outpos = 0; - for (size_t i = 0; i < length; ++i) { + size_t i; + for (i = 0; i < length; ++i) { uint64_t w = words[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -10057,9 +10090,10 @@ array_container_t *array_container_create() { /* Create a new array containing all values in [min,max). */ array_container_t * array_container_create_range(uint32_t min, uint32_t max) { array_container_t * answer = array_container_create_given_capacity(max - min + 1); + uint32_t k; if(answer == NULL) return answer; answer->cardinality = 0; - for(uint32_t k = min; k < max; k++) { + for(k = min; k < max; k++) { answer->array[answer->cardinality++] = k; } return answer; @@ -10089,8 +10123,9 @@ void array_container_offset(const array_container_t *c, lo_cap = count_less(c->array, c->cardinality, top); if (loc && lo_cap) { + int i; lo = array_container_create_given_capacity(lo_cap); - for (int i = 0; i < lo_cap; ++i) { + for (i = 0; i < lo_cap; ++i) { array_container_add(lo, c->array[i] + offset); } *loc = (container_t*)lo; @@ -10098,8 +10133,9 @@ void array_container_offset(const array_container_t *c, hi_cap = c->cardinality - lo_cap; if (hic && hi_cap) { + int i; hi = array_container_create_given_capacity(hi_cap); - for (int i = lo_cap; i < c->cardinality; ++i) { + for (i = lo_cap; i < c->cardinality; ++i) { array_container_add(hi, c->array[i] + offset); } *hic = (container_t*)hi; @@ -10184,7 +10220,8 @@ void array_container_copy(const array_container_t *src, void array_container_add_from_range(array_container_t *arr, uint32_t min, uint32_t max, uint16_t step) { - for (uint32_t value = min; value < max; value += step) { + uint32_t value; + for (value = min; value < max; value += step) { array_container_append(arr, value); } } @@ -10378,9 +10415,9 @@ void array_container_intersection_inplace(array_container_t *src_1, ALLOW_UNALIGNED int array_container_to_uint32_array(void *vout, const array_container_t *cont, uint32_t base) { - int outpos = 0; + int outpos = 0, i; uint32_t *out = (uint32_t *)vout; - for (int i = 0; i < cont->cardinality; ++i) { + for (i = 0; i < cont->cardinality; ++i) { const uint32_t val = base + cont->array[i]; memcpy(out + outpos, &val, sizeof(uint32_t)); // should be compiled as a MOV on x64 @@ -10390,13 +10427,14 @@ int array_container_to_uint32_array(void *vout, const array_container_t *cont, } void array_container_printf(const array_container_t *v) { + int i; if (v->cardinality == 0) { printf("{}"); return; } printf("{"); printf("%d", v->array[0]); - for (int i = 1; i < v->cardinality; ++i) { + for (i = 1; i < v->cardinality; ++i) { printf(",%d", v->array[i]); } printf("}"); @@ -10404,11 +10442,13 @@ void array_container_printf(const array_container_t *v) { void array_container_printf_as_uint32_array(const array_container_t *v, uint32_t base) { + int i; + if (v->cardinality == 0) { return; } printf("%u", v->array[0] + base); - for (int i = 1; i < v->cardinality; ++i) { + for (i = 1; i < v->cardinality; ++i) { printf(",%u", v->array[i] + base); } } @@ -10418,7 +10458,8 @@ int32_t array_container_number_of_runs(const array_container_t *ac) { // Can SIMD work here? int32_t nr_runs = 0; int32_t prev = -2; - for (const uint16_t *p = ac->array; p != ac->array + ac->cardinality; ++p) { + uint16_t *p; + for (p = ac->array; p != ac->array + ac->cardinality; ++p) { if (*p != prev + 1) nr_runs++; prev = *p; } @@ -10472,7 +10513,8 @@ int32_t array_container_read(int32_t cardinality, array_container_t *container, bool array_container_iterate(const array_container_t *cont, uint32_t base, roaring_iterator iterator, void *ptr) { - for (int i = 0; i < cont->cardinality; i++) + int i; + for (i = 0; i < cont->cardinality; i++) if (!iterator(cont->array[i] + base, ptr)) return false; return true; } @@ -10480,7 +10522,8 @@ bool array_container_iterate(const array_container_t *cont, uint32_t base, bool array_container_iterate64(const array_container_t *cont, uint32_t base, roaring_iterator64 iterator, uint64_t high_bits, void *ptr) { - for (int i = 0; i < cont->cardinality; i++) + int i; + for (i = 0; i < cont->cardinality; i++) if (!iterator(high_bits | (uint64_t)(cont->array[i] + base), ptr)) return false; return true; @@ -10565,11 +10608,13 @@ void bitset_container_add_from_range(bitset_container_t *bitset, uint32_t min, if (step == 0) return; // refuse to crash if ((64 % step) == 0) { // step divides 64 uint64_t mask = 0; // construct the repeated mask - for (uint32_t value = (min % step); value < 64; value += step) { + uint32_t value; + for (value = (min % step); value < 64; value += step) { mask |= ((uint64_t)1 << value); } uint32_t firstword = min / 64; uint32_t endword = (max - 1) / 64; + uint32_t i; bitset->cardinality = (max - min + step - 1) / step; if (firstword == endword) { bitset->words[firstword] |= @@ -10578,11 +10623,12 @@ void bitset_container_add_from_range(bitset_container_t *bitset, uint32_t min, return; } bitset->words[firstword] = mask & ((~UINT64_C(0)) << (min % 64)); - for (uint32_t i = firstword + 1; i < endword; i++) + for (i = firstword + 1; i < endword; i++) bitset->words[i] = mask; bitset->words[endword] = mask & ((~UINT64_C(0)) >> ((~max + 1) % 64)); } else { - for (uint32_t value = min; value < max; value += step) { + uint32_t value; + for (value = min; value < max; value += step) { bitset_container_add(bitset, value); } } @@ -10634,8 +10680,9 @@ void bitset_container_offset(const bitset_container_t *c, if (i == 0) { memcpy(bc->words+b, c->words, 8*end); } else { + uint32_t k; bc->words[b] = c->words[0] << i; - for (uint32_t k = 1; k < end; ++k) { + for (k = 1; k < end; ++k) { val = c->words[k] << i; val |= c->words[k-1] >> (64 - i); bc->words[b+k] = val; @@ -10666,7 +10713,9 @@ void bitset_container_offset(const bitset_container_t *c, if (i == 0) { memcpy(bc->words, c->words+end, 8*b); } else { - for (uint32_t k = end; k < 1024; ++k) { + uint32_t k; + + for ( k = end; k < 1024; ++k) { val = c->words[k] << i; val |= c->words[k-1] >> (64 - i); bc->words[k-end] = val; @@ -10695,7 +10744,8 @@ bool bitset_container_intersect(const bitset_container_t *src_1, // could vectorize, but this is probably already quite fast in practice const uint64_t * __restrict__ words_1 = src_1->words; const uint64_t * __restrict__ words_2 = src_2->words; - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i ++) { + int i; + for ( i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i ++) { if((words_1[i] & words_2[i]) != 0) return true; } return false; @@ -10759,8 +10809,8 @@ int bitset_container_compute_cardinality(const bitset_container_t *bitset) { /* Get the number of bits set (force computation) */ int bitset_container_compute_cardinality(const bitset_container_t *bitset) { const uint64_t *words = bitset->words; - int32_t sum = 0; - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 4) { + int32_t sum = 0, i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 4) { sum += hamming(words[i]); sum += hamming(words[i + 1]); sum += hamming(words[i + 2]); @@ -11122,7 +11172,8 @@ int bitset_container_##opname(const bitset_container_t *src_1, \ const uint64_t * __restrict__ words_2 = src_2->words; \ uint64_t *out = dst->words; \ int32_t sum = 0; \ - for (size_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 2) { \ + size_t i; \ + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 2) { \ const uint64_t word_1 = (words_1[i])opsymbol(words_2[i]), \ word_2 = (words_1[i + 1])opsymbol(words_2[i + 1]); \ out[i] = word_1; \ @@ -11139,7 +11190,8 @@ int bitset_container_##opname##_nocard(const bitset_container_t *src_1, \ const uint64_t * __restrict__ words_1 = src_1->words; \ const uint64_t * __restrict__ words_2 = src_2->words; \ uint64_t *out = dst->words; \ - for (size_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i++) { \ + size_t i; \ + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i++) { \ out[i] = (words_1[i])opsymbol(words_2[i]); \ } \ dst->cardinality = BITSET_UNKNOWN_CARDINALITY; \ @@ -11150,7 +11202,8 @@ int bitset_container_##opname##_justcard(const bitset_container_t *src_1, \ const uint64_t * __restrict__ words_1 = src_1->words; \ const uint64_t * __restrict__ words_2 = src_2->words; \ int32_t sum = 0; \ - for (size_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 2) { \ + size_t i; \ + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 2) { \ const uint64_t word_1 = (words_1[i])opsymbol(words_2[i]), \ word_2 = (words_1[i + 1])opsymbol(words_2[i + 1]); \ sum += hamming(word_1); \ @@ -11200,7 +11253,8 @@ void bitset_container_printf(const bitset_container_t * v) { printf("{"); uint32_t base = 0; bool iamfirst = true;// TODO: rework so that this is not necessary yet still readable - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i) { + int i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i) { uint64_t w = v->words[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -11224,7 +11278,8 @@ void bitset_container_printf(const bitset_container_t * v) { */ void bitset_container_printf_as_uint32_array(const bitset_container_t * v, uint32_t base) { bool iamfirst = true;// TODO: rework so that this is not necessary yet still readable - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i) { + int i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i) { uint64_t w = v->words[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -11244,10 +11299,10 @@ void bitset_container_printf_as_uint32_array(const bitset_container_t * v, uint3 // TODO: use the fast lower bound, also int bitset_container_number_of_runs(bitset_container_t *bc) { - int num_runs = 0; + int num_runs = 0, i; uint64_t next_word = bc->words[0]; - - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS-1; ++i) { + + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS-1; ++i) { uint64_t word = next_word; next_word = bc->words[i+1]; num_runs += hamming((~word) & (word << 1)) + ( (word >> 63) & ~next_word); @@ -11276,7 +11331,8 @@ int32_t bitset_container_read(int32_t cardinality, bitset_container_t *container } bool bitset_container_iterate(const bitset_container_t *cont, uint32_t base, roaring_iterator iterator, void *ptr) { - for (int32_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { + int32_t i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { uint64_t w = cont->words[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -11290,7 +11346,8 @@ bool bitset_container_iterate(const bitset_container_t *cont, uint32_t base, roa } bool bitset_container_iterate64(const bitset_container_t *cont, uint32_t base, roaring_iterator64 iterator, uint64_t high_bits, void *ptr) { - for (int32_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { + int32_t i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { uint64_t w = cont->words[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -11349,7 +11406,8 @@ bool bitset_container_is_subset(const bitset_container_t *container1, return false; } } - for(int32_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { + int32_t i; + for(i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { if((container1->words[i] & container2->words[i]) != container1->words[i]) { return false; } @@ -11365,7 +11423,8 @@ bool bitset_container_select(const bitset_container_t *container, uint32_t *star } const uint64_t *words = container->words; int32_t size; - for (int i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 1) { + int i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; i += 1) { size = hamming(words[i]); if(rank <= *start_rank + size) { uint64_t w = container->words[i]; @@ -11391,7 +11450,8 @@ bool bitset_container_select(const bitset_container_t *container, uint32_t *star /* Returns the smallest value (assumes not empty) */ uint16_t bitset_container_minimum(const bitset_container_t *container) { - for (int32_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { + int32_t i; + for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i ) { uint64_t w = container->words[i]; if (w != 0) { int r = __builtin_ctzll(w); @@ -11403,7 +11463,8 @@ uint16_t bitset_container_minimum(const bitset_container_t *container) { /* Returns the largest value (assumes not empty) */ uint16_t bitset_container_maximum(const bitset_container_t *container) { - for (int32_t i = BITSET_CONTAINER_SIZE_IN_WORDS - 1; i > 0; --i ) { + int32_t i; + for (i = BITSET_CONTAINER_SIZE_IN_WORDS - 1; i > 0; --i ) { uint64_t w = container->words[i]; if (w != 0) { int r = __builtin_clzll(w); @@ -11417,8 +11478,8 @@ uint16_t bitset_container_maximum(const bitset_container_t *container) { int bitset_container_rank(const bitset_container_t *container, uint16_t x) { // credit: aqrit int sum = 0; - int i = 0; - for (int end = x / 64; i < end; i++){ + int i = 0, end; + for (end = x / 64; i < end; i++){ sum += hamming(container->words[i]); } uint64_t lastword = container->words[i]; @@ -11717,15 +11778,16 @@ extern "C" { namespace roaring { namespace internal { // types. bitset_container_t *bitset_container_from_array(const array_container_t *ac) { bitset_container_t *ans = bitset_container_create(); - int limit = array_container_cardinality(ac); - for (int i = 0; i < limit; ++i) bitset_container_set(ans, ac->array[i]); + int limit = array_container_cardinality(ac), i; + for (i = 0; i < limit; ++i) bitset_container_set(ans, ac->array[i]); return ans; } bitset_container_t *bitset_container_from_run(const run_container_t *arr) { int card = run_container_cardinality(arr); bitset_container_t *answer = bitset_container_create(); - for (int rlepos = 0; rlepos < arr->n_runs; ++rlepos) { + int rlepos; + for (rlepos = 0; rlepos < arr->n_runs; ++rlepos) { rle16_t vl = arr->runs[rlepos]; bitset_set_lenrange(answer->words, vl.value, vl.length); } @@ -11737,11 +11799,12 @@ array_container_t *array_container_from_run(const run_container_t *arr) { array_container_t *answer = array_container_create_given_capacity(run_container_cardinality(arr)); answer->cardinality = 0; - for (int rlepos = 0; rlepos < arr->n_runs; ++rlepos) { + int rlepos; + for (rlepos = 0; rlepos < arr->n_runs; ++rlepos) { int run_start = arr->runs[rlepos].value; int run_end = run_start + arr->runs[rlepos].length; - - for (int run_value = run_start; run_value <= run_end; ++run_value) { + int run_value; + for (run_value = run_start; run_value <= run_end; ++run_value) { answer->array[answer->cardinality++] = (uint16_t)run_value; } } @@ -11771,10 +11834,10 @@ run_container_t *run_container_from_array(const array_container_t *c) { int32_t n_runs = array_container_number_of_runs(c); run_container_t *answer = run_container_create_given_capacity(n_runs); int prev = -2; - int run_start = -1; + int run_start = -1, i; int32_t card = c->cardinality; if (card == 0) return answer; - for (int i = 0; i < card; ++i) { + for (i = 0; i < card; ++i) { const uint16_t cur_val = c->array[i]; if (cur_val != prev + 1) { // new run starts; flush old one, if any @@ -11801,11 +11864,13 @@ container_t *convert_to_bitset_or_array_container( ){ if (card <= DEFAULT_MAX_SIZE) { array_container_t *answer = array_container_create_given_capacity(card); + int rlepos; answer->cardinality = 0; - for (int rlepos = 0; rlepos < rc->n_runs; ++rlepos) { + for (rlepos = 0; rlepos < rc->n_runs; ++rlepos) { uint16_t run_start = rc->runs[rlepos].value; uint16_t run_end = run_start + rc->runs[rlepos].length; - for (uint16_t run_value = run_start; run_value < run_end; + uint16_t run_value; + for (run_value = run_start; run_value < run_end; ++run_value) { answer->array[answer->cardinality++] = run_value; } @@ -11817,7 +11882,8 @@ container_t *convert_to_bitset_or_array_container( return answer; } bitset_container_t *answer = bitset_container_create(); - for (int rlepos = 0; rlepos < rc->n_runs; ++rlepos) { + int rlepos; + for (rlepos = 0; rlepos < rc->n_runs; ++rlepos) { uint16_t run_start = rc->runs[rlepos].value; bitset_set_lenrange(answer->words, run_start, rc->runs[rlepos].length); } @@ -11857,11 +11923,12 @@ container_t *convert_run_to_efficient_container( // to array array_container_t *answer = array_container_create_given_capacity(card); answer->cardinality = 0; - for (int rlepos = 0; rlepos < c->n_runs; ++rlepos) { + int rlepos; + for (rlepos = 0; rlepos < c->n_runs; ++rlepos) { int run_start = c->runs[rlepos].value; int run_end = run_start + c->runs[rlepos].length; - - for (int run_value = run_start; run_value <= run_end; ++run_value) { + int run_value; + for (run_value = run_start; run_value <= run_end; ++run_value) { answer->array[answer->cardinality++] = (uint16_t)run_value; } } @@ -11871,8 +11938,8 @@ container_t *convert_run_to_efficient_container( // else to bitset bitset_container_t *answer = bitset_container_create(); - - for (int rlepos = 0; rlepos < c->n_runs; ++rlepos) { + int rlepos; + for (rlepos = 0; rlepos < c->n_runs; ++rlepos) { int start = c->runs[rlepos].value; int end = start + c->runs[rlepos].length; bitset_set_range(answer->words, start, end + 1); @@ -11928,9 +11995,11 @@ container_t *convert_run_optimize( run_container_t *answer = run_container_create_given_capacity(n_runs); int prev = -2; int run_start = -1; + int i; assert(card > 0); - for (int i = 0; i < card; ++i) { + + for (i = 0; i < card; ++i) { uint16_t cur_val = c_qua_array->array[i]; if (cur_val != prev + 1) { // new run starts; flush old one, if any @@ -12015,7 +12084,8 @@ container_t *container_from_run_range( bitset_container_t *bitset = bitset_container_create(); *typecode_after = BITSET_CONTAINER_TYPE; int32_t union_cardinality = 0; - for (int32_t i = 0; i < run->n_runs; ++i) { + int32_t i; + for (i = 0; i < run->n_runs; ++i) { uint32_t rle_min = run->runs[i].value; uint32_t rle_max = rle_min + run->runs[i].length; bitset_set_lenrange(bitset->words, rle_min, rle_max - rle_min); @@ -12064,7 +12134,8 @@ void array_bitset_container_andnot(const array_container_t *src_1, } int32_t newcard = 0; const int32_t origcard = src_1->cardinality; - for (int i = 0; i < origcard; ++i) { + int i; + for (i = 0; i < origcard; ++i) { uint16_t key = src_1->array[i]; dst->array[newcard] = key; newcard += 1 - bitset_container_contains(src_2, key); @@ -12147,9 +12218,11 @@ bool run_bitset_container_andnot( // must be an array array_container_t *answer = array_container_create_given_capacity(card); answer->cardinality = 0; - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; + for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; - for (int run_value = rle.value; run_value <= rle.value + rle.length; + int run_value; + for (run_value = rle.value; run_value <= rle.value + rle.length; ++run_value) { if (!bitset_container_get(src_2, (uint16_t)run_value)) { answer->array[answer->cardinality++] = (uint16_t)run_value; @@ -12163,7 +12236,8 @@ bool run_bitset_container_andnot( bitset_container_t *answer = bitset_container_clone(src_2); uint32_t last_pos = 0; - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; + for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; uint32_t start = rle.value; @@ -12216,9 +12290,10 @@ bool bitset_run_container_andnot( ){ // follows Java implementation bitset_container_t *result = bitset_container_create(); - + int32_t rlepos; bitset_container_copy(src_1, result); - for (int32_t rlepos = 0; rlepos < src_2->n_runs; ++rlepos) { + + for (rlepos = 0; rlepos < src_2->n_runs; ++rlepos) { rle16_t rle = src_2->runs[rlepos]; bitset_reset_range(result->words, rle.value, rle.value + rle.length + UINT32_C(1)); @@ -12247,7 +12322,7 @@ bool bitset_run_container_iandnot( ){ *dst = src_1; - for (int32_t rlepos = 0; rlepos < src_2->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_2->n_runs; ++rlepos) { rle16_t rle = src_2->runs[rlepos]; bitset_reset_range(src_1->words, rle.value, rle.value + rle.length + UINT32_C(1)); @@ -12277,7 +12352,7 @@ static int run_array_array_subtract(const run_container_t *rc, int32_t in_array_pos = -1; // since advanceUntil always assumes we start the search AFTER this - for (int rlepos = 0; rlepos < rc->n_runs; rlepos++) { + int rlepos; for (rlepos = 0; rlepos < rc->n_runs; rlepos++) { int32_t start = rc->runs[rlepos].value; int32_t end = start + rc->runs[rlepos].length + 1; @@ -12285,17 +12360,17 @@ static int run_array_array_subtract(const run_container_t *rc, a_in->cardinality, (uint16_t)start); if (in_array_pos >= a_in->cardinality) { // run has no items subtracted - for (int32_t i = start; i < end; ++i) + int32_t i; for (i = start; i < end; ++i) a_out->array[out_card++] = (uint16_t)i; } else { uint16_t next_nonincluded = a_in->array[in_array_pos]; if (next_nonincluded >= end) { // another case when run goes unaltered - for (int32_t i = start; i < end; ++i) + int32_t i; for (i = start; i < end; ++i) a_out->array[out_card++] = (uint16_t)i; in_array_pos--; // ensure we see this item again if necessary } else { - for (int32_t i = start; i < end; ++i) + int32_t i; for (i = start; i < end; ++i) if (i != next_nonincluded) a_out->array[out_card++] = (uint16_t)i; else // 0 should ensure we don't match @@ -12440,7 +12515,7 @@ void array_run_container_andnot(const array_container_t *src_1, uint16_t val = 0; int dest_card = 0; - for (int i = 0; i < src_1->cardinality; ++i) { + int i; for (i = 0; i < src_1->cardinality; ++i) { val = src_1->array[i]; if (val < run_start) dst->array[dest_card++] = val; @@ -12581,7 +12656,7 @@ bool array_container_equal_bitset(const array_container_t* container1, } } int32_t pos = 0; - for (int32_t i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i) { + int32_t i; for (i = 0; i < BITSET_CONTAINER_SIZE_IN_WORDS; ++i) { uint64_t w = container2->words[i]; while (w != 0) { uint64_t t = w & (~w + 1); @@ -12604,7 +12679,7 @@ bool run_container_equals_array(const run_container_t* container1, if (run_container_cardinality(container1) != container2->cardinality) return false; int32_t pos = 0; - for (int i = 0; i < container1->n_runs; ++i) { + int i; for (i = 0; i < container1->n_runs; ++i) { const uint32_t run_start = container1->runs[i].value; const uint32_t le = container1->runs[i].length; @@ -12632,7 +12707,7 @@ bool run_container_equals_bitset(const run_container_t* container1, return false; } - for (int32_t i = 0; i < container1->n_runs; i++) { + int32_t i; for (i = 0; i < container1->n_runs; i++) { uint32_t begin = container1->runs[i].value; if (container1->runs[i].length) { uint32_t end = begin + container1->runs[i].length + 1; @@ -12674,7 +12749,7 @@ void array_bitset_container_intersection(const array_container_t *src_1, } int32_t newcard = 0; // dst could be src_1 const int32_t origcard = src_1->cardinality; - for (int i = 0; i < origcard; ++i) { + int i; for (i = 0; i < origcard; ++i) { uint16_t key = src_1->array[i]; // this branchless approach is much faster... dst->array[newcard] = key; @@ -12700,7 +12775,7 @@ int array_bitset_container_intersection_cardinality( const array_container_t *src_1, const bitset_container_t *src_2) { int32_t newcard = 0; const int32_t origcard = src_1->cardinality; - for (int i = 0; i < origcard; ++i) { + int i; for (i = 0; i < origcard; ++i) { uint16_t key = src_1->array[i]; newcard += bitset_container_contains(src_2, key); } @@ -12711,7 +12786,7 @@ int array_bitset_container_intersection_cardinality( bool array_bitset_container_intersect(const array_container_t *src_1, const bitset_container_t *src_2) { const int32_t origcard = src_1->cardinality; - for (int i = 0; i < origcard; ++i) { + int i; for (i = 0; i < origcard; ++i) { uint16_t key = src_1->array[i]; if(bitset_container_contains(src_2, key)) return true; } @@ -12785,10 +12860,10 @@ bool run_bitset_container_intersection( if (*dst == NULL) { return false; } - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; uint32_t endofrun = (uint32_t)rle.value + rle.length; - for (uint32_t runValue = rle.value; runValue <= endofrun; + uint32_t runValue; for (runValue = rle.value; runValue <= endofrun; ++runValue) { answer->array[answer->cardinality] = (uint16_t)runValue; answer->cardinality += @@ -12800,7 +12875,7 @@ bool run_bitset_container_intersection( if (*dst == src_2) { // we attempt in-place bitset_container_t *answer = CAST_bitset(*dst); uint32_t start = 0; - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { const rle16_t rle = src_1->runs[rlepos]; uint32_t end = rle.value; bitset_reset_range(src_2->words, start, end); @@ -12829,7 +12904,7 @@ bool run_bitset_container_intersection( return true; } uint32_t start = 0; - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { const rle16_t rle = src_1->runs[rlepos]; uint32_t end = rle.value; bitset_reset_range(answer->words, start, end); @@ -12895,7 +12970,7 @@ int run_bitset_container_intersection_cardinality( return bitset_container_cardinality(src_2); } int answer = 0; - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; answer += bitset_lenrange_cardinality(src_2->words, rle.value, rle.length); @@ -12942,7 +13017,7 @@ bool run_bitset_container_intersect(const run_container_t *src_1, if( run_container_is_full(src_1) ) { return !bitset_container_empty(src_2); } - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; if(!bitset_lenrange_empty(src_2->words, rle.value,rle.length)) return true; } @@ -13372,7 +13447,7 @@ bool array_container_is_subset_bitset(const array_container_t* container1, return false; } } - for (int i = 0; i < container1->cardinality; ++i) { + int i; for (i = 0; i < container1->cardinality; ++i) { if (!bitset_container_contains(container2, container1->array[i])) { return false; } @@ -13385,7 +13460,7 @@ bool run_container_is_subset_array(const run_container_t* container1, if (run_container_cardinality(container1) > container2->cardinality) return false; int32_t start_pos = -1, stop_pos = -1; - for (int i = 0; i < container1->n_runs; ++i) { + int i; for (i = 0; i < container1->n_runs; ++i) { int32_t start = container1->runs[i].value; int32_t stop = start + container1->runs[i].length; start_pos = advanceUntil(container2->array, stop_pos, @@ -13440,10 +13515,10 @@ bool run_container_is_subset_bitset(const run_container_t* container1, return false; } } - for (int i = 0; i < container1->n_runs; ++i) { + int i; for (i = 0; i < container1->n_runs; ++i) { uint32_t run_start = container1->runs[i].value; uint32_t le = container1->runs[i].length; - for (uint32_t j = run_start; j <= run_start + le; ++j) { + uint32_t j;for ( j = run_start; j <= run_start + le; ++j) { if (!bitset_container_contains(container2, j)) { return false; } @@ -13540,7 +13615,7 @@ void run_bitset_container_union(const run_container_t *src_1, bitset_container_t *dst) { assert(!run_container_is_full(src_1)); // catch this case upstream if (src_2 != dst) bitset_container_copy(src_2, dst); - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; bitset_set_lenrange(dst->words, rle.value, rle.length); } @@ -13552,7 +13627,7 @@ void run_bitset_container_lazy_union(const run_container_t *src_1, bitset_container_t *dst) { assert(!run_container_is_full(src_1)); // catch this case upstream if (src_2 != dst) bitset_container_copy(src_2, dst); - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; bitset_set_lenrange(dst->words, rle.value, rle.length); } @@ -13861,7 +13936,7 @@ bool run_bitset_container_xor( bitset_container_t *result = bitset_container_create(); bitset_container_copy(src_2, result); - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; bitset_flip_range(result->words, rle.value, rle.value + rle.length + UINT32_C(1)); @@ -13886,7 +13961,7 @@ void run_bitset_container_lazy_xor(const run_container_t *src_1, const bitset_container_t *src_2, bitset_container_t *dst) { if (src_2 != dst) bitset_container_copy(src_2, dst); - for (int32_t rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { + int32_t rlepos; for (rlepos = 0; rlepos < src_1->n_runs; ++rlepos) { rle16_t rle = src_1->runs[rlepos]; bitset_flip_range(dst->words, rle.value, rle.value + rle.length + UINT32_C(1)); @@ -14326,7 +14401,7 @@ void run_container_offset(const run_container_t *c, lo = run_container_create_given_capacity(lo_cap); memcpy(lo->runs, c->runs, lo_cap*sizeof(rle16_t)); lo->n_runs = lo_cap; - for (int i = 0; i < lo_cap; ++i) { + int i; for (i = 0; i < lo_cap; ++i) { lo->runs[i].value += offset; } *loc = (container_t*)lo; @@ -14336,7 +14411,7 @@ void run_container_offset(const run_container_t *c, hi = run_container_create_given_capacity(hi_cap); memcpy(hi->runs, c->runs+pivot, hi_cap*sizeof(rle16_t)); hi->n_runs = hi_cap; - for (int i = 0; i < hi_cap; ++i) { + int i; for (i = 0; i < hi_cap; ++i) { hi->runs[i].value += offset; } *hic = (container_t*)hi; @@ -14816,10 +14891,10 @@ int run_container_to_uint32_array(void *vout, const run_container_t *cont, uint32_t base) { int outpos = 0; uint32_t *out = (uint32_t *)vout; - for (int i = 0; i < cont->n_runs; ++i) { + int i; for (i = 0; i < cont->n_runs; ++i) { uint32_t run_start = base + cont->runs[i].value; uint16_t le = cont->runs[i].length; - for (int j = 0; j <= le; ++j) { + int j;for (j = 0; j <= le; ++j) { uint32_t val = run_start + j; memcpy(out + outpos, &val, sizeof(uint32_t)); // should be compiled as a MOV on x64 @@ -14833,7 +14908,7 @@ int run_container_to_uint32_array(void *vout, const run_container_t *cont, * Print this container using printf (useful for debugging). */ void run_container_printf(const run_container_t *cont) { - for (int i = 0; i < cont->n_runs; ++i) { + int i; for (i = 0; i < cont->n_runs; ++i) { uint16_t run_start = cont->runs[i].value; uint16_t le = cont->runs[i].length; printf("[%d,%d]", run_start, run_start + le); @@ -14851,12 +14926,12 @@ void run_container_printf_as_uint32_array(const run_container_t *cont, uint32_t run_start = base + cont->runs[0].value; uint16_t le = cont->runs[0].length; printf("%u", run_start); - for (uint32_t j = 1; j <= le; ++j) printf(",%u", run_start + j); + uint32_t j;for ( j = 1; j <= le; ++j) printf(",%u", run_start + j); } - for (int32_t i = 1; i < cont->n_runs; ++i) { + int32_t i; for (i = 1; i < cont->n_runs; ++i) { uint32_t run_start = base + cont->runs[i].value; uint16_t le = cont->runs[i].length; - for (uint32_t j = 0; j <= le; ++j) printf(",%u", run_start + j); + uint32_t j;for ( j = 0; j <= le; ++j) printf(",%u", run_start + j); } } @@ -14885,11 +14960,11 @@ int32_t run_container_read(int32_t cardinality, run_container_t *container, bool run_container_iterate(const run_container_t *cont, uint32_t base, roaring_iterator iterator, void *ptr) { - for (int i = 0; i < cont->n_runs; ++i) { + int i; for (i = 0; i < cont->n_runs; ++i) { uint32_t run_start = base + cont->runs[i].value; uint16_t le = cont->runs[i].length; - for (int j = 0; j <= le; ++j) + int j;for (j = 0; j <= le; ++j) if (!iterator(run_start + j, ptr)) return false; } return true; @@ -14898,11 +14973,11 @@ bool run_container_iterate(const run_container_t *cont, uint32_t base, bool run_container_iterate64(const run_container_t *cont, uint32_t base, roaring_iterator64 iterator, uint64_t high_bits, void *ptr) { - for (int i = 0; i < cont->n_runs; ++i) { + int i; for (i = 0; i < cont->n_runs; ++i) { uint32_t run_start = base + cont->runs[i].value; uint16_t le = cont->runs[i].length; - for (int j = 0; j <= le; ++j) + int j;for (j = 0; j <= le; ++j) if (!iterator(high_bits | (uint64_t)(run_start + j), ptr)) return false; } @@ -14988,7 +15063,7 @@ void run_container_smart_append_exclusive(run_container_t *src, bool run_container_select(const run_container_t *container, uint32_t *start_rank, uint32_t rank, uint32_t *element) { - for (int i = 0; i < container->n_runs; i++) { + int i; for (i = 0; i < container->n_runs; i++) { uint16_t length = container->runs[i].length; if (rank <= *start_rank + length) { uint16_t value = container->runs[i].value; @@ -15003,7 +15078,7 @@ bool run_container_select(const run_container_t *container, int run_container_rank(const run_container_t *container, uint16_t x) { int sum = 0; uint32_t x32 = x; - for (int i = 0; i < container->n_runs; i++) { + int i; for (i = 0; i < container->n_runs; i++) { uint32_t startpoint = container->runs[i].value; uint32_t length = container->runs[i].length; uint32_t endpoint = length + startpoint; @@ -15082,7 +15157,7 @@ int run_container_cardinality(const run_container_t *run) { /* by initializing with n_runs, we omit counting the +1 for each pair. */ int sum = n_runs; - for (int k = 0; k < n_runs; ++k) { + int k; for ( k = 0; k < n_runs; ++k) { sum += runs[k].length; } @@ -15352,7 +15427,7 @@ roaring_bitmap_t *roaring_bitmap_of(size_t n_args, ...) { memset(&context, 0, sizeof(context)); va_start(ap, n_args); - for (size_t i = 0; i < n_args; i++) { + size_t i; for ( i = 0; i < n_args; i++) { uint32_t val = va_arg(ap, uint32_t); roaring_bitmap_add_bulk(answer, &context, val); } @@ -15377,7 +15452,7 @@ roaring_bitmap_t *roaring_bitmap_from_range(uint64_t min, uint64_t max, if (max <= min) return NULL; roaring_bitmap_t *answer = roaring_bitmap_create(); if (step >= (1 << 16)) { - for (uint32_t value = (uint32_t)min; value < max; value += step) { + uint32_t value; for ( value = (uint32_t)min; value < max; value += step) { roaring_bitmap_add(answer, value); } return answer; @@ -15421,7 +15496,7 @@ void roaring_bitmap_add_range_closed(roaring_bitmap_t *r, uint32_t min, uint32_t int32_t src = prefix_length + common_length - 1; int32_t dst = ra->size - suffix_length - 1; - for (uint32_t key = max_key; key != min_key-1; key--) { // beware of min_key==0 + uint32_t key; for ( key = max_key; key != min_key-1; key--) { // beware of min_key==0 uint32_t container_min = (min_key == key) ? (min & 0xffff) : 0; uint32_t container_max = (max_key == key) ? (max & 0xffff) : 0xffff; container_t* new_container; @@ -15493,7 +15568,7 @@ void roaring_bitmap_printf(const roaring_bitmap_t *r) { const roaring_array_t *ra = &r->high_low_container; printf("{"); - for (int i = 0; i < ra->size; ++i) { + int i; for (i = 0; i < ra->size; ++i) { container_printf_as_uint32_array(ra->containers[i], ra->typecodes[i], ((uint32_t)ra->keys[i]) << 16); @@ -15508,7 +15583,7 @@ void roaring_bitmap_printf_describe(const roaring_bitmap_t *r) { const roaring_array_t *ra = &r->high_low_container; printf("{"); - for (int i = 0; i < ra->size; ++i) { + int i; for (i = 0; i < ra->size; ++i) { printf("%d: %s (%d)", ra->keys[i], get_full_container_name(ra->containers[i], ra->typecodes[i]), container_get_cardinality(ra->containers[i], ra->typecodes[i])); @@ -15559,7 +15634,7 @@ void roaring_bitmap_statistics(const roaring_bitmap_t *r, stat->max_value = mms.max; stat->sum_value = mms.sum; - for (int i = 0; i < ra->size; ++i) { + int i; for (i = 0; i < ra->size; ++i) { uint8_t truetype = get_container_type(ra->containers[i], ra->typecodes[i]); uint32_t card = @@ -15765,7 +15840,7 @@ void roaring_bitmap_remove_many(roaring_bitmap_t *r, size_t n_args, return; } int32_t pos = -1; // position of the container used in the previous iteration - for (size_t i = 0; i < n_args; i++) { + size_t i; for ( i = 0; i < n_args; i++) { uint16_t key = (uint16_t)(vals[i] >> 16); if (pos < 0 || key != r->high_low_container.keys[pos]) { pos = ra_get_index(&r->high_low_container, key); @@ -15846,7 +15921,7 @@ roaring_bitmap_t *roaring_bitmap_or_many(size_t number, } roaring_bitmap_t *answer = roaring_bitmap_lazy_or(x[0], x[1], LAZY_OR_BITSET_CONVERSION); - for (size_t i = 2; i < number; i++) { + size_t i; for ( i = 2; i < number; i++) { roaring_bitmap_lazy_or_inplace(answer, x[i], LAZY_OR_BITSET_CONVERSION); } roaring_bitmap_repair_after_lazy(answer); @@ -15865,7 +15940,7 @@ roaring_bitmap_t *roaring_bitmap_xor_many(size_t number, return roaring_bitmap_copy(x[0]); } roaring_bitmap_t *answer = roaring_bitmap_lazy_xor(x[0], x[1]); - for (size_t i = 2; i < number; i++) { + size_t i; for ( i = 2; i < number; i++) { roaring_bitmap_lazy_xor_inplace(answer, x[i]); } roaring_bitmap_repair_after_lazy(answer); @@ -16420,7 +16495,7 @@ uint64_t roaring_bitmap_get_cardinality(const roaring_bitmap_t *r) { const roaring_array_t *ra = &r->high_low_container; uint64_t card = 0; - for (int i = 0; i < ra->size; ++i) + int i; for (i = 0; i < ra->size; ++i) card += container_get_cardinality(ra->containers[i], ra->typecodes[i]); return card; } @@ -16501,7 +16576,7 @@ bool roaring_bitmap_range_uint32_array(const roaring_bitmap_t *r, */ bool roaring_bitmap_run_optimize(roaring_bitmap_t *r) { bool answer = false; - for (int i = 0; i < r->high_low_container.size; i++) { + int i; for (i = 0; i < r->high_low_container.size; i++) { uint8_t type_original, type_after; ra_unshare_container_at_index( &r->high_low_container, i); // TODO: this introduces extra cloning! @@ -16518,7 +16593,7 @@ bool roaring_bitmap_run_optimize(roaring_bitmap_t *r) { size_t roaring_bitmap_shrink_to_fit(roaring_bitmap_t *r) { size_t answer = 0; - for (int i = 0; i < r->high_low_container.size; i++) { + int i; for (i = 0; i < r->high_low_container.size; i++) { uint8_t type_original; container_t *c = ra_get_container_at_index(&r->high_low_container, i, &type_original); @@ -16534,7 +16609,7 @@ size_t roaring_bitmap_shrink_to_fit(roaring_bitmap_t *r) { */ bool roaring_bitmap_remove_run_compression(roaring_bitmap_t *r) { bool answer = false; - for (int i = 0; i < r->high_low_container.size; i++) { + int i; for (i = 0; i < r->high_low_container.size; i++) { uint8_t type_original, type_after; container_t *c = ra_get_container_at_index(&r->high_low_container, i, &type_original); @@ -16637,7 +16712,7 @@ roaring_bitmap_t *roaring_bitmap_deserialize(const void *buf) { roaring_bulk_context_t context; memset(&context, 0, sizeof(context)); - for (uint32_t i = 0; i < card; i++) { + uint32_t i; for ( i = 0; i < card; i++) { // elems may not be aligned, read with memcpy uint32_t elem; memcpy(&elem, elems + i, sizeof(elem)); @@ -16654,7 +16729,7 @@ bool roaring_iterate(const roaring_bitmap_t *r, roaring_iterator iterator, void *ptr) { const roaring_array_t *ra = &r->high_low_container; - for (int i = 0; i < ra->size; ++i) + int i; for (i = 0; i < ra->size; ++i) if (!container_iterate(ra->containers[i], ra->typecodes[i], ((uint32_t)ra->keys[i]) << 16, iterator, ptr)) { @@ -16667,7 +16742,7 @@ bool roaring_iterate64(const roaring_bitmap_t *r, roaring_iterator64 iterator, uint64_t high_bits, void *ptr) { const roaring_array_t *ra = &r->high_low_container; - for (int i = 0; i < ra->size; ++i) + int i; for (i = 0; i < ra->size; ++i) if (!container_iterate64( ra->containers[i], ra->typecodes[i], ((uint32_t)ra->keys[i]) << 16, iterator, @@ -17045,7 +17120,7 @@ uint32_t roaring_read_uint32_iterator(roaring_uint32_iterator_t *it, uint32_t* b case ARRAY_CONTAINER_TYPE: acont = const_CAST_array(it->container); num_values = minimum_uint32(acont->cardinality - it->in_container_index, count - ret); - for (uint32_t i = 0; i < num_values; i++) { + uint32_t i; for ( i = 0; i < num_values; i++) { buf[i] = it->highbits | acont->array[it->in_container_index + i]; } buf += num_values; @@ -17062,7 +17137,7 @@ uint32_t roaring_read_uint32_iterator(roaring_uint32_iterator_t *it, uint32_t* b do { uint32_t largest_run_value = it->highbits | (rcont->runs[it->run_index].value + rcont->runs[it->run_index].length); num_values = minimum_uint32(largest_run_value - it->current_value + 1, count - ret); - for (uint32_t i = 0; i < num_values; i++) { + uint32_t i; for ( i = 0; i < num_values; i++) { buf[i] = it->current_value + i; } it->current_value += num_values; // this can overflow to zero: UINT32_MAX+1=0 @@ -17108,12 +17183,12 @@ bool roaring_bitmap_equals(const roaring_bitmap_t *r1, if (ra1->size != ra2->size) { return false; } - for (int i = 0; i < ra1->size; ++i) { + int i; for (i = 0; i < ra1->size; ++i) { if (ra1->keys[i] != ra2->keys[i]) { return false; } } - for (int i = 0; i < ra1->size; ++i) { + for (i = 0; i < ra1->size; ++i) { bool areequal = container_equals(ra1->containers[i], ra1->typecodes[i], ra2->containers[i], @@ -17299,7 +17374,7 @@ roaring_bitmap_t *roaring_bitmap_flip(const roaring_bitmap_t *x1, if (lb_end != 0xFFFF) --hb_end; // later we'll handle the partial block - for (uint32_t hb = hb_start; hb <= hb_end; ++hb) { + uint32_t hb; for ( hb = hb_start; hb <= hb_end; ++hb) { insert_fully_flipped_container(&ans->high_low_container, &x1->high_low_container, hb); } @@ -17345,7 +17420,7 @@ void roaring_bitmap_flip_inplace(roaring_bitmap_t *x1, uint64_t range_start, if (lb_end != 0xFFFF) --hb_end; - for (uint32_t hb = hb_start; hb <= hb_end; ++hb) { + uint32_t hb; for ( hb = hb_start; hb <= hb_end; ++hb) { inplace_fully_flip_container(&x1->high_low_container, hb); } // handle a partial final container @@ -17414,7 +17489,7 @@ roaring_bitmap_t *roaring_bitmap_add_offset(const roaring_bitmap_t *bm, if (in_offset == 0) { ans_ra = &answer->high_low_container; - for (int i = 0, j = 0; i < length; ++i) { + int i, j; for (i = 0, j = 0; i < length; ++i) { int64_t key = ra_get_key_at_index(bm_ra, i); key += container_offset; @@ -17434,7 +17509,7 @@ roaring_bitmap_t *roaring_bitmap_add_offset(const roaring_bitmap_t *bm, container_t *lo, *hi, **lo_ptr, **hi_ptr; int64_t k; - for (int i = 0; i < length; ++i) { + int i; for (i = 0; i < length; ++i) { lo = hi = NULL; lo_ptr = hi_ptr = NULL; @@ -17807,7 +17882,7 @@ void roaring_bitmap_lazy_xor_inplace(roaring_bitmap_t *x1, void roaring_bitmap_repair_after_lazy(roaring_bitmap_t *r) { roaring_array_t *ra = &r->high_low_container; - for (int i = 0; i < ra->size; ++i) { + int i; for (i = 0; i < ra->size; ++i) { const uint8_t old_type = ra->typecodes[i]; container_t *old_c = ra->containers[i]; uint8_t new_type = old_type; @@ -17826,7 +17901,7 @@ void roaring_bitmap_repair_after_lazy(roaring_bitmap_t *r) { uint64_t roaring_bitmap_rank(const roaring_bitmap_t *bm, uint32_t x) { uint64_t size = 0; uint32_t xhigh = x >> 16; - for (int i = 0; i < bm->high_low_container.size; i++) { + int i; for (i = 0; i < bm->high_low_container.size; i++) { uint32_t key = bm->high_low_container.keys[i]; if (xhigh > key) { size += @@ -18065,7 +18140,7 @@ bool roaring_bitmap_contains_range(const roaring_bitmap_t *r, uint64_t range_sta if (!container_contains_range(c, 0, lb_re, type)) { return false; } - for (int32_t i = is + 1; i < ie; ++i) { + int32_t i; for (i = is + 1; i < ie; ++i) { c = ra_get_container_at_index(&r->high_low_container, i, &type); if (!container_is_full(c, type) ) { return false; @@ -18115,7 +18190,7 @@ bool roaring_bitmap_is_strict_subset(const roaring_bitmap_t *r1, size_t roaring_bitmap_frozen_size_in_bytes(const roaring_bitmap_t *rb) { const roaring_array_t *ra = &rb->high_low_container; size_t num_bytes = 0; - for (int32_t i = 0; i < ra->size; i++) { + int32_t i; for (i = 0; i < ra->size; i++) { switch (ra->typecodes[i]) { case BITSET_CONTAINER_TYPE: { num_bytes += BITSET_CONTAINER_SIZE_IN_WORDS * sizeof(uint64_t); @@ -18158,7 +18233,7 @@ void roaring_bitmap_frozen_serialize(const roaring_bitmap_t *rb, char *buf) { size_t bitset_zone_size = 0; size_t run_zone_size = 0; size_t array_zone_size = 0; - for (int32_t i = 0; i < ra->size; i++) { + int32_t i; for (i = 0; i < ra->size; i++) { switch (ra->typecodes[i]) { case BITSET_CONTAINER_TYPE: { bitset_zone_size += @@ -18189,7 +18264,7 @@ void roaring_bitmap_frozen_serialize(const roaring_bitmap_t *rb, char *buf) { uint8_t *typecode_zone = (uint8_t *)arena_alloc(&buf, ra->size); uint32_t *header_zone = (uint32_t *)arena_alloc(&buf, 4); - for (int32_t i = 0; i < ra->size; i++) { + for (i = 0; i < ra->size; i++) { uint16_t count; switch (ra->typecodes[i]) { case BITSET_CONTAINER_TYPE: { @@ -18265,7 +18340,7 @@ roaring_bitmap_frozen_view(const char *buf, size_t length) { size_t bitset_zone_size = 0; size_t run_zone_size = 0; size_t array_zone_size = 0; - for (int32_t i = 0; i < num_containers; i++) { + int32_t i; for (i = 0; i < num_containers; i++) { switch (typecodes[i]) { case BITSET_CONTAINER_TYPE: num_bitset_containers++; @@ -18321,7 +18396,7 @@ roaring_bitmap_frozen_view(const char *buf, size_t length) { assert(rb == (roaring_bitmap_t *)((char *)rb->high_low_container.containers - sizeof(roaring_bitmap_t))); - for (int32_t i = 0; i < num_containers; i++) { + for (i = 0; i < num_containers; i++) { switch (typecodes[i]) { case BITSET_CONTAINER_TYPE: { bitset_container_t *bitset = (bitset_container_t *) @@ -18402,7 +18477,7 @@ roaring_bitmap_t *roaring_bitmap_portable_deserialize_frozen(const char *buf) { int32_t num_run_containers = 0; int32_t num_array_containers = 0; - for (int32_t i = 0; i < num_containers; i++) { + int32_t i; for (i = 0; i < num_containers; i++) { uint16_t tmp; memcpy(&tmp, descriptive_headers + 2*i+1, sizeof(tmp)); uint32_t cardinality = tmp + 1; @@ -18454,7 +18529,7 @@ roaring_bitmap_t *roaring_bitmap_portable_deserialize_frozen(const char *buf) { rb->high_low_container.keys = keys; rb->high_low_container.typecodes = typecodes; - for (int32_t i = 0; i < num_containers; i++) { + for (i = 0; i < num_containers; i++) { uint16_t tmp; memcpy(&tmp, descriptive_headers + 2*i+1, sizeof(tmp)); int32_t cardinality = tmp + 1; @@ -18647,7 +18722,7 @@ bool ra_overwrite(const roaring_array_t *source, roaring_array_t *dest, memcpy(dest->keys, source->keys, dest->size * sizeof(uint16_t)); // we go through the containers, turning them into shared containers... if (copy_on_write) { - for (int32_t i = 0; i < dest->size; ++i) { + int32_t i; for (i = 0; i < dest->size; ++i) { source->containers[i] = get_copy_of_container( source->containers[i], &source->typecodes[i], copy_on_write); } @@ -18659,11 +18734,11 @@ bool ra_overwrite(const roaring_array_t *source, roaring_array_t *dest, } else { memcpy(dest->typecodes, source->typecodes, dest->size * sizeof(uint8_t)); - for (int32_t i = 0; i < dest->size; i++) { + int32_t i; for (i = 0; i < dest->size; i++) { dest->containers[i] = container_clone(source->containers[i], source->typecodes[i]); if (dest->containers[i] == NULL) { - for (int32_t j = 0; j < i; j++) { + int32_t j; for ( j = 0; j < i; j++) { container_free(dest->containers[j], dest->typecodes[j]); } ra_clear_without_containers(dest); @@ -18675,7 +18750,7 @@ bool ra_overwrite(const roaring_array_t *source, roaring_array_t *dest, } void ra_clear_containers(roaring_array_t *ra) { - for (int32_t i = 0; i < ra->size; ++i) { + int32_t i; for (i = 0; i < ra->size; ++i) { container_free(ra->containers[i], ra->typecodes[i]); } } @@ -18752,7 +18827,7 @@ void ra_append_copy(roaring_array_t *ra, const roaring_array_t *sa, void ra_append_copies_until(roaring_array_t *ra, const roaring_array_t *sa, uint16_t stopping_key, bool copy_on_write) { - for (int32_t i = 0; i < sa->size; ++i) { + int32_t i; for (i = 0; i < sa->size; ++i) { if (sa->keys[i] >= stopping_key) break; ra_append_copy(ra, sa, i, copy_on_write); } @@ -18762,7 +18837,7 @@ void ra_append_copy_range(roaring_array_t *ra, const roaring_array_t *sa, int32_t start_index, int32_t end_index, bool copy_on_write) { extend_array(ra, end_index - start_index); - for (int32_t i = start_index; i < end_index; ++i) { + int32_t i; for (i = start_index; i < end_index; ++i) { const int32_t pos = ra->size; ra->keys[pos] = sa->keys[i]; if (copy_on_write) { @@ -18793,7 +18868,7 @@ void ra_append_move_range(roaring_array_t *ra, roaring_array_t *sa, int32_t start_index, int32_t end_index) { extend_array(ra, end_index - start_index); - for (int32_t i = start_index; i < end_index; ++i) { + int32_t i; for (i = start_index; i < end_index; ++i) { const int32_t pos = ra->size; ra->keys[pos] = sa->keys[i]; @@ -18808,7 +18883,7 @@ void ra_append_range(roaring_array_t *ra, roaring_array_t *sa, bool copy_on_write) { extend_array(ra, end_index - start_index); - for (int32_t i = start_index; i < end_index; ++i) { + int32_t i; for (i = start_index; i < end_index; ++i) { const int32_t pos = ra->size; ra->keys[pos] = sa->keys[i]; if (copy_on_write) { @@ -18939,7 +19014,7 @@ void ra_shift_tail(roaring_array_t *ra, int32_t count, int32_t distance) { void ra_to_uint32_array(const roaring_array_t *ra, uint32_t *ans) { size_t ctr = 0; - for (int32_t i = 0; i < ra->size; ++i) { + int32_t i; for (i = 0; i < ra->size; ++i) { int num_added = container_to_uint32_array( ans + ctr, ra->containers[i], ra->typecodes[i], ((uint32_t)ra->keys[i]) << 16); @@ -18959,7 +19034,7 @@ bool ra_range_uint32_array(const roaring_array_t *ra, size_t offset, size_t limi uint32_t *t_ans = NULL; size_t cur_len = 0; - for (int i = 0; i < ra->size; ++i) { + int i; for (i = 0; i < ra->size; ++i) { const container_t *c = container_unwrap_shared( ra->containers[i], &ra->typecodes[i]); @@ -19031,7 +19106,7 @@ bool ra_range_uint32_array(const roaring_array_t *ra, size_t offset, size_t limi } bool ra_has_run_container(const roaring_array_t *ra) { - for (int32_t k = 0; k < ra->size; ++k) { + int32_t k; for ( k = 0; k < ra->size; ++k) { if (get_container_type(ra->containers[k], ra->typecodes[k]) == RUN_CONTAINER_TYPE) return true; @@ -19055,7 +19130,7 @@ uint32_t ra_portable_header_size(const roaring_array_t *ra) { size_t ra_portable_size_in_bytes(const roaring_array_t *ra) { size_t count = ra_portable_header_size(ra); - for (int32_t k = 0; k < ra->size; ++k) { + int32_t k; for ( k = 0; k < ra->size; ++k) { count += container_size_in_bytes(ra->containers[k], ra->typecodes[k]); } return count; @@ -19073,7 +19148,7 @@ size_t ra_portable_serialize(const roaring_array_t *ra, char *buf) { uint32_t s = (ra->size + 7) / 8; uint8_t *bitmapOfRunContainers = (uint8_t *)roaring_calloc(s, 1); assert(bitmapOfRunContainers != NULL); // todo: handle - for (int32_t i = 0; i < ra->size; ++i) { + int32_t i; for (i = 0; i < ra->size; ++i) { if (get_container_type(ra->containers[i], ra->typecodes[i]) == RUN_CONTAINER_TYPE) { bitmapOfRunContainers[i / 8] |= (1 << (i % 8)); @@ -19097,7 +19172,7 @@ size_t ra_portable_serialize(const roaring_array_t *ra, char *buf) { startOffset = 4 + 4 + 4 * ra->size + 4 * ra->size; } - for (int32_t k = 0; k < ra->size; ++k) { + int32_t k; for ( k = 0; k < ra->size; ++k) { memcpy(buf, &ra->keys[k], sizeof(ra->keys[k])); buf += sizeof(ra->keys[k]); // get_cardinality returns a value in [1,1<<16], subtracting one @@ -19109,7 +19184,7 @@ size_t ra_portable_serialize(const roaring_array_t *ra, char *buf) { } if ((!hasrun) || (ra->size >= NO_OFFSET_THRESHOLD)) { // writing the containers offsets - for (int32_t k = 0; k < ra->size; k++) { + int32_t k; for ( k = 0; k < ra->size; k++) { memcpy(buf, &startOffset, sizeof(startOffset)); buf += sizeof(startOffset); startOffset = @@ -19117,7 +19192,7 @@ size_t ra_portable_serialize(const roaring_array_t *ra, char *buf) { container_size_in_bytes(ra->containers[k], ra->typecodes[k]); } } - for (int32_t k = 0; k < ra->size; ++k) { + for ( k = 0; k < ra->size; ++k) { buf += container_write(ra->containers[k], ra->typecodes[k], buf); } return buf - initbuf; @@ -19173,7 +19248,7 @@ size_t ra_portable_deserialize_size(const char *buf, const size_t maxbytes) { buf += size * 4; } // Reading the containers - for (int32_t k = 0; k < size; ++k) { + int32_t k; for ( k = 0; k < size; ++k) { uint16_t tmp; memcpy(&tmp, keyscards + 2*k+1, sizeof(tmp)); uint32_t thiscard = tmp + 1; @@ -19280,7 +19355,7 @@ bool ra_portable_deserialize(roaring_array_t *answer, const char *buf, const siz return false; } - for (int32_t k = 0; k < size; ++k) { + int32_t k; for ( k = 0; k < size; ++k) { uint16_t tmp; memcpy(&tmp, keyscards + 2*k, sizeof(tmp)); answer->keys[k] = tmp; @@ -19297,7 +19372,7 @@ bool ra_portable_deserialize(roaring_array_t *answer, const char *buf, const siz buf += size * 4; } // Reading the containers - for (int32_t k = 0; k < size; ++k) { + for ( k = 0; k < size; ++k) { uint16_t tmp; memcpy(&tmp, keyscards + 2*k+1, sizeof(tmp)); uint32_t thiscard = tmp + 1; @@ -19461,14 +19536,17 @@ static roaring_pq_t *create_pq(const roaring_bitmap_t **arr, uint32_t length) { roaring_pq_t *answer = (roaring_pq_t *)roaring_malloc(alloc_size); answer->elements = (roaring_pq_element_t *)(answer + 1); answer->size = length; - for (uint32_t i = 0; i < length; i++) { + uint32_t i; for ( i = 0; i < length; i++) { answer->elements[i].bitmap = (roaring_bitmap_t *)arr[i]; answer->elements[i].is_temporary = false; answer->elements[i].size = roaring_bitmap_portable_size_in_bytes(arr[i]); } - for (int32_t i = (length >> 1); i >= 0; i--) { + { + int i; + for (i = (length >> 1); i >= 0; i--) { percolate_down(answer, i); + } } return answer; } |