UNPKG

ts-generic-collections-linq

Version:

TypeScript library provides strongly-typed, queryable collections.

105 lines 7.19 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { objCompare } from './common'; import { List } from './list'; /** * @template T */ export class RandomizedQueue { /** * @param {?=} array */ constructor(array = null) { this.list = new List(); this.peekIndex = -1; if (array) this.list = new List(array); } /** * @return {?} */ clear() { this.list.clear(); } /** * @param {?} item * @return {?} */ contains(item) { return this.list.any((/** * @param {?} x * @return {?} */ x => objCompare(x, item))); } /** * @return {?} */ dequeue() { if (this.list.length > 0) { /** @type {?} */ var min = 0; /** @type {?} */ var max = this.list.length; /** @type {?} */ var index = this.peekIndex >= 0 ? this.peekIndex : Math.floor(Math.random() * (max - min)) + min; /** @type {?} */ var element = this.list.elementAt(index); this.list.removeAt(index); this.peekIndex = -1; return element; } return null; } /** * @param {?} item * @return {?} */ enqueue(item) { this.list.add(item); } /** * @return {?} */ peek() { if (this.list.length > 0) { /** @type {?} */ var min = 0; /** @type {?} */ var max = this.list.length; this.peekIndex = Math.floor(Math.random() * (max - min)) + min; /** @type {?} */ var element = this.list.elementAt(this.peekIndex); return element; } return null; } /** * @param {?} predicate * @return {?} */ forEach(predicate) { this.list.forEach(predicate); } /** * @return {?} */ toArray() { return this.list.toArray(); } } if (false) { /** * @type {?} * @private */ RandomizedQueue.prototype.list; /** * @type {?} * @private */ RandomizedQueue.prototype.peekIndex; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9taXplZC5xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RzLWdlbmVyaWMtY29sbGVjdGlvbnMtbGlucS8iLCJzb3VyY2VzIjpbImxpYi9yYW5kb21pemVkLnF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7QUFFOUIsTUFBTSxPQUFPLGVBQWU7Ozs7SUFJeEIsWUFBWSxRQUFrQixJQUFJO1FBSDFCLFNBQUksR0FBWSxJQUFJLElBQUksRUFBSyxDQUFDO1FBQzlCLGNBQVMsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUczQixJQUFJLEtBQUs7WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Ozs7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7OztJQUNELFFBQVEsQ0FBQyxJQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUMsQ0FBQztJQUNuRCxDQUFDOzs7O0lBQ0QsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4Qjs7Z0JBQ1EsR0FBRyxHQUFHLENBQUM7O2dCQUNQLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07O2dCQUV0QixLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRzs7Z0JBRTVGLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVwQixPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBQ0QsT0FBTyxDQUFDLElBQU87UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDOzs7O0lBQ0QsSUFBSTtRQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4Qjs7Z0JBQ1EsR0FBRyxHQUFHLENBQUM7O2dCQUNQLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFFMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7Z0JBRTNELE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBRWpELE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Ozs7SUFDRCxPQUFPLENBQUMsU0FBMkI7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7OztJQUNELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKOzs7Ozs7SUF6REcsK0JBQXNDOzs7OztJQUN0QyxvQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUXVldWUgfSBmcm9tICcuL3F1ZXVlJztcclxuaW1wb3J0IHsgb2JqQ29tcGFyZSB9IGZyb20gJy4vY29tbW9uJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4vbGlzdCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmFuZG9taXplZFF1ZXVlPFQ+IGltcGxlbWVudHMgSVF1ZXVlPFQ+IHtcclxuICAgIHByaXZhdGUgbGlzdDogTGlzdDxUPiA9IG5ldyBMaXN0PFQ+KCk7ICBcclxuICAgIHByaXZhdGUgcGVla0luZGV4OiBudW1iZXIgPSAtMTsgIFxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFycmF5OiBBcnJheTxUPiA9IG51bGwpIHtcclxuICAgICAgICBpZiAoYXJyYXkpXHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IG5ldyBMaXN0PFQ+KGFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxpc3QuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIGNvbnRhaW5zKGl0ZW06IFQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0LmFueSh4ID0+IG9iakNvbXBhcmUoeCwgaXRlbSkpO1xyXG4gICAgfVxyXG4gICAgZGVxdWV1ZSgpIDogVCB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdC5sZW5ndGggPiAwKVxyXG4gICAgICAgIHsgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSAwO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMucGVla0luZGV4ID49IDAgPyB0aGlzLnBlZWtJbmRleCA6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcclxuXHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5saXN0LmVsZW1lbnRBdChpbmRleCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxpc3QucmVtb3ZlQXQoaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wZWVrSW5kZXggPSAtMTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbnF1ZXVlKGl0ZW06IFQpIDogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5saXN0LmFkZChpdGVtKTtcclxuICAgIH1cclxuICAgIHBlZWsoKSA6IFQge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSAwO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGVla0luZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG5cclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmxpc3QuZWxlbWVudEF0KHRoaXMucGVla0luZGV4KTsgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGZvckVhY2gocHJlZGljYXRlOiAoaXRlbTogVCk9PiB2b2lkKSA6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGlzdC5mb3JFYWNoKHByZWRpY2F0ZSk7XHJcbiAgICB9XHJcbiAgICB0b0FycmF5KCkgOiBBcnJheTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdC50b0FycmF5KCk7XHJcbiAgICB9XHJcbn0iXX0=