Skip to content

Commit 0f067cf

Browse files
committed
Upgrade CRoaring to 4.3.11
1 parent 75f84d4 commit 0f067cf

File tree

2 files changed

+40
-41
lines changed

2 files changed

+40
-41
lines changed

roaring.c

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
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);
14011401
array_container_t *array_container_clone(const array_container_t *src);
14021402

14031403
/* Get the cardinality of `array'. */
1404-
ALLOW_UNALIGNED
1404+
CROARING_ALLOW_UNALIGNED
14051405
static 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
15431543
static 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
15521552
static 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
20872087
static 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
28452845
static 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
28542854
static 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
74427442
int 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
91179117
CROARING_TARGET_AVX512
9118-
ALLOW_UNALIGNED
9118+
CROARING_ALLOW_UNALIGNED
91199119
int 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
1327613276
array_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
1358613586
int 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
1388813888
bitset_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
1468314683
int 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
1484414844
CROARING_TARGET_AVX512
14845-
ALLOW_UNALIGNED
14845+
CROARING_ALLOW_UNALIGNED
1484614846
static 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
1485914859
CROARING_UNTARGET_AVX512
1486014860
#endif // CROARING_COMPILER_SUPPORTS_AVX512
1486114861
CROARING_TARGET_AVX2
14862-
ALLOW_UNALIGNED
14862+
CROARING_ALLOW_UNALIGNED
1486314863
static 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
1487614876
CROARING_UNTARGET_AVX2
1487714877
#endif // CROARING_IS_X64
1487814878

14879-
ALLOW_UNALIGNED
14879+
CROARING_ALLOW_UNALIGNED
1488014880
bool 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
1844618446
run_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

1925619256
CROARING_TARGET_AVX512
19257-
ALLOW_UNALIGNED
19257+
CROARING_ALLOW_UNALIGNED
1925819258
/* Get the cardinality of `run'. Requires an actual computation. */
1925919259
static inline int _avx512_run_container_cardinality(
1926019260
const run_container_t *run) {
@@ -19296,7 +19296,7 @@ static inline int _avx512_run_container_cardinality(
1929619296
CROARING_UNTARGET_AVX512
1929719297

1929819298
CROARING_TARGET_AVX2
19299-
ALLOW_UNALIGNED
19299+
CROARING_ALLOW_UNALIGNED
1930019300
/* Get the cardinality of `run'. Requires an actual computation. */
1930119301
static 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
1933019330
int _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
1943119431
int 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
1944519445
int 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
2420624203
roaring_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;

roaring.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
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).
@@ -59,11 +59,11 @@
5959
// /include/roaring/roaring_version.h automatically generated by release.py, do not change by hand
6060
#ifndef ROARING_INCLUDE_ROARING_VERSION
6161
#define ROARING_INCLUDE_ROARING_VERSION
62-
#define ROARING_VERSION "4.3.6"
62+
#define ROARING_VERSION "4.3.11"
6363
enum {
6464
ROARING_VERSION_MAJOR = 4,
6565
ROARING_VERSION_MINOR = 3,
66-
ROARING_VERSION_REVISION = 6
66+
ROARING_VERSION_REVISION = 11
6767
};
6868
#endif // ROARING_INCLUDE_ROARING_VERSION
6969
// clang-format on/* end file include/roaring/roaring_version.h */
@@ -442,9 +442,9 @@ static inline int roaring_hamming(uint64_t x) {
442442

443443
// Allow unaligned memory access
444444
#if defined(__GNUC__) || defined(__clang__)
445-
#define ALLOW_UNALIGNED __attribute__((no_sanitize("alignment")))
445+
#define CROARING_ALLOW_UNALIGNED __attribute__((no_sanitize("alignment")))
446446
#else
447-
#define ALLOW_UNALIGNED
447+
#define CROARING_ALLOW_UNALIGNED
448448
#endif
449449

450450
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)

0 commit comments

Comments
 (0)