You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					34 lines
				
				683 B
			
		
		
			
		
	
	
					34 lines
				
				683 B
			| 
								 
											4 years ago
										 
									 | 
							
								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
							 |