Reactive-Extensions/RxJS

View on GitHub
src/core/internal/priorityqueue.js

Summary

Maintainability
D
2 days
Test Coverage
function IndexedItem(id, value) {
this.id = id;
this.value = value;
}
 
IndexedItem.prototype.compareTo = function (other) {
var c = this.value.compareTo(other.value);
c === 0 && (c = this.id - other.id);
return c;
};
 
Identical blocks of code found in 4 locations. Consider refactoring.
var PriorityQueue = Rx.internals.PriorityQueue = function (capacity) {
this.items = new Array(capacity);
this.length = 0;
};
 
var priorityProto = PriorityQueue.prototype;
Identical blocks of code found in 4 locations. Consider refactoring.
priorityProto.isHigherPriority = function (left, right) {
return this.items[left].compareTo(this.items[right]) < 0;
};
 
Identical blocks of code found in 4 locations. Consider refactoring.
priorityProto.percolate = function (index) {
if (index >= this.length || index < 0) { return; }
var parent = index - 1 >> 1;
if (parent < 0 || parent === index) { return; }
if (this.isHigherPriority(index, parent)) {
var temp = this.items[index];
this.items[index] = this.items[parent];
this.items[parent] = temp;
this.percolate(parent);
}
};
 
Function `heapify` has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
Similar blocks of code found in 4 locations. Consider refactoring.
priorityProto.heapify = function (index) {
+index || (index = 0);
if (index >= this.length || index < 0) { return; }
var left = 2 * index + 1,
right = 2 * index + 2,
first = index;
if (left < this.length && this.isHigherPriority(left, first)) {
first = left;
}
if (right < this.length && this.isHigherPriority(right, first)) {
first = right;
}
if (first !== index) {
var temp = this.items[index];
this.items[index] = this.items[first];
this.items[first] = temp;
this.heapify(first);
}
};
 
priorityProto.peek = function () { return this.items[0].value; };
 
Identical blocks of code found in 4 locations. Consider refactoring.
priorityProto.removeAt = function (index) {
this.items[index] = this.items[--this.length];
this.items[this.length] = undefined;
this.heapify();
};
 
priorityProto.dequeue = function () {
var result = this.peek();
this.removeAt(0);
return result;
};
 
Identical blocks of code found in 4 locations. Consider refactoring.
priorityProto.enqueue = function (item) {
var index = this.length++;
this.items[index] = new IndexedItem(PriorityQueue.count++, item);
this.percolate(index);
};
 
Identical blocks of code found in 4 locations. Consider refactoring.
priorityProto.remove = function (item) {
for (var i = 0; i < this.length; i++) {
if (this.items[i].value === item) {
this.removeAt(i);
return true;
}
}
return false;
};
PriorityQueue.count = 0;