UNPKG

1.18 kBJavaScriptView Raw
1'use strict'
2
3var BloomFilter = require('bloomfilter').BloomFilter
4var deepSort = require('./deepSort')
5var genKeys = require('./genKeys')
6var deepMatch = require('./deepMatch')
7
8function Bucket (isDeep) {
9 this.filter = new BloomFilter(
10 32 * 256, // number of bits to allocate.
11 16 // number of hash functions.
12 )
13 this.data = []
14 this.isDeep = isDeep
15}
16
17Bucket.prototype.add = function (set) {
18 genKeys(set.pattern).forEach(addPatterns, this)
19 this.data.push(set)
20 if (this.isDeep) {
21 this.data.sort(deepSort)
22 }
23 return this
24}
25
26function addPatterns (toAdd) {
27 this.filter.add(toAdd)
28}
29
30Bucket.prototype.remove = function (pattern, payload) {
31 var foundPattern = false
32 var data = this.data
33
34 for (var i = 0; i < data.length; i++) {
35 if (deepMatch(pattern, data[i].pattern)) {
36 if (payload === null || payload === data[i].payload) {
37 data.splice(i, 1)
38 foundPattern = true
39
40 // to remove all occurences
41 this.remove(pattern, payload)
42 break
43 }
44 }
45 }
46
47 return foundPattern
48}
49
50Bucket.prototype.forEach = function (func, that) {
51 this.data.forEach(func, that)
52 return this
53}
54
55module.exports = Bucket