summaryrefslogtreecommitdiffstats
path: root/src/bloom.h
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-08-19 20:08:16 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-08-19 20:08:16 +0400
commit8b8b79dd4f5bb0e8fd7b5d6f5fcd0a8050502862 (patch)
treea6e3e3073f431decc6f60ab8d6a016e5aa215295 /src/bloom.h
parentda847ef3d5c2057a9987add05972c79176b89b0f (diff)
downloadrspamd-8b8b79dd4f5bb0e8fd7b5d6f5fcd0a8050502862.tar.gz
rspamd-8b8b79dd4f5bb0e8fd7b5d6f5fcd0a8050502862.zip
* Add implementation of counting bloom filter to rspamd
Diffstat (limited to 'src/bloom.h')
-rw-r--r--src/bloom.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/bloom.h b/src/bloom.h
new file mode 100644
index 000000000..e97b0aaee
--- /dev/null
+++ b/src/bloom.h
@@ -0,0 +1,33 @@
+#ifndef __RSPAMD_BLOOM_H__
+#define __RSPAMD_BLOOM_H__
+
+#include "config.h"
+
+typedef unsigned int (*hashfunc_t) (const char *);
+
+typedef struct bloom_filter_s {
+ size_t asize;
+ unsigned char *a;
+ size_t nfuncs;
+ hashfunc_t *funcs;
+} bloom_filter_t;
+
+/* Hash functions */
+unsigned int bloom_sax_hash (const char *key);
+unsigned int bloom_sdbm_hash (const char *key);
+unsigned int bloom_fnv_hash (const char *key);
+unsigned int bloom_rs_hash (const char *key);
+unsigned int bloom_js_hash (const char *key);
+unsigned int bloom_elf_hash (const char *key);
+unsigned int bloom_bkdr_hash (const char *key);
+unsigned int bloom_ap_hash (const char *key);
+
+#define DEFAULT_BLOOM_HASHES 8, bloom_sax_hash, bloom_sdbm_hash, bloom_fnv_hash, bloom_rs_hash, bloom_js_hash, bloom_elf_hash, bloom_bkdr_hash, bloom_ap_hash
+
+bloom_filter_t* bloom_create (size_t size, size_t nfuncs, ...);
+void bloom_destroy (bloom_filter_t * bloom);
+gboolean bloom_add (bloom_filter_t * bloom, const char *s);
+gboolean bloom_del (bloom_filter_t * bloom, const char *s);
+gboolean bloom_check (bloom_filter_t * bloom, const char *s);
+
+#endif