root/lang/javascript/bloomfilter/bloomfilter.html @ 6902

Revision 229, 2.2 kB (checked in by itkz, 7 years ago)

change filter table is implemented by character array to bit sequence

Line 
1<head>
2<title>Bloom::Filter in JavaScript</title>
3</head>
4<style type="text/css">
5h1{
6        font-size: 120%;
7        margin : 0px;
8        padding : 0;
9}
10h2 {
11        font-size: 100%;
12        margin:0;
13        padding : 5px;
14}
15#result {
16        color:red;
17        font-weight: bold;
18}
19textarea {
20        width: 100%;
21        height : 20em;
22}
23</style>
24<script type="text/javascript" src="bloomfilter.js"></script>
25
26<h1>Bloom::Filter in JavaScript</h1>
27<h2>demo</h2>
28<button onclick="initialize()">initialize</button>
29<input type="text" id="key">
30<button onclick="add()">add</button>
31<button onclick="check()">check</button>
32<span id="result"></span>
33<h2>check</h2>
34<textarea id="check"></textarea>
35<h2>filter</h2>
36<textarea id="filter" wrap="soft"></textarea>
37<script type="text/javascript">
38var bf;
39BloomFilter.TRUE = "o";
40BloomFilter.FALSE = "-";
41
42function $(id){return document.getElementById(id)}
43function initialize(){
44        bf = new BloomFilter();
45        update_view();
46}
47function check(){
48        if(!bf) output_error("not initialized!");
49        var key = $("key").value;
50        var r = bf.check(key);
51        $("result").innerHTML = r;
52        update_cell(key);
53}
54function add(){
55        if(!bf) output_error("not initialized!");
56        var key = $("key").value;
57        bf.add(key);
58        update_cell(key);
59        update_view();
60}
61function output_error(str){
62        $("result").innerHTML = str;
63}
64function update_cell(key){
65        var cells = bf._get_cells(key);
66        var check_bit = new Array(bf.filter_length);
67        for(var i=0;i<bf.filter_length;i++) check_bit[i] = BloomFilter.FALSE;
68        for(var i=0;i<cells.length;i++) check_bit[cells[i]] = BloomFilter.TRUE;
69        $("check").value = check_bit.splitby(100).join("\n");
70}
71
72function update_view(){
73        var check_bit = new Array(bf.filter_length);
74        for(var i=0;i<bf.filter_length;i++) check_bit[i] = BloomFilter.FALSE;
75        for(var i=0;i<bf.filter_length;i++) {
76                if (bf.is_bit_on(i)) {
77                        check_bit[i] = BloomFilter.TRUE;
78                }
79        }
80        $("filter").value = check_bit.splitby(100).join("\n");
81}
82Array.prototype.splitby = function(num){
83        var result = [];
84        for(var i=0;i<this.length;i+=num){
85                result.push(this.slice(i, i+num).join(""));
86        }
87        return result;
88}
89</script>
90
91<h2>Usage</h2>
92<pre>
93var bf = new BloomFilter();
94bf.add("key_a");
95bf.check("key_a"); // true
96bf.check("key_b"); // false
97</pre>
Note: See TracBrowser for help on using the browser.