diff options
author | Luca Deri <deri@ntop.org> | 2023-08-24 07:45:38 +0200 |
---|---|---|
committer | Luca Deri <deri@ntop.org> | 2023-08-24 07:45:38 +0200 |
commit | eb9932164fdfa7da97d6aaaf01b8be202d4652a3 (patch) | |
tree | dc0a6bb46567238845c483e4fb4224f0e0828c61 | |
parent | ff4f291afe250f4ba52c6215e62e9d4c61daf7d4 (diff) |
added bimap and/or with allocation
-rw-r--r-- | src/include/ndpi_api.h | 3 | ||||
-rw-r--r-- | src/lib/ndpi_bitmap.c | 34 |
2 files changed, 30 insertions, 7 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index c4019bc99..592831e3e 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -1971,6 +1971,7 @@ extern "C" { /* Based on https://roaringbitmap.org */ ndpi_bitmap* ndpi_bitmap_alloc(void); + ndpi_bitmap* ndpi_bitmap_alloc_size(u_int32_t size); void ndpi_bitmap_free(ndpi_bitmap* b); ndpi_bitmap* ndpi_bitmap_copy(ndpi_bitmap* b); u_int64_t ndpi_bitmap_cardinality(ndpi_bitmap* b); @@ -1984,8 +1985,10 @@ extern "C" { ndpi_bitmap* ndpi_bitmap_deserialize(char *buf); void ndpi_bitmap_and(ndpi_bitmap* a, ndpi_bitmap* b_and); + ndpi_bitmap* ndpi_bitmap_and_alloc(ndpi_bitmap* a, ndpi_bitmap* b_and); void ndpi_bitmap_andnot(ndpi_bitmap* a, ndpi_bitmap* b_and); void ndpi_bitmap_or(ndpi_bitmap* a, ndpi_bitmap* b_or); + ndpi_bitmap* ndpi_bitmap_ot_alloc(ndpi_bitmap* a, ndpi_bitmap* b_and); void ndpi_bitmap_xor(ndpi_bitmap* a, ndpi_bitmap* b_xor); void ndpi_bitmap_optimize(ndpi_bitmap* a); diff --git a/src/lib/ndpi_bitmap.c b/src/lib/ndpi_bitmap.c index ce8f3cb0e..2bf7217d2 100644 --- a/src/lib/ndpi_bitmap.c +++ b/src/lib/ndpi_bitmap.c @@ -45,6 +45,12 @@ ndpi_bitmap* ndpi_bitmap_alloc() { /* ******************************************* */ +ndpi_bitmap* ndpi_bitmap_alloc_size(u_int32_t size) { + return((ndpi_bitmap*)roaring_bitmap_create_with_capacity(size)); +} + +/* ******************************************* */ + void ndpi_bitmap_free(ndpi_bitmap* b) { roaring_bitmap_free((const roaring_bitmap_t *)b); } @@ -108,28 +114,42 @@ ndpi_bitmap* ndpi_bitmap_deserialize(char *buf) { /* b = b & b_and */ void ndpi_bitmap_and(ndpi_bitmap* a, ndpi_bitmap* b_and) { - roaring_bitmap_and_inplace((ndpi_bitmap*)a, (ndpi_bitmap*)b_and); + roaring_bitmap_and_inplace((roaring_bitmap_t*)a, (roaring_bitmap_t*)b_and); +} + +/* ******************************************* */ + +/* b = b & b_and */ +ndpi_bitmap* ndpi_bitmap_and_alloc(ndpi_bitmap* a, ndpi_bitmap* b_and) { + return((ndpi_bitmap*)roaring_bitmap_and((roaring_bitmap_t*)a, (roaring_bitmap_t*)b_and)); } /* ******************************************* */ /* b = b & !b_and */ void ndpi_bitmap_andnot(ndpi_bitmap* a, ndpi_bitmap* b_and) { - roaring_bitmap_andnot_inplace((ndpi_bitmap*)a, (ndpi_bitmap*)b_and); + roaring_bitmap_andnot_inplace((roaring_bitmap_t*)a, (roaring_bitmap_t*)b_and); } /* ******************************************* */ /* b = b | b_or */ void ndpi_bitmap_or(ndpi_bitmap* a, ndpi_bitmap* b_or) { - roaring_bitmap_or_inplace((ndpi_bitmap*)a, (ndpi_bitmap*)b_or); + roaring_bitmap_or_inplace((roaring_bitmap_t*)a, (roaring_bitmap_t*)b_or); +} + +/* ******************************************* */ + +/* b = b | b_or */ +ndpi_bitmap* ndpi_bitmap_or_alloc(ndpi_bitmap* a, ndpi_bitmap* b_or) { + return((ndpi_bitmap*)roaring_bitmap_or((roaring_bitmap_t*)a, (roaring_bitmap_t*)b_or)); } /* ******************************************* */ /* b = b ^ b_xor */ void ndpi_bitmap_xor(ndpi_bitmap* a, ndpi_bitmap* b_xor) { - roaring_bitmap_xor_inplace((ndpi_bitmap*)a, (ndpi_bitmap*)b_xor); + roaring_bitmap_xor_inplace((roaring_bitmap_t*)a, (roaring_bitmap_t*)b_xor); } /* ******************************************* */ @@ -141,19 +161,19 @@ void ndpi_bitmap_optimize(ndpi_bitmap* a) { /* ******************************************* */ ndpi_bitmap_iterator* ndpi_bitmap_iterator_alloc(ndpi_bitmap* b) { - return(roaring_create_iterator((ndpi_bitmap*)b)); + return(roaring_create_iterator((roaring_bitmap_t*)b)); } /* ******************************************* */ void ndpi_bitmap_iterator_free(ndpi_bitmap* b) { - roaring_free_uint32_iterator((ndpi_bitmap*)b); + roaring_free_uint32_iterator((roaring_bitmap_t*)b); } /* ******************************************* */ bool ndpi_bitmap_is_empty(ndpi_bitmap* b) { - return(roaring_bitmap_is_empty((ndpi_bitmap*)b)); + return(roaring_bitmap_is_empty((roaring_bitmap_t*)b)); } /* ******************************************* */ |