'use strict' | |
function reusify (Constructor) { | |
var head = new Constructor() | |
var tail = head | |
function get () { | |
var current = head | |
if (current.next) { | |
head = current.next | |
} else { | |
head = new Constructor() | |
tail = head | |
} | |
current.next = null | |
return current | |
} | |
function release (obj) { | |
tail.next = obj | |
tail = obj | |
} | |
return { | |
get: get, | |
release: release | |
} | |
} | |
module.exports = reusify |