{"version":3,"sources":["../../src/utils/Queue.ts"],"sourcesContent":["class Queue<T> {\n    private items: T[] = [];\n\n    constructor( items: T[] = [] ) {\n        if(items.length > 0)\n            this.items = items\n        else\n            this.items = []\n    }\n\n    enqueue(item: T) {\n        // push item to the end of the queue\n        this.items.push(item)\n        return true;\n    }\n\n    dequeue(): T | false {\n        // remove item from the beginning of the queue\n        if(this.items.length > 0) {\n            const item = this.items.shift()\n            if(item === undefined) return false;\n            return item;\n        }\n        return false;\n    }\n\n    next(): T | false {\n        // dequeue and enqueue\n        if(this.items.length > 0) {\n            const item = this.items.shift()\n            if(item) {\n                this.items.push(item)\n                return item\n            }\n        }\n        return false;\n    }\n\n    // remove value while maintaining order\n    removeAt( index: number) : T | false {\n        if (index > -1 && index < this.items.length) {\n            return this.items.splice(index, 1)[0];\n        }else {\n            return false;\n        }\n    }\n\n    indexOf(item: T) : number {\n        return this.items.indexOf(item);\n    }\n\n    remove(item: T) : T | false {\n        const index = this.items.indexOf(item);\n        if (index > -1) {\n            return this.items.splice(index, 1)[0];\n        }else {\n            return false;\n        }\n    }\n\n    peek(): T | false {\n        return this.items[0]\n    }\n\n    printQueue() : T[] {\n        return this.items;\n    }\n\n    // return array of items in the order they were added\n    toArray() : T[] {\n        return this.items;\n    }\n\n    // return object of items in the order they were added\n    toObject() : object {\n        let obj: { [key: string]: T } = {};\n        this.items.forEach( (item, index) => {\n            obj[index] = item;\n        });\n        return obj;\n    }\n\n    // get the size of the queue\n    size() : number {\n        return this.items.length;\n    }\n\n    // lenght of the queue\n    length() : number {\n        return this.items.length;\n    }\n\n    // check if queue is empty\n    isEmpty() : boolean {\n        return this.items.length === 0;\n    }\n\n    // clear the queue\n    clear = () => this.items = [];\n\n    // synonyms\n    pop =  this.dequeue;\n    push = this.enqueue;\n    shift = this.dequeue;\n    unshift = this.enqueue;\n    front = this.peek;\n    end = this.next;\n}\n\nexport default Queue;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,MAAS;AAAA,EAGX,YAAa,QAAa,CAAC,GAAI;AAF/B,wBAAQ,SAAa,CAAC;AAiGtB;AAAA,iCAAQ,MAAM,KAAK,QAAQ,CAAC;AAG5B;AAAA,+BAAO,KAAK;AACZ,gCAAO,KAAK;AACZ,iCAAQ,KAAK;AACb,mCAAU,KAAK;AACf,iCAAQ,KAAK;AACb,+BAAM,KAAK;AAtGP,QAAG,MAAM,SAAS;AACd,WAAK,QAAQ;AAAA;AAEb,WAAK,QAAQ,CAAC;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAS;AAEb,SAAK,MAAM,KAAK,IAAI;AACpB,WAAO;AAAA,EACX;AAAA,EAEA,UAAqB;AAEjB,QAAG,KAAK,MAAM,SAAS,GAAG;AACtB,YAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,UAAG,SAAS,OAAW,QAAO;AAC9B,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,OAAkB;AAEd,QAAG,KAAK,MAAM,SAAS,GAAG;AACtB,YAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,UAAG,MAAM;AACL,aAAK,MAAM,KAAK,IAAI;AACpB,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,SAAU,OAA2B;AACjC,QAAI,QAAQ,MAAM,QAAQ,KAAK,MAAM,QAAQ;AACzC,aAAO,KAAK,MAAM,OAAO,OAAO,CAAC,EAAE,CAAC;AAAA,IACxC,OAAM;AACF,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,QAAQ,MAAkB;AACtB,WAAO,KAAK,MAAM,QAAQ,IAAI;AAAA,EAClC;AAAA,EAEA,OAAO,MAAqB;AACxB,UAAM,QAAQ,KAAK,MAAM,QAAQ,IAAI;AACrC,QAAI,QAAQ,IAAI;AACZ,aAAO,KAAK,MAAM,OAAO,OAAO,CAAC,EAAE,CAAC;AAAA,IACxC,OAAM;AACF,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,OAAkB;AACd,WAAO,KAAK,MAAM,CAAC;AAAA,EACvB;AAAA,EAEA,aAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,UAAgB;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,WAAoB;AAChB,QAAI,MAA4B,CAAC;AACjC,SAAK,MAAM,QAAS,CAAC,MAAM,UAAU;AACjC,UAAI,KAAK,IAAI;AAAA,IACjB,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,OAAgB;AACZ,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA;AAAA,EAGA,SAAkB;AACd,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA;AAAA,EAGA,UAAoB;AAChB,WAAO,KAAK,MAAM,WAAW;AAAA,EACjC;AAYJ;AAEA,IAAO,gBAAQ;","names":[]}