GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
+ by the Free Software Foundation; either version 3, or (at your
option) any later version.
GNUnet is distributed in the hope that it will be useful, but
*/
/**
- * @file consensus/ibf.h
+ * @file set/ibf.h
* @brief invertible bloom filter
* @author Florian Dold
*/
#include "platform.h"
-#include "gnunet_common.h"
+#include "gnunet_util_lib.h"
#include "ibf.h"
#include "strata_estimator.h"
struct InvertibleBloomFilter *diff;
/* number of keys decoded from the ibf */
int ibf_count;
- int more;
- ibf_count = 0;
/* FIXME: implement this without always allocating new IBFs */
diff = ibf_dup (se1->strata[i]);
ibf_subtract (diff, se2->strata[i]);
- for (;;)
+ for (ibf_count = 0; GNUNET_YES; ibf_count++)
{
+ int more;
+
more = ibf_decode (diff, NULL, NULL);
if (GNUNET_NO == more)
{
count += ibf_count;
break;
}
- if (GNUNET_SYSERR == more)
+ /* Estimate if decoding fails or would not terminate */
+ if ((GNUNET_SYSERR == more) || (ibf_count > diff->size))
{
ibf_destroy (diff);
return count * (1 << (i + 1));
}
- ibf_count++;
}
ibf_destroy (diff);
}