11// !!! DO NOT EDIT - THIS IS AN AUTO-GENERATED FILE !!!
2- // Created by amalgamation.sh on 2025-07-28T20:50:27Z
2+ // Created by amalgamation.sh on 2025-09-08T13:52:04Z
33
44/*
55 * The CRoaring project is under a dual license (Apache/MIT).
@@ -1401,7 +1401,7 @@ void array_container_free(array_container_t *array);
14011401array_container_t *array_container_clone(const array_container_t *src);
14021402
14031403/* Get the cardinality of `array'. */
1404- ALLOW_UNALIGNED
1404+ CROARING_ALLOW_UNALIGNED
14051405static inline int array_container_cardinality(const array_container_t *array) {
14061406 return array->cardinality;
14071407}
@@ -1539,7 +1539,7 @@ int32_t array_container_read(int32_t cardinality, array_container_t *container,
15391539 * that the cardinality of the container is already known.
15401540 *
15411541 */
1542- ALLOW_UNALIGNED
1542+ CROARING_ALLOW_UNALIGNED
15431543static inline int32_t array_container_size_in_bytes(
15441544 const array_container_t *container) {
15451545 return container->cardinality * sizeof(uint16_t);
@@ -1548,7 +1548,7 @@ static inline int32_t array_container_size_in_bytes(
15481548/**
15491549 * Return true if the two arrays have the same content.
15501550 */
1551- ALLOW_UNALIGNED
1551+ CROARING_ALLOW_UNALIGNED
15521552static inline bool array_container_equals(const array_container_t *container1,
15531553 const array_container_t *container2) {
15541554 if (container1->cardinality != container2->cardinality) {
@@ -2083,7 +2083,7 @@ static inline bool bitset_container_contains_range(
20832083}
20842084
20852085/* Get the number of bits set */
2086- ALLOW_UNALIGNED
2086+ CROARING_ALLOW_UNALIGNED
20872087static inline int bitset_container_cardinality(
20882088 const bitset_container_t *bitset) {
20892089 return bitset->cardinality;
@@ -2841,7 +2841,7 @@ int32_t run_container_read(int32_t cardinality, run_container_t *container,
28412841 * Return the serialized size in bytes of a container (see run_container_write).
28422842 * This is meant to be compatible with the Java and Go versions of Roaring.
28432843 */
2844- ALLOW_UNALIGNED
2844+ CROARING_ALLOW_UNALIGNED
28452845static inline int32_t run_container_size_in_bytes(
28462846 const run_container_t *container) {
28472847 return run_container_serialized_size_in_bytes(container->n_runs);
@@ -2850,7 +2850,7 @@ static inline int32_t run_container_size_in_bytes(
28502850/**
28512851 * Return true if the two containers have the same content.
28522852 */
2853- ALLOW_UNALIGNED
2853+ CROARING_ALLOW_UNALIGNED
28542854static inline bool run_container_equals(const run_container_t *container1,
28552855 const run_container_t *container2) {
28562856 if (container1->n_runs != container2->n_runs) {
@@ -7438,7 +7438,7 @@ int32_t intersect_vector16(const uint16_t *__restrict__ A, size_t s_a,
74387438 return (int32_t)count;
74397439}
74407440
7441- ALLOW_UNALIGNED
7441+ CROARING_ALLOW_UNALIGNED
74427442int array_container_to_uint32_array_vector16(void *vout, const uint16_t *array,
74437443 size_t cardinality,
74447444 uint32_t base) {
@@ -9115,7 +9115,7 @@ bool memequals(const void *s1, const void *s2, size_t n) {
91159115#if CROARING_IS_X64
91169116#if CROARING_COMPILER_SUPPORTS_AVX512
91179117CROARING_TARGET_AVX512
9118- ALLOW_UNALIGNED
9118+ CROARING_ALLOW_UNALIGNED
91199119int avx512_array_container_to_uint32_array(void *vout, const uint16_t *array,
91209120 size_t cardinality, uint32_t base) {
91219121 int outpos = 0;
@@ -13272,7 +13272,7 @@ array_container_t *array_container_create_range(uint32_t min, uint32_t max) {
1327213272}
1327313273
1327413274/* Duplicate container */
13275- ALLOW_UNALIGNED
13275+ CROARING_ALLOW_UNALIGNED
1327613276array_container_t *array_container_clone(const array_container_t *src) {
1327713277 array_container_t *newcontainer =
1327813278 array_container_create_given_capacity(src->capacity);
@@ -13582,7 +13582,7 @@ void array_container_intersection_inplace(array_container_t *src_1,
1358213582 }
1358313583}
1358413584
13585- ALLOW_UNALIGNED
13585+ CROARING_ALLOW_UNALIGNED
1358613586int array_container_to_uint32_array(void *vout, const array_container_t *cont,
1358713587 uint32_t base) {
1358813588#if CROARING_IS_X64
@@ -13884,7 +13884,7 @@ void bitset_container_free(bitset_container_t *bitset) {
1388413884}
1388513885
1388613886/* duplicate container. */
13887- ALLOW_UNALIGNED
13887+ CROARING_ALLOW_UNALIGNED
1388813888bitset_container_t *bitset_container_clone(const bitset_container_t *src) {
1388913889 bitset_container_t *bitset =
1389013890 (bitset_container_t *)roaring_malloc(sizeof(bitset_container_t));
@@ -14679,7 +14679,7 @@ CROARING_BITSET_CONTAINER_FN(andnot, &~, _mm256_andnot_si256, vbicq_u64)
1467914679// clang-format On
1468014680
1468114681
14682- ALLOW_UNALIGNED
14682+ CROARING_ALLOW_UNALIGNED
1468314683int bitset_container_to_uint32_array(
1468414684 uint32_t *out,
1468514685 const bitset_container_t *bc,
@@ -14842,7 +14842,7 @@ bool bitset_container_iterate64(const bitset_container_t *cont, uint32_t base, r
1484214842#if CROARING_IS_X64
1484314843#if CROARING_COMPILER_SUPPORTS_AVX512
1484414844CROARING_TARGET_AVX512
14845- ALLOW_UNALIGNED
14845+ CROARING_ALLOW_UNALIGNED
1484614846static inline bool _avx512_bitset_container_equals(const bitset_container_t *container1, const bitset_container_t *container2) {
1484714847 const __m512i *ptr1 = (const __m512i*)container1->words;
1484814848 const __m512i *ptr2 = (const __m512i*)container2->words;
@@ -14859,7 +14859,7 @@ static inline bool _avx512_bitset_container_equals(const bitset_container_t *con
1485914859CROARING_UNTARGET_AVX512
1486014860#endif // CROARING_COMPILER_SUPPORTS_AVX512
1486114861CROARING_TARGET_AVX2
14862- ALLOW_UNALIGNED
14862+ CROARING_ALLOW_UNALIGNED
1486314863static inline bool _avx2_bitset_container_equals(const bitset_container_t *container1, const bitset_container_t *container2) {
1486414864 const __m256i *ptr1 = (const __m256i*)container1->words;
1486514865 const __m256i *ptr2 = (const __m256i*)container2->words;
@@ -14876,7 +14876,7 @@ static inline bool _avx2_bitset_container_equals(const bitset_container_t *conta
1487614876CROARING_UNTARGET_AVX2
1487714877#endif // CROARING_IS_X64
1487814878
14879- ALLOW_UNALIGNED
14879+ CROARING_ALLOW_UNALIGNED
1488014880bool bitset_container_equals(const bitset_container_t *container1, const bitset_container_t *container2) {
1488114881 if((container1->cardinality != BITSET_UNKNOWN_CARDINALITY) && (container2->cardinality != BITSET_UNKNOWN_CARDINALITY)) {
1488214882 if(container1->cardinality != container2->cardinality) {
@@ -18442,7 +18442,7 @@ run_container_t *run_container_create(void) {
1844218442 return run_container_create_given_capacity(RUN_DEFAULT_INIT_SIZE);
1844318443}
1844418444
18445- ALLOW_UNALIGNED
18445+ CROARING_ALLOW_UNALIGNED
1844618446run_container_t *run_container_clone(const run_container_t *src) {
1844718447 run_container_t *run = run_container_create_given_capacity(src->capacity);
1844818448 if (run == NULL) return NULL;
@@ -19254,7 +19254,7 @@ int run_container_get_index(const run_container_t *container, uint16_t x) {
1925419254#if defined(CROARING_IS_X64) && CROARING_COMPILER_SUPPORTS_AVX512
1925519255
1925619256CROARING_TARGET_AVX512
19257- ALLOW_UNALIGNED
19257+ CROARING_ALLOW_UNALIGNED
1925819258/* Get the cardinality of `run'. Requires an actual computation. */
1925919259static inline int _avx512_run_container_cardinality(
1926019260 const run_container_t *run) {
@@ -19296,7 +19296,7 @@ static inline int _avx512_run_container_cardinality(
1929619296CROARING_UNTARGET_AVX512
1929719297
1929819298CROARING_TARGET_AVX2
19299- ALLOW_UNALIGNED
19299+ CROARING_ALLOW_UNALIGNED
1930019300/* Get the cardinality of `run'. Requires an actual computation. */
1930119301static inline int _avx2_run_container_cardinality(const run_container_t *run) {
1930219302 const int32_t n_runs = run->n_runs;
@@ -19326,7 +19326,7 @@ static inline int _avx2_run_container_cardinality(const run_container_t *run) {
1932619326 return sum;
1932719327}
1932819328
19329- ALLOW_UNALIGNED
19329+ CROARING_ALLOW_UNALIGNED
1933019330int _avx2_run_container_to_uint32_array(void *vout, const run_container_t *cont,
1933119331 uint32_t base) {
1933219332 int outpos = 0;
@@ -19427,7 +19427,7 @@ int run_container_to_uint32_array(void *vout, const run_container_t *cont,
1942719427#else
1942819428
1942919429/* Get the cardinality of `run'. Requires an actual computation. */
19430- ALLOW_UNALIGNED
19430+ CROARING_ALLOW_UNALIGNED
1943119431int run_container_cardinality(const run_container_t *run) {
1943219432 const int32_t n_runs = run->n_runs;
1943319433 const rle16_t *runs = run->runs;
@@ -19441,7 +19441,7 @@ int run_container_cardinality(const run_container_t *run) {
1944119441 return sum;
1944219442}
1944319443
19444- ALLOW_UNALIGNED
19444+ CROARING_ALLOW_UNALIGNED
1944519445int run_container_to_uint32_array(void *vout, const run_container_t *cont,
1944619446 uint32_t base) {
1944719447 int outpos = 0;
@@ -20383,7 +20383,7 @@ bool ra_range_uint32_array(const roaring_array_t *ra, size_t offset,
2038320383 }
2038420384 if (t_ans != NULL) {
2038520385 memcpy(ans, t_ans + first_skip, limit * sizeof(uint32_t));
20386- free (t_ans);
20386+ roaring_free (t_ans);
2038720387 }
2038820388 return true;
2038920389}
@@ -20429,17 +20429,14 @@ size_t ra_portable_serialize(const roaring_array_t *ra, char *buf) {
2042920429 memcpy(buf, &cookie, sizeof(cookie));
2043020430 buf += sizeof(cookie);
2043120431 uint32_t s = (ra->size + 7) / 8;
20432- uint8_t *bitmapOfRunContainers = (uint8_t *)roaring_calloc(s, 1);
20433- assert(bitmapOfRunContainers != NULL); // todo: handle
20432+ memset(buf, 0, s);
2043420433 for (int32_t i = 0; i < ra->size; ++i) {
2043520434 if (get_container_type(ra->containers[i], ra->typecodes[i]) ==
2043620435 RUN_CONTAINER_TYPE) {
20437- bitmapOfRunContainers [i / 8] |= ( 1 << (i % 8) );
20436+ buf [i / 8] |= 1 << (i % 8);
2043820437 }
2043920438 }
20440- memcpy(buf, bitmapOfRunContainers, s);
2044120439 buf += s;
20442- roaring_free(bitmapOfRunContainers);
2044320440 if (ra->size < NO_OFFSET_THRESHOLD) {
2044420441 startOffset = 4 + 4 * ra->size + s;
2044520442 } else {
@@ -20523,7 +20520,7 @@ size_t ra_portable_deserialize_size(const char *buf, const size_t maxbytes) {
2052320520 }
2052420521 bytestotal += size * 2 * sizeof(uint16_t);
2052520522 if (bytestotal > maxbytes) return 0;
20526- uint16_t *keyscards = (uint16_t *) buf;
20523+ const char *keyscards = buf;
2052720524 buf += size * 2 * sizeof(uint16_t);
2052820525 if ((!hasrun) || (size >= NO_OFFSET_THRESHOLD)) {
2052920526 // skipping the offsets
@@ -20534,7 +20531,7 @@ size_t ra_portable_deserialize_size(const char *buf, const size_t maxbytes) {
2053420531 // Reading the containers
2053520532 for (int32_t k = 0; k < size; ++k) {
2053620533 uint16_t tmp;
20537- memcpy(&tmp, keyscards + 2 * k + 1 , sizeof(tmp));
20534+ memcpy(&tmp, keyscards + 4 * k + 2 , sizeof(tmp));
2053820535 uint32_t thiscard = tmp + 1;
2053920536 bool isbitmap = (thiscard > DEFAULT_MAX_SIZE);
2054020537 bool isrun = false;
@@ -20625,7 +20622,7 @@ bool ra_portable_deserialize(roaring_array_t *answer, const char *buf,
2062520622 bitmapOfRunContainers = buf;
2062620623 buf += s;
2062720624 }
20628- uint16_t *keyscards = (uint16_t *) buf;
20625+ const char *keyscards = buf;
2062920626
2063020627 *readbytes += size * 2 * sizeof(uint16_t);
2063120628 if (*readbytes > maxbytes) {
@@ -20642,7 +20639,7 @@ bool ra_portable_deserialize(roaring_array_t *answer, const char *buf,
2064220639
2064320640 for (int32_t k = 0; k < size; ++k) {
2064420641 uint16_t tmp;
20645- memcpy(&tmp, keyscards + 2 * k, sizeof(tmp));
20642+ memcpy(&tmp, keyscards + 4 * k, sizeof(tmp));
2064620643 answer->keys[k] = tmp;
2064720644 }
2064820645 if ((!hasrun) || (size >= NO_OFFSET_THRESHOLD)) {
@@ -20660,7 +20657,7 @@ bool ra_portable_deserialize(roaring_array_t *answer, const char *buf,
2066020657 // Reading the containers
2066120658 for (int32_t k = 0; k < size; ++k) {
2066220659 uint16_t tmp;
20663- memcpy(&tmp, keyscards + 2 * k + 1 , sizeof(tmp));
20660+ memcpy(&tmp, keyscards + 4 * k + 2 , sizeof(tmp));
2066420661 uint32_t thiscard = tmp + 1;
2066520662 bool isbitmap = (thiscard > DEFAULT_MAX_SIZE);
2066620663 bool isrun = false;
@@ -22606,7 +22603,7 @@ roaring_bitmap_t *roaring_bitmap_deserialize_safe(const void *buf,
2260622603 for (uint32_t i = 0; i < card; i++) {
2260722604 // elems may not be aligned, read with memcpy
2260822605 uint32_t elem;
22609- memcpy(&elem, elems + i, sizeof(elem));
22606+ memcpy((char *) &elem, (char *)( elems + i) , sizeof(elem));
2261022607 roaring_bitmap_add_bulk(bitmap, &context, elem);
2261122608 }
2261222609 return bitmap;
@@ -24026,7 +24023,7 @@ void roaring_bitmap_frozen_serialize(const roaring_bitmap_t *rb, char *buf) {
2402624023 uint16_t *key_zone = (uint16_t *)arena_alloc(&buf, 2 * ra->size);
2402724024 uint16_t *count_zone = (uint16_t *)arena_alloc(&buf, 2 * ra->size);
2402824025 uint8_t *typecode_zone = (uint8_t *)arena_alloc(&buf, ra->size);
24029- uint32_t *header_zone = (uint32_t *)arena_alloc(&buf, 4);
24026+ char *header_zone = (char *)arena_alloc(&buf, 4);
2403024027
2403124028 for (int32_t i = 0; i < ra->size; i++) {
2403224029 uint16_t count;
@@ -24202,7 +24199,7 @@ const roaring_bitmap_t *roaring_bitmap_frozen_view(const char *buf,
2420224199 return rb;
2420324200}
2420424201
24205- ALLOW_UNALIGNED
24202+ CROARING_ALLOW_UNALIGNED
2420624203roaring_bitmap_t *roaring_bitmap_portable_deserialize_frozen(const char *buf) {
2420724204 char *start_of_buf = (char *)buf;
2420824205 uint32_t cookie;
@@ -27111,6 +27108,8 @@ uint64_t roaring64_iterator_read(roaring64_iterator_t *it, uint64_t *buf,
2711127108 it->has_value = art_iterator_next(&it->art_it);
2711227109 if (it->has_value) {
2711327110 roaring64_iterator_init_at_leaf_first(it);
27111+ } else {
27112+ it->saturated_forward = true;
2711427113 }
2711527114 }
2711627115 return consumed;
0 commit comments