@shockpkg/dir-projector
Version:
Package for creating Shockwave Director projectors
1 lines • 3.09 kB
Source Map (JSON)
{"version":3,"sources":["queue.ts"],"names":["Queue","Object","constructor","_queue_","size","length","clear","push","handler","priority","queue","index","i","splice","pop","entry","shift","run"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,KAAN,SAAoBC,MAApB,CAA2B;AACjC;AACD;AACA;AAMCC,EAAAA,WAAW,GAAG;AACb;AADa,SALNC,OAKM,GAFR,EAEQ;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACC,MAAWC,IAAX,GAAkB;AACjB,WAAO,KAAKD,OAAL,CAAaE,MAApB;AACA;AAED;AACD;AACA;;;AACQC,EAAAA,KAAP,GAAe;AACd,SAAKH,OAAL,GAAe,EAAf;AACA;AAED;AACD;AACA;AACA;AACA;AACA;;;AACQI,EAAAA,IAAP,CAAYC,OAAZ,EAAyCC,QAAQ,GAAG,CAApD,EAAuD;AACtD,UAAMC,KAAK,GAAG,KAAKP,OAAnB;AACA,QAAIQ,KAAK,GAAG,CAAZ;;AACA,SAAK,IAAIC,CAAC,GAAGF,KAAK,CAACL,MAAnB,EAA2BO,CAAC,EAA5B,GAAiC;AAChC,UAAIF,KAAK,CAACE,CAAD,CAAL,CAASH,QAAT,GAAoBA,QAAxB,EAAkC;AACjCE,QAAAA,KAAK,GAAGC,CAAC,GAAG,CAAZ;AACA;AACA;AACD;;AACDF,IAAAA,KAAK,CAACG,MAAN,CAAaF,KAAb,EAAoB,CAApB,EAAuB;AACtBF,MAAAA,QADsB;AAEtBD,MAAAA;AAFsB,KAAvB;AAIA;AAED;AACD;AACA;AACA;AACA;;;AACQM,EAAAA,GAAP,GAAa;AACZ,UAAMC,KAAK,GAAG,KAAKZ,OAAL,CAAaW,GAAb,EAAd;;AACA,WAAOC,KAAK,GAAGA,KAAK,CAACP,OAAT,GAAmB,IAA/B;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQQ,EAAAA,KAAP,GAAe;AACd,UAAMD,KAAK,GAAG,KAAKZ,OAAL,CAAaa,KAAb,EAAd;;AACA,WAAOD,KAAK,GAAGA,KAAK,CAACP,OAAT,GAAmB,IAA/B;AACA;AAED;AACD;AACA;;;AACC,QAAaS,GAAb,GAAmB;AAClB,aAAS;AACR,YAAMF,KAAK,GAAG,KAAKD,GAAL,EAAd;;AACA,UAAI,CAACC,KAAL,EAAY;AACX;AACA,OAJO,CAMR;;;AACA,YAAMA,KAAK,EAAX;AACA;AACD;;AAnFgC","sourcesContent":["/**\n * A simple queue with optional priority.\n */\nexport class Queue extends Object {\n\t/**\n\t * Queue data.\n\t */\n\tprivate _queue_: {\n\t\tpriority: number;\n\t\thandler: () => Promise<any>;\n\t}[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Get size of queue.\n\t *\n\t * @returns Total callbacks in queue.\n\t */\n\tpublic get size() {\n\t\treturn this._queue_.length;\n\t}\n\n\t/**\n\t * Clear queue.\n\t */\n\tpublic clear() {\n\t\tthis._queue_ = [];\n\t}\n\n\t/**\n\t * Enqueue callback.\n\t *\n\t * @param handler Callback function.\n\t * @param priority Callback priority.\n\t */\n\tpublic push(handler: () => Promise<any>, priority = 0) {\n\t\tconst queue = this._queue_;\n\t\tlet index = 0;\n\t\tfor (let i = queue.length; i--;) {\n\t\t\tif (queue[i].priority < priority) {\n\t\t\t\tindex = i + 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tqueue.splice(index, 0, {\n\t\t\tpriority,\n\t\t\thandler\n\t\t});\n\t}\n\n\t/**\n\t * Pop callback off queue.\n\t *\n\t * @returns Callback function or null if empty.\n\t */\n\tpublic pop() {\n\t\tconst entry = this._queue_.pop();\n\t\treturn entry ? entry.handler : null;\n\t}\n\n\t/**\n\t * Shift callback off queue.\n\t *\n\t * @returns Callback function or null if empty.\n\t */\n\tpublic shift() {\n\t\tconst entry = this._queue_.shift();\n\t\treturn entry ? entry.handler : null;\n\t}\n\n\t/**\n\t * Run queue.\n\t */\n\tpublic async run() {\n\t\tfor (;;) {\n\t\t\tconst entry = this.pop();\n\t\t\tif (!entry) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tawait entry();\n\t\t}\n\t}\n}\n"],"file":"queue.mjs","sourceRoot":"../src"}