mirror of
				https://hub.gitmirror.com/https://github.com/gradle/actions.git
				synced 2025-10-31 01:50:01 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| function arrayMove(src, srcIndex, dst, dstIndex, len) {
 | |
|     for (var j = 0; j < len; ++j) {
 | |
|         dst[j + dstIndex] = src[j + srcIndex];
 | |
|         src[j + srcIndex] = void 0;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function Queue(capacity) {
 | |
|     this._capacity = capacity;
 | |
|     this._length = 0;
 | |
|     this._front = 0;
 | |
| }
 | |
| 
 | |
| Queue.prototype._willBeOverCapacity = function (size) {
 | |
|     return this._capacity < size;
 | |
| };
 | |
| 
 | |
| Queue.prototype._pushOne = function (arg) {
 | |
|     var length = this.length();
 | |
|     this._checkCapacity(length + 1);
 | |
|     var i = (this._front + length) & (this._capacity - 1);
 | |
|     this[i] = arg;
 | |
|     this._length = length + 1;
 | |
| };
 | |
| 
 | |
| Queue.prototype.push = function (fn, receiver, arg) {
 | |
|     var length = this.length() + 3;
 | |
|     if (this._willBeOverCapacity(length)) {
 | |
|         this._pushOne(fn);
 | |
|         this._pushOne(receiver);
 | |
|         this._pushOne(arg);
 | |
|         return;
 | |
|     }
 | |
|     var j = this._front + length - 3;
 | |
|     this._checkCapacity(length);
 | |
|     var wrapMask = this._capacity - 1;
 | |
|     this[(j + 0) & wrapMask] = fn;
 | |
|     this[(j + 1) & wrapMask] = receiver;
 | |
|     this[(j + 2) & wrapMask] = arg;
 | |
|     this._length = length;
 | |
| };
 | |
| 
 | |
| Queue.prototype.shift = function () {
 | |
|     var front = this._front,
 | |
|         ret = this[front];
 | |
| 
 | |
|     this[front] = undefined;
 | |
|     this._front = (front + 1) & (this._capacity - 1);
 | |
|     this._length--;
 | |
|     return ret;
 | |
| };
 | |
| 
 | |
| Queue.prototype.length = function () {
 | |
|     return this._length;
 | |
| };
 | |
| 
 | |
| Queue.prototype._checkCapacity = function (size) {
 | |
|     if (this._capacity < size) {
 | |
|         this._resizeTo(this._capacity << 1);
 | |
|     }
 | |
| };
 | |
| 
 | |
| Queue.prototype._resizeTo = function (capacity) {
 | |
|     var oldCapacity = this._capacity;
 | |
|     this._capacity = capacity;
 | |
|     var front = this._front;
 | |
|     var length = this._length;
 | |
|     var moveItemsCount = (front + length) & (oldCapacity - 1);
 | |
|     arrayMove(this, 0, this, oldCapacity, moveItemsCount);
 | |
| };
 | |
| 
 | |
| module.exports = Queue;
 | 
