@@ -135,3 +135,18 @@ rspamd_shingles_default_filter (guint64 *input, gsize count, | |||
return minimal; | |||
} | |||
gdouble rspamd_shingles_compare (const struct rspamd_shingle *a, | |||
const struct rspamd_shingle *b) | |||
{ | |||
gint i, common = 0; | |||
for (i = 0; i < RSPAMD_SHINGLE_SIZE; i ++) { | |||
if (a->hashes[i] == b->hashes[i]) { | |||
common ++; | |||
} | |||
} | |||
return (gdouble)common / 84.0; | |||
} |
@@ -57,6 +57,16 @@ struct rspamd_shingle* rspamd_shingles_generate (GArray *input, | |||
rspamd_shingles_filter filter, | |||
gpointer filterd); | |||
/** | |||
* Compares two shingles and return result as a floating point value - 1.0 | |||
* for completely similar shingles and 0.0 for completely different ones | |||
* @param a | |||
* @param b | |||
* @return | |||
*/ | |||
gdouble rspamd_shingles_compare (const struct rspamd_shingle *a, | |||
const struct rspamd_shingle *b); | |||
/** | |||
* Default filtering function | |||
*/ |