Files
rss-nostr-lambda/node_modules/tstl/container/PriorityQueue.js
T

169 lines
6.0 KiB
JavaScript

"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PriorityQueue = void 0;
//================================================================
/**
* @packageDocumentation
* @module std
*/
//================================================================
var AdaptorContainer_1 = require("../internal/container/linear/AdaptorContainer");
var Vector_1 = require("./Vector");
var heap_1 = require("../algorithm/heap");
var comparators_1 = require("../functional/comparators");
/**
* Priority Queue; Greater Out First.
*
* @author Jeongho Nam - https://github.com/samchon
*/
var PriorityQueue = /** @class */ (function (_super) {
__extends(PriorityQueue, _super);
function PriorityQueue() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var _this = _super.call(this, new Vector_1.Vector()) || this;
// DECLARE MEMBERS
var comp = comparators_1.less;
var post_process = null;
//----
// INITIALIZE MEMBERS AND POST-PROCESS
//----
// BRANCH - METHOD OVERLOADINGS
if (args.length === 1 && args[0] instanceof PriorityQueue) {
var obj_1 = args[0];
comp = obj_1.comp_;
post_process = function () {
var first = obj_1.source_.begin();
var last = obj_1.source_.end();
_this.source_.assign(first, last);
};
}
else if (args.length >= 2 &&
args[0].next instanceof Function &&
args[1].next instanceof Function) {
// FUNCTION TEMPLATE
if (args.length === 3)
comp = args[2];
post_process = function () {
// RANGE CONSTRUCTOR
var first = args[0]; // PARAMETER 1
var last = args[1]; // PARAMETER 2
_this.source_.assign(first, last);
};
}
else if (args.length === 1)
comp = args[0];
//----
// DO PROCESS
//----
_this.comp_ = comp;
if (post_process !== null)
post_process();
return _this;
}
/* ---------------------------------------------------------
ACCESSORS
--------------------------------------------------------- */
/**
* Get value comparison function.
*/
PriorityQueue.prototype.value_comp = function () {
return this.comp_;
};
/**
* Get top element.
*/
PriorityQueue.prototype.top = function () {
return this.source_.front();
};
/* ---------------------------------------------------------
ELEMENTS I/O
--------------------------------------------------------- */
/**
* @inheritDoc
*/
PriorityQueue.prototype.push = function () {
var e_1, _a;
var elems = [];
for (var _i = 0; _i < arguments.length; _i++) {
elems[_i] = arguments[_i];
}
try {
for (var elems_1 = __values(elems), elems_1_1 = elems_1.next(); !elems_1_1.done; elems_1_1 = elems_1.next()) {
var elem = elems_1_1.value;
this.source_.push_back(elem);
(0, heap_1.push_heap)(this.source_.begin(), this.source_.end(), this.comp_);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (elems_1_1 && !elems_1_1.done && (_a = elems_1.return)) _a.call(elems_1);
}
finally { if (e_1) throw e_1.error; }
}
return this.size();
};
/**
* @inheritDoc
*/
PriorityQueue.prototype.pop = function () {
(0, heap_1.pop_heap)(this.source_.begin(), this.source_.end(), this.comp_);
this.source_.pop_back();
};
/**
* @inheritDoc
*/
PriorityQueue.prototype.swap = function (obj) {
var _a;
_super.prototype.swap.call(this, obj);
_a = __read([obj.comp_, this.comp_], 2), this.comp_ = _a[0], obj.comp_ = _a[1];
};
return PriorityQueue;
}(AdaptorContainer_1.AdaptorContainer));
exports.PriorityQueue = PriorityQueue;
//# sourceMappingURL=PriorityQueue.js.map