| var twoify = function (n) { |
| if (n && !(n & (n - 1))) return n |
| var p = 1 |
| while (p < n) p <<= 1 |
| return p |
| } |
| |
| var Cyclist = function (size) { |
| if (!(this instanceof Cyclist)) return new Cyclist(size) |
| size = twoify(size) |
| this.mask = size - 1 |
| this.size = size |
| this.values = new Array(size) |
| } |
| |
| Cyclist.prototype.put = function (index, val) { |
| var pos = index & this.mask |
| this.values[pos] = val |
| return pos |
| } |
| |
| Cyclist.prototype.get = function (index) { |
| return this.values[index & this.mask] |
| } |
| |
| Cyclist.prototype.del = function (index) { |
| var pos = index & this.mask |
| var val = this.values[pos] |
| this.values[pos] = undefined |
| return val |
| } |
| |
| module.exports = Cyclist |