@oazmi/superbuild 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/_dnt.shims.d.ts +2 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/_dnt.shims.js +57 -0
- package/esm/deps/jsr.io/@oazmi/esbuild-types/0.28.0/src/mod.d.ts +598 -0
- package/esm/deps/jsr.io/@oazmi/esbuild-types/0.28.0/src/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/esbuild-types/0.28.0/src/mod.js +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/alias.d.ts +617 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/alias.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/alias.js +671 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/array1d.d.ts +487 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/array1d.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/array1d.js +536 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/array2d.d.ts +266 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/array2d.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/array2d.js +318 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/binder.d.ts +368 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/binder.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/binder.js +380 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/crossenv.d.ts +711 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/crossenv.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/crossenv.js +1173 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/cryptoman.d.ts +171 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/cryptoman.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/cryptoman.js +308 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/deps.d.ts +10 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/deps.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/deps.js +10 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/eightpack.d.ts +168 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/eightpack.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/eightpack.js +236 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/eightpack_varint.d.ts +90 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/eightpack_varint.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/eightpack_varint.js +237 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericarray.d.ts +213 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericarray.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericarray.js +363 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericmethods.d.ts +233 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericmethods.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericmethods.js +256 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/pathman.d.ts +1436 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/pathman.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/pathman.js +1730 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/promiseman.d.ts +647 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/promiseman.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/promiseman.js +762 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/stringman.d.ts +538 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/stringman.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/stringman.js +626 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/struct.d.ts +734 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/struct.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/struct.js +764 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedbuffer.d.ts +137 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedbuffer.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedbuffer.js +234 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedefs.d.ts +391 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedefs.d.ts.map +1 -0
- package/esm/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedefs.js +8 -0
- package/esm/deps.d.ts +56 -0
- package/esm/deps.d.ts.map +1 -0
- package/esm/deps.js +37 -0
- package/esm/esbuild/metafile.d.ts +90 -0
- package/esm/esbuild/metafile.d.ts.map +1 -0
- package/esm/esbuild/metafile.js +275 -0
- package/esm/esbuild/native.d.ts +95 -0
- package/esm/esbuild/native.d.ts.map +1 -0
- package/esm/esbuild/native.js +127 -0
- package/esm/esbuild/outputfile.d.ts +86 -0
- package/esm/esbuild/outputfile.d.ts.map +1 -0
- package/esm/esbuild/outputfile.js +221 -0
- package/esm/esbuild/strongtypes.d.ts +90 -0
- package/esm/esbuild/strongtypes.d.ts.map +1 -0
- package/esm/esbuild/strongtypes.js +8 -0
- package/esm/esbuild/typedefs.d.ts +121 -0
- package/esm/esbuild/typedefs.d.ts.map +1 -0
- package/esm/esbuild/typedefs.js +55 -0
- package/esm/esbuild/weaktypes.d.ts +46 -0
- package/esm/esbuild/weaktypes.d.ts.map +1 -0
- package/esm/esbuild/weaktypes.js +8 -0
- package/esm/funcdefs.d.ts +89 -0
- package/esm/funcdefs.d.ts.map +1 -0
- package/esm/funcdefs.js +145 -0
- package/esm/mod.d.ts +4 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +2 -0
- package/esm/package.json +3 -0
- package/esm/plugins/emissions_driver.d.ts +33 -0
- package/esm/plugins/emissions_driver.d.ts.map +1 -0
- package/esm/plugins/emissions_driver.js +260 -0
- package/esm/plugins/long_build.d.ts +138 -0
- package/esm/plugins/long_build.d.ts.map +1 -0
- package/esm/plugins/long_build.js +288 -0
- package/esm/plugins/native_replica.d.ts +48 -0
- package/esm/plugins/native_replica.d.ts.map +1 -0
- package/esm/plugins/native_replica.js +122 -0
- package/esm/super/build.d.ts +53 -0
- package/esm/super/build.d.ts.map +1 -0
- package/esm/super/build.js +39 -0
- package/esm/super/build_context.d.ts +83 -0
- package/esm/super/build_context.d.ts.map +1 -0
- package/esm/super/build_context.js +124 -0
- package/esm/super/mod.d.ts +12 -0
- package/esm/super/mod.d.ts.map +1 -0
- package/esm/super/mod.js +9 -0
- package/esm/super/plugin.d.ts +23 -0
- package/esm/super/plugin.d.ts.map +1 -0
- package/esm/super/plugin.js +31 -0
- package/esm/super/plugin_build.d.ts +38 -0
- package/esm/super/plugin_build.d.ts.map +1 -0
- package/esm/super/plugin_build.js +198 -0
- package/esm/super/typedefs.d.ts +323 -0
- package/esm/super/typedefs.d.ts.map +1 -0
- package/esm/super/typedefs.js +10 -0
- package/esm/typedefs.d.ts +21 -0
- package/esm/typedefs.d.ts.map +1 -0
- package/esm/typedefs.js +5 -0
- package/license.md +37 -0
- package/package.json +88 -0
- package/readme.md +181 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/** utility functions for handling buffers and typed arrays, and also reading and writing data to them.
|
|
2
|
+
*
|
|
3
|
+
* TODO: needs more tests and a lot more examples on how to use, or provide visualization of the function's action.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { NumericArray, NumericDType, TypedArray, TypedArrayConstructor } from "./typedefs.js";
|
|
8
|
+
/** checks if an object `obj` is a {@link TypedArray}, based on simply checking whether `obj.buffer` exists or not.
|
|
9
|
+
*
|
|
10
|
+
* this is certainly not a very robust way of verifying.
|
|
11
|
+
* a better approach would be to check if `obj instanceof Object.getPrototypeOf(Uint8Array)`, but this is quicker.
|
|
12
|
+
*/
|
|
13
|
+
export declare const isTypedArray: (obj: unknown) => obj is TypedArray;
|
|
14
|
+
/** get a typed array constructor by specifying the type as a string. */
|
|
15
|
+
export declare const typed_array_constructor_of: <DType extends NumericDType = NumericDType>(type: `${DType}${string}`) => TypedArrayConstructor<DType>;
|
|
16
|
+
/** dictates if the native endianness of your `TypedArray`s is little endian. */
|
|
17
|
+
export declare const getEnvironmentEndianness: () => boolean;
|
|
18
|
+
/** this variable dictates if the native endianness of your `TypedArray`s is little endian. */
|
|
19
|
+
export declare const env_is_little_endian: boolean;
|
|
20
|
+
/** swap the endianness of the provided `Uint8Array` buffer array **in-place**,
|
|
21
|
+
* given that each element has a byte-size of `bytesize`.
|
|
22
|
+
*
|
|
23
|
+
* @category inplace
|
|
24
|
+
*/
|
|
25
|
+
export declare const swapEndiannessInplace: (buf: Uint8Array, bytesize: number) => typeof buf;
|
|
26
|
+
/** 10x faster implementation of {@link swapEndiannessInplace} that does not mutatate the original `buf` array.
|
|
27
|
+
*
|
|
28
|
+
* @category copy
|
|
29
|
+
*/
|
|
30
|
+
export declare const swapEndiannessFast: (buf: Uint8Array, bytesize: number) => Uint8Array<ArrayBuffer>;
|
|
31
|
+
/** concatenate a bunch of `Uint8Array` and `Array<number>` into a single `Uint8Array` array.
|
|
32
|
+
*
|
|
33
|
+
* @category copy
|
|
34
|
+
*/
|
|
35
|
+
export declare const concatBytes: (...arrs: (Uint8Array | Array<number>)[]) => Uint8Array<ArrayBuffer>;
|
|
36
|
+
/** concatenate a bunch of {@link TypedArray}.
|
|
37
|
+
*
|
|
38
|
+
* @category copy
|
|
39
|
+
*/
|
|
40
|
+
export declare const concatTyped: <TA extends TypedArray>(...arrs: TA[]) => TA;
|
|
41
|
+
/** split {@link TypedArray} **in-place**, after every `step` number of elements through the use of subarray views.
|
|
42
|
+
*
|
|
43
|
+
* @deprecated kind of pointless, when {@link sliceSkipTypedSubarray} and {@link sliceSkip} exist.
|
|
44
|
+
* @category inplace
|
|
45
|
+
*/
|
|
46
|
+
export declare const splitTypedSubarray: <TA extends TypedArray>(arr: TA, step: number) => Array<TA>;
|
|
47
|
+
/** slice `slice_length` number of elements, then jump forward `skip_length` number of elements, and repeat.
|
|
48
|
+
*
|
|
49
|
+
* optionally provide a `start` index to begin at, and an `end` index to stop at.
|
|
50
|
+
*
|
|
51
|
+
* if you want to skip first and slice second, you can set `start = skip_length` to get the desired equivalent result.
|
|
52
|
+
*
|
|
53
|
+
* @category copy
|
|
54
|
+
*/
|
|
55
|
+
export declare const sliceSkip: <A extends NumericArray>(arr: A, slice_length: number, skip_length?: number, start?: number, end?: number) => Array<A>;
|
|
56
|
+
/** similar to {@link sliceSkip}, but for subarray views of {@link TypedArray}.
|
|
57
|
+
*
|
|
58
|
+
* @category inplace
|
|
59
|
+
*/
|
|
60
|
+
export declare const sliceSkipTypedSubarray: <TA extends TypedArray>(arr: TA, slice_length: number, skip_length?: number, start?: number, end?: number) => Array<TA>;
|
|
61
|
+
/** find out if two regular, or typed arrays are element wise equal, and have the same lengths. */
|
|
62
|
+
export declare const isIdentical: <T extends ([] | TypedArray)>(arr1: T, arr2: T) => boolean;
|
|
63
|
+
/** find out if two regular, or typed arrays are element wise equal upto the last element of the shorter of the two arrays. */
|
|
64
|
+
export declare const isSubidentical: <T extends ([] | TypedArray)>(arr1: T, arr2: T) => boolean;
|
|
65
|
+
/** represents continuous intervals at which slices should be performed by {@link sliceContinuous}.
|
|
66
|
+
*
|
|
67
|
+
* if the final entry/element is `undefined`, it would indicate an open end towards infinity (ie till end of array).
|
|
68
|
+
*/
|
|
69
|
+
export type ContinuousIntervals = [...number[], number | undefined];
|
|
70
|
+
/** continuously slice an array (or string) at the provided continuous interval indexes.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* const arr = Array(100).map((v, i) => i) // === [0, 1, 2, ..., 99]
|
|
75
|
+
* const slices: ContinuousIntervals = [0, 20, 30, 70, undefined]
|
|
76
|
+
* sliceContinuous(arr, slices) // === [[0, 1, 2, ..., 19], [20, 21, ..., 29], [30, ..., 69], [70, ..., 99]]
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare const sliceContinuous: <T extends any[] | string>(arr: T, slice_intervals: ContinuousIntervals) => T[];
|
|
80
|
+
/** exactly similar to {@link sliceContinuous}, but catered toward providing {@link TypedArray}'s subarray views, instead of doing actual copy-slicing. */
|
|
81
|
+
export declare const sliceContinuousTypedSubarray: <T extends TypedArray>(arr: T, slice_intervals: ContinuousIntervals) => T[];
|
|
82
|
+
/** represents intervals at which slices should be performed by {@link sliceIntervals}.
|
|
83
|
+
*
|
|
84
|
+
* - every even element dictates a `start` index, which should be:
|
|
85
|
+
* - a positive `number`
|
|
86
|
+
* - every odd element dictates the subsequent `end` index, which can one of:
|
|
87
|
+
* - a positive `number`
|
|
88
|
+
* - a negative `number`, for reverse indexing
|
|
89
|
+
* - or `undefined`, for last element (inclusive) indexing
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* // mathematically represents the set of intervals: { [0, 10), [20, 30), [90, Inf), [15, arr.length - 15) }
|
|
94
|
+
* const my_intervals: Intervals = [0, 10, 20, 30, 90, undefined, 15, -15]
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export type Intervals = [start_0: number, end_0: number | undefined, ...start_i_end_i: (number | undefined)[]];
|
|
98
|
+
/** slice an array (or string) at the provided flattened 2-tuple of interval indexes.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const arr = Array(100).map((v, i) => i) // === [0, 1, 2, ..., 99]
|
|
103
|
+
* const slices: Intervals = [0, 10, 20, 30, 90, undefined, 15, -15]
|
|
104
|
+
* sliceIntervals(arr, slices) // === [[0, 1, 2, ..., 9], [20, 21, ..., 29], [90, ..., 99], [15, ..., 84]]
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare const sliceIntervals: <T extends any[] | string>(arr: T, slice_intervals: Intervals) => T[];
|
|
108
|
+
/** exactly similar to {@link sliceIntervals}, but catered toward providing {@link TypedArray}'s subarray views, instead of doing actual copy-slicing. */
|
|
109
|
+
export declare const sliceIntervalsTypedSubarray: <T extends TypedArray>(arr: T, slice_intervals: Intervals) => T[];
|
|
110
|
+
/** represents interval starting points and lengths at which slices should be performed by {@link sliceIntervalLengths}.
|
|
111
|
+
*
|
|
112
|
+
* - every even element dictates a `start` index, which should be:
|
|
113
|
+
* - a positive `number`
|
|
114
|
+
* - every odd element dictates the subsequent `len` length of the interval, which can one of:
|
|
115
|
+
* - a positive `number`
|
|
116
|
+
* - or `undefined`, for slicing till end
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* // mathematically represents the set of intervals: { [0, 0 + 10), [20, 20 + 10), [90, Inf), [15, 15 + 70) } === { [0, 10), [20, 30), [90, 100), [15, 85) }
|
|
121
|
+
* const my_intervals: IntervalLengths = [0, 10, 20, 10, 90, undefined, 15, 70]
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export type IntervalLengths = [start_0: number, len_0: number | undefined, ...start_i_len_i: (number | undefined)[]];
|
|
125
|
+
/** slice an array (or string) at the provided flattened 2-tuple of (interval starting index, interval length).
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts
|
|
129
|
+
* const arr = Array(100).map((v, i) => i) // === [0, 1, 2, ..., 99]
|
|
130
|
+
* const slices: IntervalLengths = [0, 10, 20, 10, 90, undefined, 15, 70]
|
|
131
|
+
* sliceIntervalLengths(arr, slices) // === [[0, 1, 2, ..., 9], [20, 21, ..., 29], [90, ..., 99], [15, ..., 84]]
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export declare const sliceIntervalLengths: <T extends any[] | string>(arr: T, slice_intervals: IntervalLengths) => T[];
|
|
135
|
+
/** exactly similar to {@link sliceIntervalLengths}, but catered toward providing {@link TypedArray}'s subarray views, instead of doing actual copy-slicing. */
|
|
136
|
+
export declare const sliceIntervalLengthsTypedSubarray: <T extends TypedArray>(arr: T, slice_intervals: Intervals) => T[];
|
|
137
|
+
//# sourceMappingURL=typedbuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedbuffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/typedbuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/** utility functions for handling buffers and typed arrays, and also reading and writing data to them.
|
|
2
|
+
*
|
|
3
|
+
* TODO: needs more tests and a lot more examples on how to use, or provide visualization of the function's action.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { console_error } from "./alias.js";
|
|
8
|
+
import { resolveRange } from "./array1d.js";
|
|
9
|
+
import { DEBUG } from "./deps.js";
|
|
10
|
+
import { min } from "./numericmethods.js";
|
|
11
|
+
import { constructorOf } from "./struct.js";
|
|
12
|
+
/** checks if an object `obj` is a {@link TypedArray}, based on simply checking whether `obj.buffer` exists or not.
|
|
13
|
+
*
|
|
14
|
+
* this is certainly not a very robust way of verifying.
|
|
15
|
+
* a better approach would be to check if `obj instanceof Object.getPrototypeOf(Uint8Array)`, but this is quicker.
|
|
16
|
+
*/
|
|
17
|
+
export const isTypedArray = (obj) => (obj.buffer ? true : false);
|
|
18
|
+
/** get a typed array constructor by specifying the type as a string. */
|
|
19
|
+
export const typed_array_constructor_of = (type) => {
|
|
20
|
+
if (type[2] === "c") {
|
|
21
|
+
return Uint8ClampedArray;
|
|
22
|
+
}
|
|
23
|
+
type = (type[0] + type[1]); // this is to trim excessive tailing characters
|
|
24
|
+
switch (type) {
|
|
25
|
+
case "u1": return Uint8Array;
|
|
26
|
+
case "u2": return Uint16Array;
|
|
27
|
+
case "u4": return Uint32Array;
|
|
28
|
+
//case "u8": return BigUint64Array as TypedArrayConstructor<DType>
|
|
29
|
+
case "i1": return Int8Array;
|
|
30
|
+
case "i2": return Int16Array;
|
|
31
|
+
case "i4": return Int32Array;
|
|
32
|
+
//case "i8": return BigInt64Array as TypedArrayConstructor<DType>
|
|
33
|
+
case "f4": return Float32Array;
|
|
34
|
+
case "f8": return Float64Array;
|
|
35
|
+
}
|
|
36
|
+
console_error(DEBUG.ERROR && "an unrecognized typed array type `\"${type}\"` was provided");
|
|
37
|
+
return Uint8Array;
|
|
38
|
+
};
|
|
39
|
+
/** dictates if the native endianness of your `TypedArray`s is little endian. */
|
|
40
|
+
export const getEnvironmentEndianness = () => ((new Uint8Array(Uint32Array.of(1).buffer))[0] === 1
|
|
41
|
+
? true
|
|
42
|
+
: false);
|
|
43
|
+
/** this variable dictates if the native endianness of your `TypedArray`s is little endian. */
|
|
44
|
+
export const env_is_little_endian = /*@__PURE__*/ getEnvironmentEndianness();
|
|
45
|
+
/** swap the endianness of the provided `Uint8Array` buffer array **in-place**,
|
|
46
|
+
* given that each element has a byte-size of `bytesize`.
|
|
47
|
+
*
|
|
48
|
+
* @category inplace
|
|
49
|
+
*/
|
|
50
|
+
export const swapEndiannessInplace = (buf, bytesize) => {
|
|
51
|
+
const len = buf.byteLength;
|
|
52
|
+
for (let i = 0; i < len; i += bytesize) {
|
|
53
|
+
buf.subarray(i, i + bytesize).reverse();
|
|
54
|
+
}
|
|
55
|
+
return buf;
|
|
56
|
+
};
|
|
57
|
+
/** 10x faster implementation of {@link swapEndiannessInplace} that does not mutatate the original `buf` array.
|
|
58
|
+
*
|
|
59
|
+
* @category copy
|
|
60
|
+
*/
|
|
61
|
+
export const swapEndiannessFast = (buf, bytesize) => {
|
|
62
|
+
const len = buf.byteLength, swapped_buf = new Uint8Array(len), bs = bytesize;
|
|
63
|
+
for (let offset = 0; offset < bs; offset++) {
|
|
64
|
+
const a = bs - 1 - offset * 2;
|
|
65
|
+
for (let i = offset; i < len + offset; i += bs) {
|
|
66
|
+
swapped_buf[i] = buf[i + a];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/* the above loop is equivalent to the following:
|
|
70
|
+
* ```ts
|
|
71
|
+
* for (let offset = 0; offset < bs; offset++) {
|
|
72
|
+
* for (let i = 0; i < len; i += bs) { swapped_buf[i + offset] = buf[i + bs - 1 - offset] }
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
return swapped_buf;
|
|
77
|
+
};
|
|
78
|
+
/** concatenate a bunch of `Uint8Array` and `Array<number>` into a single `Uint8Array` array.
|
|
79
|
+
*
|
|
80
|
+
* @category copy
|
|
81
|
+
*/
|
|
82
|
+
export const concatBytes = (...arrs) => {
|
|
83
|
+
const offsets = [0];
|
|
84
|
+
for (const arr of arrs) {
|
|
85
|
+
offsets.push(offsets[offsets.length - 1] + arr.length);
|
|
86
|
+
}
|
|
87
|
+
const outarr = new Uint8Array(offsets.pop());
|
|
88
|
+
for (const arr of arrs) {
|
|
89
|
+
outarr.set(arr, offsets.shift());
|
|
90
|
+
}
|
|
91
|
+
return outarr;
|
|
92
|
+
};
|
|
93
|
+
/** concatenate a bunch of {@link TypedArray}.
|
|
94
|
+
*
|
|
95
|
+
* @category copy
|
|
96
|
+
*/
|
|
97
|
+
export const concatTyped = (...arrs) => {
|
|
98
|
+
const offsets = [0];
|
|
99
|
+
for (const arr of arrs) {
|
|
100
|
+
offsets.push(offsets[offsets.length - 1] + arr.length);
|
|
101
|
+
}
|
|
102
|
+
const outarr = new (constructorOf(arrs[0]))(offsets.pop());
|
|
103
|
+
for (const arr of arrs) {
|
|
104
|
+
outarr.set(arr, offsets.shift());
|
|
105
|
+
}
|
|
106
|
+
return outarr;
|
|
107
|
+
};
|
|
108
|
+
/** split {@link TypedArray} **in-place**, after every `step` number of elements through the use of subarray views.
|
|
109
|
+
*
|
|
110
|
+
* @deprecated kind of pointless, when {@link sliceSkipTypedSubarray} and {@link sliceSkip} exist.
|
|
111
|
+
* @category inplace
|
|
112
|
+
*/
|
|
113
|
+
export const splitTypedSubarray = (arr, step) => sliceSkipTypedSubarray(arr, step);
|
|
114
|
+
/** slice `slice_length` number of elements, then jump forward `skip_length` number of elements, and repeat.
|
|
115
|
+
*
|
|
116
|
+
* optionally provide a `start` index to begin at, and an `end` index to stop at.
|
|
117
|
+
*
|
|
118
|
+
* if you want to skip first and slice second, you can set `start = skip_length` to get the desired equivalent result.
|
|
119
|
+
*
|
|
120
|
+
* @category copy
|
|
121
|
+
*/
|
|
122
|
+
export const sliceSkip = (arr, slice_length, skip_length = 0, start, end) => {
|
|
123
|
+
[start, end,] = resolveRange(start, end, arr.length);
|
|
124
|
+
const out_arr = [];
|
|
125
|
+
for (let offset = start; offset < end; offset += slice_length + skip_length) {
|
|
126
|
+
out_arr.push(arr.slice(offset, offset + slice_length));
|
|
127
|
+
}
|
|
128
|
+
return out_arr;
|
|
129
|
+
};
|
|
130
|
+
/** similar to {@link sliceSkip}, but for subarray views of {@link TypedArray}.
|
|
131
|
+
*
|
|
132
|
+
* @category inplace
|
|
133
|
+
*/
|
|
134
|
+
export const sliceSkipTypedSubarray = (arr, slice_length, skip_length = 0, start, end) => {
|
|
135
|
+
[start, end,] = resolveRange(start, end, arr.length);
|
|
136
|
+
const out_arr = [];
|
|
137
|
+
for (let offset = start; offset < end; offset += slice_length + skip_length) {
|
|
138
|
+
out_arr.push(arr.subarray(offset, offset + slice_length));
|
|
139
|
+
}
|
|
140
|
+
return out_arr;
|
|
141
|
+
};
|
|
142
|
+
/** find out if two regular, or typed arrays are element wise equal, and have the same lengths. */
|
|
143
|
+
export const isIdentical = (arr1, arr2) => {
|
|
144
|
+
if (arr1.length !== arr2.length) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
return isSubidentical(arr1, arr2);
|
|
148
|
+
};
|
|
149
|
+
/** find out if two regular, or typed arrays are element wise equal upto the last element of the shorter of the two arrays. */
|
|
150
|
+
export const isSubidentical = (arr1, arr2) => {
|
|
151
|
+
const len = min(arr1.length, arr2.length);
|
|
152
|
+
for (let i = 0; i < len; i++) {
|
|
153
|
+
if (arr1[i] !== arr2[i]) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
};
|
|
159
|
+
/** continuously slice an array (or string) at the provided continuous interval indexes.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```ts
|
|
163
|
+
* const arr = Array(100).map((v, i) => i) // === [0, 1, 2, ..., 99]
|
|
164
|
+
* const slices: ContinuousIntervals = [0, 20, 30, 70, undefined]
|
|
165
|
+
* sliceContinuous(arr, slices) // === [[0, 1, 2, ..., 19], [20, 21, ..., 29], [30, ..., 69], [70, ..., 99]]
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export const sliceContinuous = (arr, slice_intervals) => {
|
|
169
|
+
const out_arr = [];
|
|
170
|
+
for (let i = 1; i < slice_intervals.length; i++) {
|
|
171
|
+
out_arr.push(arr.slice(slice_intervals[i - 1], slice_intervals[i]));
|
|
172
|
+
}
|
|
173
|
+
return out_arr;
|
|
174
|
+
};
|
|
175
|
+
/** exactly similar to {@link sliceContinuous}, but catered toward providing {@link TypedArray}'s subarray views, instead of doing actual copy-slicing. */
|
|
176
|
+
export const sliceContinuousTypedSubarray = (arr, slice_intervals) => {
|
|
177
|
+
const out_arr = [];
|
|
178
|
+
for (let i = 1; i < slice_intervals.length; i++) {
|
|
179
|
+
out_arr.push(arr.subarray(slice_intervals[i - 1], slice_intervals[i]));
|
|
180
|
+
}
|
|
181
|
+
return out_arr;
|
|
182
|
+
};
|
|
183
|
+
/** slice an array (or string) at the provided flattened 2-tuple of interval indexes.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* const arr = Array(100).map((v, i) => i) // === [0, 1, 2, ..., 99]
|
|
188
|
+
* const slices: Intervals = [0, 10, 20, 30, 90, undefined, 15, -15]
|
|
189
|
+
* sliceIntervals(arr, slices) // === [[0, 1, 2, ..., 9], [20, 21, ..., 29], [90, ..., 99], [15, ..., 84]]
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export const sliceIntervals = (arr, slice_intervals) => {
|
|
193
|
+
const out_arr = [];
|
|
194
|
+
for (let i = 1; i < slice_intervals.length; i += 2) {
|
|
195
|
+
out_arr.push(arr.slice(slice_intervals[i - 1], slice_intervals[i]));
|
|
196
|
+
}
|
|
197
|
+
return out_arr;
|
|
198
|
+
};
|
|
199
|
+
/** exactly similar to {@link sliceIntervals}, but catered toward providing {@link TypedArray}'s subarray views, instead of doing actual copy-slicing. */
|
|
200
|
+
export const sliceIntervalsTypedSubarray = (arr, slice_intervals) => {
|
|
201
|
+
const out_arr = [];
|
|
202
|
+
for (let i = 1; i < slice_intervals.length; i += 2) {
|
|
203
|
+
out_arr.push(arr.subarray(slice_intervals[i - 1], slice_intervals[i]));
|
|
204
|
+
}
|
|
205
|
+
return out_arr;
|
|
206
|
+
};
|
|
207
|
+
/** slice an array (or string) at the provided flattened 2-tuple of (interval starting index, interval length).
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ```ts
|
|
211
|
+
* const arr = Array(100).map((v, i) => i) // === [0, 1, 2, ..., 99]
|
|
212
|
+
* const slices: IntervalLengths = [0, 10, 20, 10, 90, undefined, 15, 70]
|
|
213
|
+
* sliceIntervalLengths(arr, slices) // === [[0, 1, 2, ..., 9], [20, 21, ..., 29], [90, ..., 99], [15, ..., 84]]
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export const sliceIntervalLengths = (arr, slice_intervals) => {
|
|
217
|
+
const out_arr = [];
|
|
218
|
+
for (let i = 1; i < slice_intervals.length; i += 2) {
|
|
219
|
+
out_arr.push(arr.slice(slice_intervals[i - 1], slice_intervals[i] === undefined
|
|
220
|
+
? undefined
|
|
221
|
+
: slice_intervals[i - 1] + slice_intervals[i]));
|
|
222
|
+
}
|
|
223
|
+
return out_arr;
|
|
224
|
+
};
|
|
225
|
+
/** exactly similar to {@link sliceIntervalLengths}, but catered toward providing {@link TypedArray}'s subarray views, instead of doing actual copy-slicing. */
|
|
226
|
+
export const sliceIntervalLengthsTypedSubarray = (arr, slice_intervals) => {
|
|
227
|
+
const out_arr = [];
|
|
228
|
+
for (let i = 1; i < slice_intervals.length; i += 2) {
|
|
229
|
+
out_arr.push(arr.subarray(slice_intervals[i - 1], slice_intervals[i] === undefined
|
|
230
|
+
? undefined
|
|
231
|
+
: slice_intervals[i - 1] + slice_intervals[i]));
|
|
232
|
+
}
|
|
233
|
+
return out_arr;
|
|
234
|
+
};
|