UNPKG

@lazy-random/df-array

Version:
1 lines 11 kB
{"version":3,"file":"index.cjs.production.min.cjs","sources":["../src/util/options.ts","../src/array-index-one.ts","../src/array-shuffle.ts","../src/array-fill.ts","../src/array-index.ts","../src/array-unique.ts"],"sourcesContent":["import { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\nimport { expect } from '@lazy-random/expect';\n\nexport function _handleStartEnd<T extends ITSArrayListMaybeReadonly<unknown>>(arr: T, start: number = 0, end?: number, disableCheck?: boolean)\n{\n\tconst len = arr.length;\n\tconst enableCheck = !disableCheck;\n\n\tstart = Math.max(Math.floor(start), 0);\n\n\tif (typeof end !== 'undefined' && end !== null)\n\t{\n\t\tend = Math.floor(end);\n\t\tenableCheck && expect(end).integer\n\t\t\t.gt(start + 1, `END(${end}) should greater than START(${start}+1)`)\n\t\t\t.gt(0)\n\t\t\t//.gt(start, `END(${end}) should greater than START(${start})`)\n\t\t;\n\t}\n\n\tend = Math.min(Math.max(0, end ?? len), len);\n\n\tenableCheck && expect(end, `END(${end})`).integer.gte(0).lte(len);\n\tenableCheck && expect(start, `START(${start})`).integer.gte(0).lt(end);\n\n\treturn {\n\t\tstart,\n\t\tend,\n\t\tlen,\n\t}\n}\n","import { IRNGLike } from '@lazy-random/rng-abstract-core';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\nimport { _handleStartEnd } from './util/options';\nimport { int } from '@lazy-random/util-distributions';\n\n/**\n * return index number form array\n */\nexport function dfArrayIndexOne<T extends ITSArrayListMaybeReadonly<unknown>>(random: IRNGLike,\n\tarr: T,\n\tstart: number = 0,\n\tend?: number\n)\n{\n\t({\n\t\tstart,\n\t\tend,\n\t} = _handleStartEnd(arr, start, end));\n\n\tif (start === end - 1)\n\t{\n\t\treturn () => start\n\t}\n\n\treturn () =>\n\t{\n\t\treturn int(random, start, end)\n\t}\n}\n\nexport default dfArrayIndexOne\n","import { ITSArrayLikeWriteable } from 'ts-type/lib/generic';\nimport { TypedArray } from 'typedarray-dts';\nimport { swapAlgorithm2 } from '@lazy-random/array-algorithm';\nimport { randIndex as _randIndex } from '@lazy-random/util-distributions';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\n\nexport function dfArrayShuffle<T extends ITSArrayLikeWriteable<any> | TypedArray | Buffer | ITSArrayListMaybeReadonly<any>>(random: IRNGLike, arr: T, overwrite?: boolean): () => T\n{\n\tconst randIndex = (len: number) =>\n\t{\n\t\treturn _randIndex(random, len)\n\t};\n\n\tif (!overwrite)\n\t{\n\t\tlet cloneArrayLike: (arr: T) => T;\n\n\t\tif (Buffer.isBuffer(arr))\n\t\t{\n\t\t\t// @ts-ignore\n\t\t\tcloneArrayLike = (arr) =>\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn Buffer.from(arr)\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcloneArrayLike = (arr) =>\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn arr.slice()\n\t\t\t};\n\t\t}\n\n\t\treturn (): T =>\n\t\t{\n\t\t\treturn swapAlgorithm2(cloneArrayLike(arr), true, randIndex)\n\t\t}\n\t}\n\n\treturn (): T =>\n\t{\n\t\treturn swapAlgorithm2(arr, true, randIndex)\n\t}\n}\n\ndfArrayShuffle.memoizable = false;\n\nexport default dfArrayShuffle;\n\n\n","import { dfUniformByte, dfUniformFloat, dfUniformInt } from '@lazy-random/df-uniform';\nimport { expect } from '@lazy-random/expect';\nimport { IArrayInput02 } from '@lazy-random/shared-lib';\nimport { isUnset } from '@lazy-random/shared-lib';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\n\nexport function dfArrayFill(random: IRNGLike, min?: number, max?: number, float?: boolean)\n{\n\tlet fn: () => number;\n\n\t{\n\t\tlet min_unset = isUnset(min);\n\t\tlet max_unset = isUnset(max);\n\n\t\tif (max_unset && min_unset)\n\t\t{\n\t\t\tfn = dfUniformByte(random);\n\t\t}\n\t\telse if (float)\n\t\t{\n\t\t\tfn = dfUniformFloat(random, min, max);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfn = dfUniformInt(random, min, max);\n\t\t}\n\n\t\tmin = void 0;\n\t\tmax = void 0;\n\t}\n\n\texpect(fn).function();\n\n\treturn <T extends IArrayInput02<number>>(arr: T) =>\n\t{\n\t\tlet i = arr.length;\n\t\twhile (i--)\n\t\t{\n\t\t\tarr[i] = fn();\n\t\t}\n\t\treturn arr\n\t}\n}\n\nexport default dfArrayFill\n","import { expect } from '@lazy-random/expect';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\nimport { _handleStartEnd } from './util/options';\nimport { dfArrayIndexOne } from './array-index-one';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\n\n/**\n * return index list form array\n */\nexport function dfArrayIndex<T extends ITSArrayListMaybeReadonly<unknown>>(random: IRNGLike, arr: T, size: number = 1, start: number = 0, end?: number)\n{\n\texpect(size, `size`).integer.gt(0);\n\texpect(arr.length, `arr.length`).integer.gt(0);\n\n\tconst fn = dfArrayIndexOne(random, arr, start, end);\n\n\tlet len: number;\n\n\t({\n\t\tstart,\n\t\tend,\n\t\tlen,\n\t} = _handleStartEnd(arr, start, end, true));\n\n\tlet size_runtime = Math.max(Math.min((end - start), len, size), 0);\n\n\texpect(size_runtime, `size_runtime(${size_runtime})`).lte(size).gt(0)\n\n\tsize = size_runtime;\n\n\treturn () =>\n\t{\n\t\t/**\n\t\t * reset size_runtime\n\t\t */\n\t\tsize_runtime = size;\n\n\t\tlet ids: number[] = [];\n\t\tlet prev: number;\n\n\t\tLABEL_TOP: do\n\t\t{\n\t\t\tlet i = fn()\n\n\t\t\tif (prev === i || ids.includes(i))\n\t\t\t{\n\t\t\t\tcontinue LABEL_TOP;\n\t\t\t}\n\n\t\t\tids.push(prev = i);\n\t\t\t--size_runtime;\n\t\t}\n\t\twhile (size_runtime > 0);\n\n\t\treturn ids;\n\t}\n}\n\nexport default dfArrayIndex\n","import { expect } from '@lazy-random/expect';\nimport { randIndex as _randIndex } from '@lazy-random/util-distributions';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\n\nexport interface IRandIndex\n{\n\t(len: number): number\n\t(len: number, ...argv): number\n\t(...argv): number\n}\n\nexport interface IArrayUniqueOutOfLimitCallback<T extends unknown>\n{\n\t(arr: ITSArrayListMaybeReadonly<T>, limit: number, loop: boolean, fn: IRandIndex): T[] | boolean | void\n}\n\nexport function dfArrayUnique<T extends unknown>(random: IRNGLike, arr: ITSArrayListMaybeReadonly<T>, limit?: number, loop?: boolean, fnRandIndex?: IRandIndex, fnOutOfLimit?: IArrayUniqueOutOfLimitCallback<T>)\n{\n\tconst randIndex = (len: number) =>\n\t{\n\t\treturn _randIndex(random, len)\n\t};\n\n\tlet clone = arr.slice();\n\n\tlimit = Math.min(limit || clone.length, clone.length);\n\n\tfnRandIndex = fnRandIndex || randIndex;\n\tloop = !!loop;\n\n\t//ow(limit, ow.number.integer.gt(0));\n\t//ow(fnRandIndex, ow.function);\n\n\texpect(limit, `limit`).integer.gt(0)\n\texpect(fnRandIndex, `fnRandIndex`).function()\n\n\tlet count = limit;\n\tlet len: number;\n\n\tconst _fnClone = function _fnClone(arr: ITSArrayListMaybeReadonly<T>)\n\t{\n\t\tclone = arr.slice();\n\t\tcount = limit;\n\t\tlen = clone.length;\n\t}\n\n\treturn () =>\n\t{\n\t\tlen = clone.length;\n\n\t\tif (len === 0 || count-- === 0)\n\t\t{\n\t\t\tlet _loop: boolean = loop;\n\n\t\t\tif (fnOutOfLimit)\n\t\t\t{\n\t\t\t\tlet ret = fnOutOfLimit(arr, limit, loop, fnRandIndex);\n\n\t\t\t\tif (Array.isArray(ret) && ret.length > 0)\n\t\t\t\t{\n\t\t\t\t\t_fnClone(ret);\n\n\t\t\t\t\t_loop = null;\n\t\t\t\t}\n\t\t\t\telse if (ret == true)\n\t\t\t\t{\n\t\t\t\t\t_loop = true;\n\t\t\t\t}\n\t\t\t\telse if (typeof ret !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\t_loop = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_loop)\n\t\t\t{\n\t\t\t\t_fnClone(arr)\n\t\t\t}\n\t\t\telse if (_loop !== null)\n\t\t\t{\n\t\t\t\tthrow new RangeError(`can't call arrayUnique > ${limit} times`)\n\t\t\t}\n\t\t}\n\n\t\tconst i = fnRandIndex(len);\n\n\t\treturn clone\n\t\t\t.splice(i, 1)[0]\n\t\t\t;\n\t}\n}\n\nexport default dfArrayUnique\n"],"names":["_handleStartEnd","arr","start","end","disableCheck","_end","len","length","enableCheck","Math","max","floor","expect","integer","gt","min","gte","lte","lt","dfArrayIndexOne","random","int","dfArrayShuffle","overwrite","randIndex","_randIndex","cloneArrayLike","Buffer","isBuffer","from","slice","swapAlgorithm2","memoizable","dfArrayFill","float","fn","min_unset","isUnset","max_unset","dfUniformByte","dfUniformFloat","dfUniformInt","function","i","dfArrayIndex","size","size_runtime","prev","ids","includes","push","dfArrayUnique","limit","loop","fnRandIndex","fnOutOfLimit","clone","count","_fnClone","_loop","ret","Array","isArray","RangeError","splice"],"mappings":"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"}