MinGW
[oweals/gnunet.git] / src / util / container_bloomfilter.c
index 8e44f4fc673d2ca1c72a6a8df1ca9851dd4c4d7e..6257ea30a5535311811b406fb2c939335a86dc28 100644 (file)
@@ -625,14 +625,21 @@ GNUNET_CONTAINER_bloomfilter_or (struct GNUNET_CONTAINER_BloomFilter *bf,
                                  const char *data, size_t size)
 {
   unsigned int i;
+  unsigned int n;
+  unsigned long long* fc;
+  const unsigned long long* dc;
 
   if (NULL == bf)
     return GNUNET_YES;
   if (bf->bitArraySize != size)
     return GNUNET_SYSERR;
-  /* FIXME: we could do this 4-8x faster by
-     going over int/long arrays */
-  for (i = 0; i < size; i++)
+  fc = (unsigned long long*) bf->bitArray;
+  dc = (const unsigned long long*) data;
+  n = size / sizeof (unsigned long long);
+
+  for (i = 0; i < n; i++)
+    fc[i] |= dc[i];
+  for (i = n * sizeof(unsigned long long); i < size; i++)
     bf->bitArray[i] |= data[i];
   return GNUNET_OK;
 }