aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2023-08-24 07:45:38 +0200
committerLuca Deri <deri@ntop.org>2023-08-24 07:45:38 +0200
commiteb9932164fdfa7da97d6aaaf01b8be202d4652a3 (patch)
treedc0a6bb46567238845c483e4fb4224f0e0828c61
parentff4f291afe250f4ba52c6215e62e9d4c61daf7d4 (diff)
added bimap and/or with allocation
-rw-r--r--src/include/ndpi_api.h3
-rw-r--r--src/lib/ndpi_bitmap.c34
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));
}
/* ******************************************* */