| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- var Class = require('./Class');
- var fill = require('./fill');
- var fnv1a = require('./fnv1a');
- var strHash = require('./strHash');
- var each = require('./each');
- var some = require('./some');
- exports = Class({
- initialize: function() {
- var size =
- arguments.length > 0 && arguments[0] !== undefined
- ? arguments[0]
- : 1024;
- var k =
- arguments.length > 1 && arguments[1] !== undefined
- ? arguments[1]
- : 3;
- this._buckets = fill(new Array(size), 0);
- this._k = k;
- this._size = size;
- },
- add: function(val) {
- var _this = this;
- each(this._locations(val), function(location) {
- return (_this._buckets[location] = 1);
- });
- },
- test: function(val) {
- var _this2 = this;
- return !some(this._locations(val), function(location) {
- return _this2._buckets[location] === 0;
- });
- },
- _locations: function(val) {
- var ret = [];
- var size = this._size;
- var a = fnv1a(val);
- var b = strHash(val);
- for (var i = 0; i < this._k; i++) {
- ret[i] = (a + b * i) % size;
- }
- return ret;
- }
- });
- module.exports = exports;
|