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.
		
		
		
		
		
			
		
			
				
					52 lines
				
				1.0 KiB
			
		
		
			
		
	
	
					52 lines
				
				1.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								module.exports = function (max) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (!max) throw Error('hashlru must have a max value, of type number, greater than 0')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var size = 0, cache = Object.create(null), _cache = Object.create(null)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function update (key, value) {
							 | 
						||
| 
								 | 
							
								    cache[key] = value
							 | 
						||
| 
								 | 
							
								    size ++
							 | 
						||
| 
								 | 
							
								    if(size >= max) {
							 | 
						||
| 
								 | 
							
								      size = 0
							 | 
						||
| 
								 | 
							
								      _cache = cache
							 | 
						||
| 
								 | 
							
								      cache = Object.create(null)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    has: function (key) {
							 | 
						||
| 
								 | 
							
								      return cache[key] !== undefined || _cache[key] !== undefined
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    remove: function (key) {
							 | 
						||
| 
								 | 
							
								      if(cache[key] !== undefined)
							 | 
						||
| 
								 | 
							
								        cache[key] = undefined
							 | 
						||
| 
								 | 
							
								      if(_cache[key] !== undefined)
							 | 
						||
| 
								 | 
							
								        _cache[key] = undefined
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    get: function (key) {
							 | 
						||
| 
								 | 
							
								      var v = cache[key]
							 | 
						||
| 
								 | 
							
								      if(v !== undefined) return v
							 | 
						||
| 
								 | 
							
								      if((v = _cache[key]) !== undefined) {
							 | 
						||
| 
								 | 
							
								        update(key, v)
							 | 
						||
| 
								 | 
							
								        return v
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    set: function (key, value) {
							 | 
						||
| 
								 | 
							
								      if(cache[key] !== undefined) cache[key] = value
							 | 
						||
| 
								 | 
							
								      else update(key, value)
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    clear: function () {
							 | 
						||
| 
								 | 
							
								      cache = Object.create(null)
							 | 
						||
| 
								 | 
							
								      _cache = Object.create(null)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |