kitten-cache
Advanced tools
Comparing version 0.2.0 to 0.3.0
73
index.js
@@ -40,4 +40,2 @@ const MAX_8BIT_INTEGER = Math.pow(2, 8) - 1; | ||
this.availablePointers = new Array(); | ||
this.head = 0; | ||
@@ -50,5 +48,2 @@ this.tail = 0; | ||
Cache.prototype._moveToTheTop = function (pointer) { | ||
var _next = this.nexts[pointer]; | ||
var _prev = this.prevs[pointer]; | ||
if (this.head === pointer) { | ||
@@ -58,15 +53,28 @@ return; | ||
var _next = this.nexts[pointer]; | ||
var _prev = this.prevs[pointer]; | ||
var _head = this.head; | ||
if (pointer === this.tail) { | ||
this.tail = _prev; | ||
} | ||
else { | ||
this.prevs[_next] = _prev; | ||
} | ||
this.nexts[pointer] = this.head; | ||
this.prevs[pointer] = pointer; | ||
this.nexts[_prev] = _next; | ||
this.prevs[_next] = _prev; | ||
this.prevs[this.head] = pointer; | ||
this.head = pointer; | ||
this.head = pointer; | ||
this.nexts[pointer] = _head; | ||
} | ||
Cache.prototype._notify = function (pointer) { | ||
if (!this.callback) { | ||
return true; | ||
} | ||
this.callback(this.keys[pointer], this.values[pointer]); | ||
} | ||
/** | ||
@@ -86,26 +94,5 @@ * Delete a key | ||
var _next = this.nexts[pointer]; | ||
var _prev = this.prevs[pointer]; | ||
this.nexts[_prev] = _next; | ||
if (pointer === this.tail) { | ||
this.tail = _prev; | ||
} | ||
else { | ||
this.prevs[_next] = _prev; | ||
if (pointer === this.head) { | ||
this.head = _next; | ||
} | ||
} | ||
delete this.items[this.keys[pointer]]; | ||
this.length--; | ||
this.availablePointers.push(pointer); | ||
if (!this.callback) { | ||
return true; | ||
} | ||
this.callback(this.keys[pointer], this.values[pointer]); | ||
this._notify(pointer); | ||
this.keys[pointer] = null; | ||
} | ||
@@ -129,10 +116,8 @@ | ||
_pointer = this.length++; | ||
if(this.availablePointers.length) { | ||
_pointer = this.availablePointers.shift(); | ||
} | ||
} | ||
else { | ||
_pointer = this.tail; | ||
this.delete(_pointer, true); | ||
_pointer = this.tail; | ||
this.tail = this.prevs[_pointer]; | ||
this._notify(_pointer); | ||
delete this.items[this.keys[_pointer]]; | ||
} | ||
@@ -159,6 +144,8 @@ | ||
while (_pointer >= 0) { | ||
_entries.push({ | ||
key : this.keys[_pointer], | ||
value : this.values[_pointer] | ||
}); | ||
if (this.keys[_pointer] !== null) { | ||
_entries.push({ | ||
key : this.keys[_pointer], | ||
value : this.values[_pointer] | ||
}); | ||
} | ||
@@ -165,0 +152,0 @@ _lastPointer = _pointer; |
{ | ||
"name": "kitten-cache", | ||
"version": "0.2.0", | ||
"version": "0.3.0", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -68,2 +68,35 @@ const should = require('should'); | ||
]); | ||
should(lru.get('a')).eql(undefined); | ||
should(lru.get('b')).eql(2); | ||
should(lru.get('c')).eql(3); | ||
should(lru.entries()).eql([ | ||
{ | ||
key : 'c', | ||
value : 3 | ||
}, | ||
{ | ||
key : 'b', | ||
value : 2 | ||
} | ||
]); | ||
lru.set('d', 4); | ||
should(lru.get('b')).eql(undefined); | ||
should(lru.get('d')).eql(4); | ||
lru.delete('c'); | ||
should(lru.get('c')).eql(undefined); | ||
should(lru.get('c')).eql(undefined); | ||
should(lru.get('d')).eql(4); | ||
should(lru.entries()).eql([ | ||
{ | ||
key : 'd', | ||
value : 4 | ||
} | ||
]); | ||
}); | ||
@@ -93,2 +126,4 @@ | ||
]); | ||
should(lru.get('a')).eql(undefined); | ||
}); | ||
@@ -444,3 +479,3 @@ | ||
lru.delete('b'); | ||
lru.set('d', 4) | ||
lru.set('d', 4); | ||
should(lru.entries()).eql([ | ||
@@ -447,0 +482,0 @@ { key : 'd', value : 4 }, |
16862
651