- another fix to generation handling and lazy copying
[oweals/gnunet.git] / src / set / ibf.c
index 3b28e15e1ea5e04ecbb22e71fae9050e22c4b25e..83cbafc65e3aee76c53d8048346e956d40db253d 100644 (file)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      (C) 2012 Christian Grothoff (and other contributing authors)
+      Copyright (C) 2012 Christian Grothoff (and other contributing authors)
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
       You should have received a copy of the GNU General Public License
       along with GNUnet; see the file COPYING.  If not, write to the
-      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-      Boston, MA 02111-1307, USA.
+      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+      Boston, MA 02110-1301, USA.
 */
 
 /**
@@ -78,7 +78,7 @@ ibf_create (uint32_t size, uint8_t hash_num)
 
   /* TODO: use malloc_large */
 
-  ibf = GNUNET_malloc (sizeof (struct InvertibleBloomFilter));
+  ibf = GNUNET_new (struct InvertibleBloomFilter);
   ibf->count = GNUNET_malloc (size * sizeof (uint8_t));
   ibf->key_sum = GNUNET_malloc (size * sizeof (struct IBF_Key));
   ibf->key_hash_sum = GNUNET_malloc (size * sizeof (struct IBF_KeyHash));
@@ -134,7 +134,7 @@ ibf_insert_into  (struct InvertibleBloomFilter *ibf,
 
 
 /**
- * Insert an element into an IBF.
+ * Insert a key into an IBF.
  *
  * @param ibf the IBF
  * @param key the element's hash code
@@ -148,6 +148,23 @@ ibf_insert (struct InvertibleBloomFilter *ibf, struct IBF_Key key)
   ibf_insert_into (ibf, key, buckets, 1);
 }
 
+
+/**
+ * Remove a key from an IBF.
+ *
+ * @param ibf the IBF
+ * @param key the element's hash code
+ */
+void
+ibf_remove (struct InvertibleBloomFilter *ibf, struct IBF_Key key)
+{
+  int buckets[ibf->hash_num];
+  GNUNET_assert (ibf->hash_num <= ibf->size);
+  ibf_get_indices (ibf, key, buckets);
+  ibf_insert_into (ibf, key, buckets, -1);
+}
+
+
 /**
  * Test is the IBF is empty, i.e. all counts, keys and key hashes are zero.
  */