ts-generic-collections-linq
Version:
TypeScript library provides strongly-typed, queryable collections.
105 lines • 7.19 kB
JavaScript
/**
* @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=