UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

107 lines (84 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _MinHeap = _interopRequireDefault(require("../heap/MinHeap")); var _Comparator = _interopRequireDefault(require("../../utils/comparator/Comparator")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // It is the same as min heap except that when comparing to elements // we take into account not element's value but rather its priority. class PriorityQueue extends _MinHeap.default { constructor() { super(); this.priorities = {}; this.compare = new _Comparator.default(this.comparePriority.bind(this)); } /** * @param {*} item * @param {number} [priority] * @return {PriorityQueue} */ add(item, priority = 0) { this.priorities[item] = priority; super.add(item); return this; } /** * @param {*} item * @param {Comparator} [customFindingComparator] * @return {PriorityQueue} */ remove(item, customFindingComparator) { super.remove(item, customFindingComparator); delete this.priorities[item]; return this; } /** * @param {*} item * @param {number} priority * @return {PriorityQueue} */ changePriority(item, priority) { this.remove(item, new _Comparator.default(this.compareValue)); this.add(item, priority); return this; } /** * @param {*} item * @return {Number[]} */ findByValue(item) { return this.find(item, new _Comparator.default(this.compareValue)); } /** * @param {*} item * @return {boolean} */ hasValue(item) { return this.findByValue(item).length > 0; } /** * @param {*} a * @param {*} b * @return {number} */ comparePriority(a, b) { if (this.priorities[a] === this.priorities[b]) { return 0; } return this.priorities[a] < this.priorities[b] ? -1 : 1; } /** * @param {*} a * @param {*} b * @return {number} */ compareValue(a, b) { if (a === b) { return 0; } return a < b ? -1 : 1; } } exports.default = PriorityQueue;