@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,237 @@
|
|
|
1
|
+
/** submodule for {@link "eightpack"} that adds the ability to encode and decode variable byte-sized integers.
|
|
2
|
+
*
|
|
3
|
+
* this part of the library has been separated from {@link "eightpack"} because of the unlikeyhood of being used.
|
|
4
|
+
*
|
|
5
|
+
* - `uvar` stands for an unsigned variable-sized integer.
|
|
6
|
+
* - `ivar` stands for a signed variable-sized integer.
|
|
7
|
+
*
|
|
8
|
+
* ## Purpose
|
|
9
|
+
*
|
|
10
|
+
* these variable-sized encodings are especially useful for encoding the length of other variables in their header (i.e. at the beginning of their sequence).
|
|
11
|
+
*
|
|
12
|
+
* ## How the encoding works
|
|
13
|
+
*
|
|
14
|
+
* ### Unsigned integer case
|
|
15
|
+
*
|
|
16
|
+
* - the byte form of a `uvar` occupies a variable number of bytes to accommodate the unsigned integer that it is holding.
|
|
17
|
+
* - for each byte, it uses the first bit of the octet (`0bXYYYYYYY`) to signal whether the integer carries on to the next byte (X == 1) or not (X == 0).
|
|
18
|
+
* - the remaining 7 bits in each byte are used for base-7 big-endian encoding of the numeric value of the integer (`YYYYYYY`).
|
|
19
|
+
* - you can read more about it on [wikipedia](https://en.wikipedia.org/wiki/Variable-length_quantity).
|
|
20
|
+
*
|
|
21
|
+
* the following table lists the first few bounds of this encoding:
|
|
22
|
+
*
|
|
23
|
+
* | decimal | unsigned big endian binary | unsigned variable binary |
|
|
24
|
+
* |------------------|---------------------------------------------|----------------------------------|
|
|
25
|
+
* | 0 | 0b00000000 0b00000000 0b00000000 0b00000000 | 0b00000000 |
|
|
26
|
+
* | 127 = 2^7 - 1 | 0b00000000 0b00000000 0b00000000 0b01111111 | 0b01111111 |
|
|
27
|
+
* | 128 = 2^7 | 0b00000000 0b00000000 0b00000000 0b10000000 | 0b10000001 0b00000000 |
|
|
28
|
+
* | 16383 = 2^14 - 1 | 0b00000000 0b00000000 0b00111111 0b11111111 | 0b11111111 0b01111111 |
|
|
29
|
+
* | 16384 = 2^14 | 0b00000000 0b00000000 0b01000000 0b00000000 | 0b10000001 0b10000000 0b00000000 |
|
|
30
|
+
*
|
|
31
|
+
* ### Signed integer case
|
|
32
|
+
*
|
|
33
|
+
* - the `ivar` encoding is similar to the `uvar` encoding, with the exception that in the first byte,
|
|
34
|
+
* the second-major bit `Z` of the octet (0b0ZYYYYYY) signals whether the number is positive (Z == 0), or negative (Z == 1).
|
|
35
|
+
*
|
|
36
|
+
* the following table lists the first few bounds of this encoding:
|
|
37
|
+
*
|
|
38
|
+
* | decimal | signed big endian binary | signed variable binary |
|
|
39
|
+
* |---------------------|---------------------------------------------|----------------------------------|
|
|
40
|
+
* | 0 | 0b00000000 0b00000000 0b00000000 0b00000000 | 0b00000000 or 0b01000000 |
|
|
41
|
+
* | 63 = 2^6 - 1 | 0b00000000 0b00000000 0b00000000 0b00111111 | 0b00111111 |
|
|
42
|
+
* | -63 = -(2^6 - 1) | 0b00000000 0b00000000 0b00000000 0b11000001 | 0b01111111 |
|
|
43
|
+
* | 8191 = 2^13 - 1 | 0b00000000 0b00000000 0b00011111 0b11111111 | 0b10111111 0b01111111 |
|
|
44
|
+
* | -8191 = -(2^13 - 1) | 0b00000000 0b00000000 0b11100000 0b00000001 | 0b11111111 0b01111111 |
|
|
45
|
+
*
|
|
46
|
+
* @module
|
|
47
|
+
*/
|
|
48
|
+
/** encode a `number` as a variable sized integer (signed or unsigned) in binary. */
|
|
49
|
+
export const encode_varint = (value, type) => { return encode_varint_array([value,], type); };
|
|
50
|
+
/** encode an array of `number`s as variable sized integers (signed or unsigned) in binary. */
|
|
51
|
+
export const encode_varint_array = (value, type) => {
|
|
52
|
+
return type[0] === "u"
|
|
53
|
+
? encode_uvar_array(value)
|
|
54
|
+
: encode_ivar_array(value);
|
|
55
|
+
};
|
|
56
|
+
/** decode an byte buffer as a variable sized integer of the given `type` (signed or unsigned). */
|
|
57
|
+
export const decode_varint = (buf, offset, type) => {
|
|
58
|
+
const [value, bytesize] = decode_varint_array(buf, offset, type, 1);
|
|
59
|
+
return [value[0], bytesize];
|
|
60
|
+
};
|
|
61
|
+
/** decode an byte buffer as an array of variable sized integers of the given `type` (signed or unsigned) and `array_length`. */
|
|
62
|
+
export const decode_varint_array = (buf, offset, type, array_length) => {
|
|
63
|
+
return type[0] === "u"
|
|
64
|
+
? decode_uvar_array(buf, offset, array_length)
|
|
65
|
+
: decode_ivar_array(buf, offset, array_length);
|
|
66
|
+
};
|
|
67
|
+
/** byte encoder for an array of unsigned-integers.
|
|
68
|
+
* use {@link decode_uvar_array} for decoding the result.
|
|
69
|
+
*/
|
|
70
|
+
export const encode_uvar_array = (value) => {
|
|
71
|
+
const len = value.length, bytes = [];
|
|
72
|
+
for (let i = 0; i < len; i++) {
|
|
73
|
+
let v = value[i];
|
|
74
|
+
v = v * (v >= 0 ? 1 : -1); // converting to absolute value
|
|
75
|
+
const lsb_to_msb = [];
|
|
76
|
+
do {
|
|
77
|
+
lsb_to_msb.push((v & 0b01111111) + 0b10000000);
|
|
78
|
+
v >>= 7;
|
|
79
|
+
} while (v > 0);
|
|
80
|
+
lsb_to_msb[0] &= 0b01111111;
|
|
81
|
+
bytes.push(...lsb_to_msb.reverse());
|
|
82
|
+
}
|
|
83
|
+
return Uint8Array.from(bytes);
|
|
84
|
+
};
|
|
85
|
+
/** byte buffer decoder for an array of unsigned-integers of the given (optional) `array_length`.
|
|
86
|
+
* use {@link encode_uvar_array} for encoding first.
|
|
87
|
+
*/
|
|
88
|
+
export const decode_uvar_array = (buf, offset = 0, array_length) => {
|
|
89
|
+
if (array_length === undefined) {
|
|
90
|
+
array_length = Infinity;
|
|
91
|
+
}
|
|
92
|
+
const array = [], offset_start = offset, buf_length = buf.length;
|
|
93
|
+
// this is a condensed version of {@link decode_uvar}
|
|
94
|
+
let value = 0;
|
|
95
|
+
for (let byte = buf[offset++]; array_length > 0 && offset < buf_length + 1; byte = buf[offset++]) {
|
|
96
|
+
value <<= 7;
|
|
97
|
+
value += byte & 0b01111111;
|
|
98
|
+
if (byte >> 7 === 0) {
|
|
99
|
+
array.push(value);
|
|
100
|
+
array_length--;
|
|
101
|
+
value = 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
offset--;
|
|
105
|
+
return [array, offset - offset_start];
|
|
106
|
+
};
|
|
107
|
+
/** byte encoder for an array of signed-integers.
|
|
108
|
+
* use {@link decode_ivar_array} for decoding the result.
|
|
109
|
+
*/
|
|
110
|
+
export const encode_ivar_array = (value) => {
|
|
111
|
+
const len = value.length, bytes = [];
|
|
112
|
+
for (let i = 0; i < len; i++) {
|
|
113
|
+
let v = value[i];
|
|
114
|
+
const sign = v >= 0 ? 1 : -1, lsb_to_msb = [];
|
|
115
|
+
v = v * sign; // `v` is now positive
|
|
116
|
+
while (v > 0b00111111) {
|
|
117
|
+
lsb_to_msb.push((v & 0b01111111) + 0b10000000);
|
|
118
|
+
v >>= 7;
|
|
119
|
+
}
|
|
120
|
+
lsb_to_msb.push((v & 0b00111111) | (sign == -1 ? 0b11000000 : 0b10000000));
|
|
121
|
+
lsb_to_msb[0] &= 0b01111111;
|
|
122
|
+
bytes.push(...lsb_to_msb.reverse());
|
|
123
|
+
}
|
|
124
|
+
return Uint8Array.from(bytes);
|
|
125
|
+
};
|
|
126
|
+
/** byte buffer decoder for an array of signed-integers of the given (optional) `array_length`.
|
|
127
|
+
* use {@link encode_ivar_array} for encoding first.
|
|
128
|
+
*/
|
|
129
|
+
export const decode_ivar_array = (buf, offset = 0, array_length) => {
|
|
130
|
+
if (array_length === undefined) {
|
|
131
|
+
array_length = Infinity;
|
|
132
|
+
}
|
|
133
|
+
const array = [], offset_start = offset, buf_length = buf.length;
|
|
134
|
+
// this is a condensed version of {@link decode_ivar}
|
|
135
|
+
let sign = 0, value = 0;
|
|
136
|
+
for (let byte = buf[offset++]; array_length > 0 && offset < buf_length + 1; byte = buf[offset++]) {
|
|
137
|
+
if (sign === 0) {
|
|
138
|
+
sign = (byte & 0b01000000) > 0 ? -1 : 1;
|
|
139
|
+
value = (byte & 0b00111111);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
value <<= 7;
|
|
143
|
+
value += byte & 0b01111111;
|
|
144
|
+
}
|
|
145
|
+
if (byte >> 7 === 0) {
|
|
146
|
+
array.push(value * sign);
|
|
147
|
+
array_length--;
|
|
148
|
+
sign = 0;
|
|
149
|
+
value = 0;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
offset--;
|
|
153
|
+
return [array, offset - offset_start];
|
|
154
|
+
};
|
|
155
|
+
/** a single variable-sized unsigned-integer byte encoder.
|
|
156
|
+
* use {@link decode_uvar} for decoding the result.
|
|
157
|
+
*/
|
|
158
|
+
export const encode_uvar = (value) => { return encode_uvar_array([value,]); };
|
|
159
|
+
/// the old implementation, which was designed for a single `number` and was easier to read, has been kept here for reference.
|
|
160
|
+
/*
|
|
161
|
+
const encode_uvar: EncodeFunc<number | bigint> = (value) => {
|
|
162
|
+
value = BigInt(value) * (value >= 0 ? 1n : -1n) // converting to absolute value
|
|
163
|
+
const lsb_to_msb: number[] = []
|
|
164
|
+
do {
|
|
165
|
+
lsb_to_msb.push(Number((value & 0b01111111n) + 0b10000000n))
|
|
166
|
+
value >>= 7n
|
|
167
|
+
} while (value > 0n)
|
|
168
|
+
lsb_to_msb[0] &= 0b01111111
|
|
169
|
+
return Uint8Array.from(lsb_to_msb.reverse())
|
|
170
|
+
}
|
|
171
|
+
*/
|
|
172
|
+
/** a single variable-sized unsigned-integers decoder.
|
|
173
|
+
* use {@link encode_uvar} for encoding first.
|
|
174
|
+
*/
|
|
175
|
+
export const decode_uvar = (buf, offset = 0) => {
|
|
176
|
+
const [value_arr, bytesize] = decode_uvar_array(buf, offset, 1);
|
|
177
|
+
return [value_arr[0], bytesize];
|
|
178
|
+
};
|
|
179
|
+
/// the old implementation, which was designed for a single `number` and was easier to read, has been kept here for reference.
|
|
180
|
+
/*
|
|
181
|
+
const decode_uvar: DecodeFunc<number> = (buf, offset = 0) => {
|
|
182
|
+
const offset_start = offset
|
|
183
|
+
let
|
|
184
|
+
byte: number,
|
|
185
|
+
value: bigint = 0n
|
|
186
|
+
do {
|
|
187
|
+
byte = buf[offset++]
|
|
188
|
+
value <<= 7n
|
|
189
|
+
value += BigInt(byte & 0b01111111)
|
|
190
|
+
} while (byte >> 7 === 1)
|
|
191
|
+
return [Number(value), offset - offset_start]
|
|
192
|
+
}
|
|
193
|
+
*/
|
|
194
|
+
/** a single variable-sized signed-integer byte encoder.
|
|
195
|
+
* use {@link decode_ivar} for decoding the result.
|
|
196
|
+
*/
|
|
197
|
+
export const encode_ivar = (value) => { return encode_ivar_array([value,]); };
|
|
198
|
+
/// the old implementation, which was designed for a single `number` and was easier to read, has been kept here for reference.
|
|
199
|
+
/*
|
|
200
|
+
const encode_ivar: EncodeFunc<number | bigint> = (value) => {
|
|
201
|
+
const
|
|
202
|
+
sign = value >= 0 ? 1n : -1n,
|
|
203
|
+
lsb_to_msb: number[] = []
|
|
204
|
+
value = BigInt(value) * sign // `val` is now positive
|
|
205
|
+
while (value > 0b00111111n) {
|
|
206
|
+
lsb_to_msb.push(Number((value & 0b01111111n) + 0b10000000n))
|
|
207
|
+
value >>= 7n
|
|
208
|
+
}
|
|
209
|
+
lsb_to_msb.push(Number((value & 0b00111111n) | (sign == -1n ? 0b11000000n : 0b10000000n)))
|
|
210
|
+
lsb_to_msb[0] &= 0b01111111
|
|
211
|
+
return Uint8Array.from(lsb_to_msb.reverse())
|
|
212
|
+
}
|
|
213
|
+
*/
|
|
214
|
+
/** a single variable-sized signed-integers decoder.
|
|
215
|
+
* use {@link encode_ivar} for encoding first.
|
|
216
|
+
*/
|
|
217
|
+
export const decode_ivar = (buf, offset = 0) => {
|
|
218
|
+
const [value_arr, bytesize] = decode_ivar_array(buf, offset, 1);
|
|
219
|
+
return [value_arr[0], bytesize];
|
|
220
|
+
};
|
|
221
|
+
/// the old implementation, which was designed for a single `number` and was easier to read, has been kept here for reference.
|
|
222
|
+
/*
|
|
223
|
+
const decode_ivar: DecodeFunc<number> = (buf, offset = 0) => {
|
|
224
|
+
const offset_start = offset
|
|
225
|
+
let
|
|
226
|
+
byte: number = buf[offset++],
|
|
227
|
+
sign: bigint = (byte & 0b01000000) > 0n ? -1n : 1n,
|
|
228
|
+
value: bigint = BigInt(byte & 0b00111111)
|
|
229
|
+
while (byte >> 7 === 1) {
|
|
230
|
+
byte = buf[offset++]
|
|
231
|
+
value <<= 7n
|
|
232
|
+
value += BigInt(byte & 0b01111111)
|
|
233
|
+
}
|
|
234
|
+
value *= sign
|
|
235
|
+
return [Number(value), offset - offset_start]
|
|
236
|
+
}
|
|
237
|
+
*/
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/** utility functions for numeric array manipulation and array math functions.
|
|
2
|
+
*
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import type { NumericArray } from "./typedefs.js";
|
|
6
|
+
/** transpose a 2d array (matrix).
|
|
7
|
+
*
|
|
8
|
+
* if you're wondering what's the difference between this and {@link transposeArray2D} from the {@link "array2d"} submodule,
|
|
9
|
+
* then be my guest, because I am just as puzzled as you.
|
|
10
|
+
* perhaps I forgot that I made one or the other, resulting in duplication.
|
|
11
|
+
*
|
|
12
|
+
* however, there are a few implementation differences between the these two functions:
|
|
13
|
+
* - {@link transpose2D} works by calling the array `map` method.
|
|
14
|
+
* - {@link transposeArray2D} works by assigning values to the new array's transposed indexes.
|
|
15
|
+
*
|
|
16
|
+
* similarities between the two functions:
|
|
17
|
+
* - both transpose sparse 2d arrays to full 2d arrays with the sparse entries replaced with `undefined`.
|
|
18
|
+
* - both use the first element (the first row) to determine the number of columns your 2d array has.
|
|
19
|
+
* this can mean disastrous cropped results if a sparse 2d array is provided where the first row's
|
|
20
|
+
* number of elements (i.e. number of columns) is not the greatest out of all the other rows.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { assertEquals } from "jsr:@std/assert"
|
|
25
|
+
*
|
|
26
|
+
* const sparse_arr2d: Array<number[]> = [
|
|
27
|
+
* [1 , 2 , 3 , 4 , 5 ],
|
|
28
|
+
* [6 , 7 , 8 , 9],
|
|
29
|
+
* [11, 12, 13],
|
|
30
|
+
* [16, 17, 18, 19, 20],
|
|
31
|
+
* ]
|
|
32
|
+
*
|
|
33
|
+
* const sparse_arr2d_transposed = transpose2D(sparse_arr2d)
|
|
34
|
+
*
|
|
35
|
+
* sparse_arr2d_transposed satisfies Array<number>[]
|
|
36
|
+
*
|
|
37
|
+
* assertEquals(sparse_arr2d_transposed, [
|
|
38
|
+
* [1 , 6 , 11 , 16],
|
|
39
|
+
* [2 , 7 , 12 , 17],
|
|
40
|
+
* [3 , 8 , 13 , 18],
|
|
41
|
+
* [4 , 9 , undefined , 19],
|
|
42
|
+
* [5 , undefined , undefined , 20],
|
|
43
|
+
* ])
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare const transpose2D: <T>(matrix: Array<T>[]) => Array<T>[];
|
|
47
|
+
/** compute the left-to-right running difference between successive elements.
|
|
48
|
+
*
|
|
49
|
+
* the returned array's length is decremented by one.
|
|
50
|
+
* as a result, a single element array will turn into an empty array.
|
|
51
|
+
*
|
|
52
|
+
* > [!note]
|
|
53
|
+
* > be careful when using with unsigned typed arrays.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* import { assertEquals } from "jsr:@std/assert"
|
|
58
|
+
*
|
|
59
|
+
* // basic example
|
|
60
|
+
* const arr1 = [1, 2, 3, 4, 5, 99, 88]
|
|
61
|
+
* const arr1_diff = diff(arr1)
|
|
62
|
+
* assertEquals(arr1_diff, [1, 1, 1, 1, 94, -11])
|
|
63
|
+
*
|
|
64
|
+
* // subarray slicing example
|
|
65
|
+
* const arr2 = [1, 2, 3, 4, 5, 99, 88]
|
|
66
|
+
* const arr2_diff = diff(arr2, 2, -1)
|
|
67
|
+
* assertEquals(arr2_diff, [1, 1, 94])
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare const diff: <A extends NumericArray = any>(arr: A, start?: number, end?: number) => A;
|
|
71
|
+
/** compute the right-to-left (ie reverse) running difference between preceding elements.
|
|
72
|
+
*
|
|
73
|
+
* the returned array's length is decremented by one.
|
|
74
|
+
* as a result, a single element array will turn into an empty array.
|
|
75
|
+
*
|
|
76
|
+
* > [!note]
|
|
77
|
+
* > be careful when using with unsigned typed arrays.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```ts
|
|
81
|
+
* import { assertEquals } from "jsr:@std/assert"
|
|
82
|
+
*
|
|
83
|
+
* // basic example
|
|
84
|
+
* const arr1 = [1, 2, 3, 4, 5, 99, 88]
|
|
85
|
+
* const arr1_diff = diff_right(arr1)
|
|
86
|
+
* assertEquals(arr1_diff, [-1, -1, -1, -1, -94, 11])
|
|
87
|
+
*
|
|
88
|
+
* // subarray slicing example
|
|
89
|
+
* const arr2 = [1, 2, 3, 4, 5, 99, 88]
|
|
90
|
+
* const arr2_diff = diff_right(arr2, 2, -1)
|
|
91
|
+
* assertEquals(arr2_diff, [-1, -1, -94])
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare const diff_right: <A extends NumericArray = any>(arr: A, start?: number, end?: number) => A;
|
|
95
|
+
/** cumulative summation of an array.
|
|
96
|
+
*
|
|
97
|
+
* the returned array has its length increased by one.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* import { assertEquals } from "jsr:@std/assert"
|
|
102
|
+
*
|
|
103
|
+
* // basic example
|
|
104
|
+
* const arr1 = [10, 20, 30, 40, 50]
|
|
105
|
+
* const arr1_cum_sum = cumulativeSum(arr1)
|
|
106
|
+
* assertEquals(arr1_cum_sum, [0, 10, 30, 60, 100, 150])
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare const cumulativeSum: <A extends NumericArray = any>(arr: A) => A;
|
|
110
|
+
export type unaryOperator = "abs" | "neg" | "comp";
|
|
111
|
+
export type scalarOperator = "add" | "sub" | "mult" | "div" | "pow" | "rem" | "mod" | "and" | "or" | "xor" | "<<" | ">>" | ">>>";
|
|
112
|
+
export type elementwiseOperator = scalarOperator;
|
|
113
|
+
/** mutate array in-place to get **absolute** value of elements.
|
|
114
|
+
*
|
|
115
|
+
* @category unaryOperator
|
|
116
|
+
* @category inplace
|
|
117
|
+
*/
|
|
118
|
+
export declare const abs: <A extends NumericArray = any>(arr: A, start?: number, end?: number) => A;
|
|
119
|
+
/** mutate array in-place to get **negative** value of elements.
|
|
120
|
+
*
|
|
121
|
+
* @category unaryOperator
|
|
122
|
+
* @category inplace
|
|
123
|
+
*/
|
|
124
|
+
export declare const neg: <A extends NumericArray = any>(arr: A, start?: number, end?: number) => A;
|
|
125
|
+
/** mutate array in-place to get **bitwise complement** value of elements.
|
|
126
|
+
*
|
|
127
|
+
* @category unaryOperator
|
|
128
|
+
* @category inplace
|
|
129
|
+
*/
|
|
130
|
+
export declare const bcomp: <A extends NumericArray = any>(arr: A, start?: number, end?: number) => A;
|
|
131
|
+
/** mutate array in-place to get **bitwise and** against a scalar `value`.
|
|
132
|
+
*
|
|
133
|
+
* @category scalarOperator
|
|
134
|
+
* @category inplace
|
|
135
|
+
*/
|
|
136
|
+
export declare const band: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
137
|
+
/** mutate array in-place to get **bitwise or** against a scalar `value`.
|
|
138
|
+
*
|
|
139
|
+
* @category scalarOperator
|
|
140
|
+
* @category inplace
|
|
141
|
+
*/
|
|
142
|
+
export declare const bor: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
143
|
+
/** mutate array in-place to get **bitwise xor** against a scalar `value`.
|
|
144
|
+
*
|
|
145
|
+
* @category scalarOperator
|
|
146
|
+
* @category inplace
|
|
147
|
+
*/
|
|
148
|
+
export declare const bxor: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
149
|
+
/** mutate array in-place to get **bitwise left-shift** (`<<`) against a scalar `value`.
|
|
150
|
+
*
|
|
151
|
+
* @category scalarOperator
|
|
152
|
+
* @category inplace
|
|
153
|
+
*/
|
|
154
|
+
export declare const blsh: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
155
|
+
/** mutate array in-place to get **bitwise right-shift** (`>>`) against a scalar `value`.
|
|
156
|
+
*
|
|
157
|
+
* @category scalarOperator
|
|
158
|
+
* @category inplace
|
|
159
|
+
*/
|
|
160
|
+
export declare const brsh: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
161
|
+
/** mutate array in-place to get **bitwise unsigned right-shift** (`>>>`) against a scalar `value`.
|
|
162
|
+
*
|
|
163
|
+
* @category scalarOperator
|
|
164
|
+
* @category inplace
|
|
165
|
+
*/
|
|
166
|
+
export declare const bursh: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
167
|
+
/** mutate array in-place to **add** a scalar `value`.
|
|
168
|
+
*
|
|
169
|
+
* @category scalarOperator
|
|
170
|
+
* @category inplace
|
|
171
|
+
*/
|
|
172
|
+
export declare const add: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
173
|
+
/** mutate array in-place to **subtract** a scalar `value`.
|
|
174
|
+
*
|
|
175
|
+
* @category scalarOperator
|
|
176
|
+
* @category inplace
|
|
177
|
+
*/
|
|
178
|
+
export declare const sub: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
179
|
+
/** mutate array in-place to **multiply** by a scalar `value`.
|
|
180
|
+
*
|
|
181
|
+
* @category scalarOperator
|
|
182
|
+
* @category inplace
|
|
183
|
+
*/
|
|
184
|
+
export declare const mult: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
185
|
+
/** mutate array in-place to **divide** by a scalar `value`.
|
|
186
|
+
*
|
|
187
|
+
* @category scalarOperator
|
|
188
|
+
* @category inplace
|
|
189
|
+
*/
|
|
190
|
+
export declare const div: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
191
|
+
/** mutate array in-place to raise it to the **power** of a scalar `value`.
|
|
192
|
+
*
|
|
193
|
+
* @category scalarOperator
|
|
194
|
+
* @category inplace
|
|
195
|
+
*/
|
|
196
|
+
export declare const pow: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
197
|
+
/** mutate array in-place to get the **remainder** (`%`) when divided by scalar `value`.
|
|
198
|
+
*
|
|
199
|
+
* note that this is slightly different from the modulo {@link mod} operator, as this can have a negative sign.
|
|
200
|
+
*
|
|
201
|
+
* @category scalarOperator
|
|
202
|
+
* @category inplace
|
|
203
|
+
*/
|
|
204
|
+
export declare const rem: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
205
|
+
/** mutate array in-place to get the **modulo** when divided by scalar `value`.
|
|
206
|
+
*
|
|
207
|
+
* note that this is slightly different from the remainder {@link rem} operator, as this always returns a positive number.
|
|
208
|
+
*
|
|
209
|
+
* @category scalarOperator
|
|
210
|
+
* @category inplace
|
|
211
|
+
*/
|
|
212
|
+
export declare const mod: <A extends NumericArray = any>(arr: A, value: number, start?: number, end?: number) => A;
|
|
213
|
+
//# sourceMappingURL=numericarray.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numericarray.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@oazmi/kitchensink/0.10.0/src/numericarray.ts"],"names":[],"mappings":"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"}
|