00001 /* 00002 00003 Copyright (c) 2005-2008, Simon Howard 00004 00005 Permission to use, copy, modify, and/or distribute this software 00006 for any purpose with or without fee is hereby granted, provided 00007 that the above copyright notice and this permission notice appear 00008 in all copies. 00009 00010 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 00011 WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 00012 WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 00013 AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR 00014 CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 00015 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00016 NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 00017 CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00018 00019 */ 00020 00040 #ifndef ALGORITHM_BLOOM_FILTER_H 00041 #define ALGORITHM_BLOOM_FILTER_H 00042 00043 #ifdef __cplusplus 00044 extern "C" { 00045 #endif 00046 00051 typedef struct _BloomFilter BloomFilter; 00052 00057 typedef void *BloomFilterValue; 00058 00067 typedef unsigned long (*BloomFilterHashFunc)(BloomFilterValue data); 00068 00089 BloomFilter *bloom_filter_new(unsigned int table_size, 00090 BloomFilterHashFunc hash_func, 00091 unsigned int num_functions); 00092 00099 void bloom_filter_free(BloomFilter *bloomfilter); 00100 00108 void bloom_filter_insert(BloomFilter *bloomfilter, BloomFilterValue value); 00109 00121 int bloom_filter_query(BloomFilter *bloomfilter, BloomFilterValue value); 00122 00132 void bloom_filter_read(BloomFilter *bloomfilter, unsigned char *array); 00133 00146 void bloom_filter_load(BloomFilter *bloomfilter, unsigned char *array); 00147 00165 BloomFilter *bloom_filter_union(BloomFilter *filter1, 00166 BloomFilter *filter2); 00167 00185 BloomFilter *bloom_filter_intersection(BloomFilter *filter1, 00186 BloomFilter *filter2); 00187 00188 #ifdef __cplusplus 00189 } 00190 #endif 00191 00192 #endif /* #ifndef ALGORITHM_BLOOM_FILTER_H */ 00193