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.
		
		
		
		
		
			
		
			
				
					
					
						
							29 lines
						
					
					
						
							570 B
						
					
					
				
			
		
		
	
	
							29 lines
						
					
					
						
							570 B
						
					
					
				| var EventEmitter = require('events').EventEmitter
 | |
| 
 | |
| function Counter () {
 | |
|   EventEmitter.call(this)
 | |
|   this.value = 0
 | |
| }
 | |
| 
 | |
| Counter.prototype = Object.create(EventEmitter.prototype)
 | |
| 
 | |
| Counter.prototype.increment = function increment () {
 | |
|   this.value++
 | |
| }
 | |
| 
 | |
| Counter.prototype.decrement = function decrement () {
 | |
|   if (--this.value === 0) this.emit('zero')
 | |
| }
 | |
| 
 | |
| Counter.prototype.isZero = function isZero () {
 | |
|   return (this.value === 0)
 | |
| }
 | |
| 
 | |
| Counter.prototype.onceZero = function onceZero (fn) {
 | |
|   if (this.isZero()) return fn()
 | |
| 
 | |
|   this.once('zero', fn)
 | |
| }
 | |
| 
 | |
| module.exports = Counter
 |