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
			| 
								 
											3 years ago
										 
									 | 
							
								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
							 |