34 lines
		
	
	
		
			454 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			454 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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
 |