Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 48x 48x 48x 2262x 2262x 42x 8x 8x 8x 506x 506x 8x 2712x 2712x 2712x 871x 871x 2732x 261x 2731x 266x 2731x 2712x 870x 3265x 1x | /** * Map Iterable * ============== * Allows any iterable object to be mapped with correct callback parameters * eg. callback(currentValue, index, sourceIterable) * @ignore * @param {any[]} iterable * @param {Function} callback * @param {Object} [options] * @param {Boolean} [options.useEmptyElements=true] - use empty elements of the array ? * @return {any[]} */ function mapIterable(iterable, callback, { useEmptyElements = true } = {}) { const tasks = [], length = iterable.length; for (let index = 0; index < length; index++) { Iif (!useEmptyElements && !(index in iterable)) { continue; } tasks.push(callback(iterable[index], index, iterable)); } return tasks; } /** * Filter Iterable * =============== * Allows any iterable object to be filtered using an array as a check list * @ignore * @param {any[]} iterable * @param {any[]} checks * @return {any[]} */ function filterIterable(iterable, checks) { const result = []; let index = 0; for (let item of iterable) { Eif (checks[index++]) { result.push(item); } } return result; } /** * Swap items in array * @ignore * @param {any[]} items * @param {Number} leftIndex * @param {Number} rightIndex */ function swapItems(items, leftIndex, rightIndex) { const leftItem = items[leftIndex]; items[leftIndex] = items[rightIndex]; items[rightIndex] = leftItem; } /** * Async partition an array for quick sort * @ignore * @async * @param {any[]} items * @param {Number} leftIndex * @param {Number} rightIndex * @param {Function} compare * @return {Promise<Number>} leftIndex after partition */ async function asyncPartition(items, leftIndex, rightIndex, compare) { const pivot = items[Math.floor((leftIndex + rightIndex) / 2)]; while (leftIndex <= rightIndex) { // eslint-disable-next-line no-await-in-loop while ((await compare(items[leftIndex], pivot)) < 0) { leftIndex++; } // eslint-disable-next-line no-await-in-loop while ((await compare(items[rightIndex], pivot)) > 0) { rightIndex--; } if (leftIndex <= rightIndex) { swapItems(items, leftIndex++, rightIndex--); } } return leftIndex; } /** * Compares two items by unicode * @ignore * @param {any} a * @param {any} b * @return {Number} -1, 0, 1 */ const compareByUnicode = (a, b) => String(a).localeCompare(String(b)); module.exports = { mapIterable, filterIterable, swapItems, asyncPartition, compareByUnicode }; |