@amxts/core 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.
Files changed (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/README.ru.md +162 -0
  4. package/amxmodx/base/include/amxconst.inc +594 -0
  5. package/amxmodx/base/include/amxmisc.inc +902 -0
  6. package/amxmodx/base/include/amxmodx.inc +3447 -0
  7. package/amxmodx/base/include/amxmodx_version.inc +20 -0
  8. package/amxmodx/base/include/cellarray.inc +525 -0
  9. package/amxmodx/base/include/cellstack.inc +166 -0
  10. package/amxmodx/base/include/celltrie.inc +412 -0
  11. package/amxmodx/base/include/core.inc +202 -0
  12. package/amxmodx/base/include/csstats.inc +298 -0
  13. package/amxmodx/base/include/csstats_const.inc +29 -0
  14. package/amxmodx/base/include/cstrike.inc +1287 -0
  15. package/amxmodx/base/include/cstrike_const.inc +521 -0
  16. package/amxmodx/base/include/csx.inc +259 -0
  17. package/amxmodx/base/include/cvars.inc +547 -0
  18. package/amxmodx/base/include/datapack.inc +161 -0
  19. package/amxmodx/base/include/dbi.inc +154 -0
  20. package/amxmodx/base/include/dodconst.inc +152 -0
  21. package/amxmodx/base/include/dodfun.inc +152 -0
  22. package/amxmodx/base/include/dodstats.inc +69 -0
  23. package/amxmodx/base/include/dodx.inc +161 -0
  24. package/amxmodx/base/include/engine.inc +1343 -0
  25. package/amxmodx/base/include/engine_const.inc +310 -0
  26. package/amxmodx/base/include/engine_stocks.inc +248 -0
  27. package/amxmodx/base/include/esf.inc +70 -0
  28. package/amxmodx/base/include/esf_const.inc +74 -0
  29. package/amxmodx/base/include/fakemeta.inc +1127 -0
  30. package/amxmodx/base/include/fakemeta_const.inc +793 -0
  31. package/amxmodx/base/include/fakemeta_stocks.inc +395 -0
  32. package/amxmodx/base/include/fakemeta_util.inc +882 -0
  33. package/amxmodx/base/include/file.inc +666 -0
  34. package/amxmodx/base/include/float.inc +422 -0
  35. package/amxmodx/base/include/fun.inc +333 -0
  36. package/amxmodx/base/include/gameconfig.inc +93 -0
  37. package/amxmodx/base/include/geoip.inc +264 -0
  38. package/amxmodx/base/include/ham_const.inc +4352 -0
  39. package/amxmodx/base/include/hamsandwich.inc +439 -0
  40. package/amxmodx/base/include/hlsdk_const.inc +808 -0
  41. package/amxmodx/base/include/json.inc +777 -0
  42. package/amxmodx/base/include/lang.inc +119 -0
  43. package/amxmodx/base/include/message_const.inc +1130 -0
  44. package/amxmodx/base/include/message_stocks.inc +161 -0
  45. package/amxmodx/base/include/messages.inc +604 -0
  46. package/amxmodx/base/include/newmenus.inc +387 -0
  47. package/amxmodx/base/include/ns.inc +754 -0
  48. package/amxmodx/base/include/ns_const.inc +196 -0
  49. package/amxmodx/base/include/nvault.inc +154 -0
  50. package/amxmodx/base/include/regex.inc +348 -0
  51. package/amxmodx/base/include/sockets.inc +183 -0
  52. package/amxmodx/base/include/sorting.inc +107 -0
  53. package/amxmodx/base/include/sqlx.inc +582 -0
  54. package/amxmodx/base/include/string.inc +786 -0
  55. package/amxmodx/base/include/string_const.inc +156 -0
  56. package/amxmodx/base/include/string_stocks.inc +325 -0
  57. package/amxmodx/base/include/textparse_ini.inc +214 -0
  58. package/amxmodx/base/include/textparse_smc.inc +261 -0
  59. package/amxmodx/base/include/tfcconst.inc +84 -0
  60. package/amxmodx/base/include/tfcstats.inc +62 -0
  61. package/amxmodx/base/include/tfcx.inc +148 -0
  62. package/amxmodx/base/include/time.inc +118 -0
  63. package/amxmodx/base/include/tsconst.inc +154 -0
  64. package/amxmodx/base/include/tsfun.inc +198 -0
  65. package/amxmodx/base/include/tsstats.inc +65 -0
  66. package/amxmodx/base/include/tsx.inc +88 -0
  67. package/amxmodx/base/include/vault.inc +60 -0
  68. package/amxmodx/base/include/vector.inc +131 -0
  69. package/amxmodx/base/include/xs.inc +1570 -0
  70. package/as/amxts.d.ts +153 -0
  71. package/as/constants.ts +4730 -0
  72. package/as/effects.ts +1449 -0
  73. package/as/entities.ts +5482 -0
  74. package/as/events.ts +3054 -0
  75. package/as/facade.ts +4639 -0
  76. package/as/flags.ts +299 -0
  77. package/as/fs.ts +287 -0
  78. package/as/hooks.ts +18536 -0
  79. package/as/kit.ts +25 -0
  80. package/as/lib/check.ts +86 -0
  81. package/as/modules/http.ts +184 -0
  82. package/as/natives.ts +11845 -0
  83. package/as/os.ts +30 -0
  84. package/as/promise.ts +1392 -0
  85. package/as/promise.types.d.ts +82 -0
  86. package/as/remote.ts +288 -0
  87. package/as/tsconfig.json +22 -0
  88. package/as/vector.ts +65 -0
  89. package/bin/amxts.mjs +10 -0
  90. package/includes/menu_core.inc +355 -0
  91. package/includes/order.txt +54 -0
  92. package/includes/sources.json +27 -0
  93. package/includes/universal_config.inc +355 -0
  94. package/lint/oxlint-plugin.mjs +77 -0
  95. package/node_modules/assemblyscript/LICENSE +201 -0
  96. package/node_modules/assemblyscript/NOTICE +93 -0
  97. package/node_modules/assemblyscript/package.json +63 -0
  98. package/node_modules/assemblyscript/std/README.md +6 -0
  99. package/node_modules/assemblyscript/std/assembly/array.ts +526 -0
  100. package/node_modules/assemblyscript/std/assembly/arraybuffer.ts +77 -0
  101. package/node_modules/assemblyscript/std/assembly/atomics.ts +127 -0
  102. package/node_modules/assemblyscript/std/assembly/bindings/asyncify.ts +16 -0
  103. package/node_modules/assemblyscript/std/assembly/bindings/dom.ts +291 -0
  104. package/node_modules/assemblyscript/std/assembly/bindings/node.ts +6 -0
  105. package/node_modules/assemblyscript/std/assembly/builtins.ts +2631 -0
  106. package/node_modules/assemblyscript/std/assembly/compat.ts +2 -0
  107. package/node_modules/assemblyscript/std/assembly/console.ts +42 -0
  108. package/node_modules/assemblyscript/std/assembly/crypto.ts +9 -0
  109. package/node_modules/assemblyscript/std/assembly/dataview.ts +181 -0
  110. package/node_modules/assemblyscript/std/assembly/date.ts +373 -0
  111. package/node_modules/assemblyscript/std/assembly/diagnostics.ts +11 -0
  112. package/node_modules/assemblyscript/std/assembly/error.ts +44 -0
  113. package/node_modules/assemblyscript/std/assembly/function.ts +38 -0
  114. package/node_modules/assemblyscript/std/assembly/index.d.ts +2822 -0
  115. package/node_modules/assemblyscript/std/assembly/iterator.ts +35 -0
  116. package/node_modules/assemblyscript/std/assembly/map.ts +260 -0
  117. package/node_modules/assemblyscript/std/assembly/math.ts +3289 -0
  118. package/node_modules/assemblyscript/std/assembly/memory.ts +123 -0
  119. package/node_modules/assemblyscript/std/assembly/number.ts +388 -0
  120. package/node_modules/assemblyscript/std/assembly/object.ts +36 -0
  121. package/node_modules/assemblyscript/std/assembly/performance.ts +9 -0
  122. package/node_modules/assemblyscript/std/assembly/polyfills.ts +27 -0
  123. package/node_modules/assemblyscript/std/assembly/process.ts +50 -0
  124. package/node_modules/assemblyscript/std/assembly/reference.ts +48 -0
  125. package/node_modules/assemblyscript/std/assembly/regexp.ts +12 -0
  126. package/node_modules/assemblyscript/std/assembly/rt/README.md +83 -0
  127. package/node_modules/assemblyscript/std/assembly/rt/common.ts +81 -0
  128. package/node_modules/assemblyscript/std/assembly/rt/index-incremental.ts +2 -0
  129. package/node_modules/assemblyscript/std/assembly/rt/index-minimal.ts +2 -0
  130. package/node_modules/assemblyscript/std/assembly/rt/index-stub.ts +1 -0
  131. package/node_modules/assemblyscript/std/assembly/rt/index.d.ts +37 -0
  132. package/node_modules/assemblyscript/std/assembly/rt/itcms.ts +419 -0
  133. package/node_modules/assemblyscript/std/assembly/rt/rtrace.ts +15 -0
  134. package/node_modules/assemblyscript/std/assembly/rt/stub.ts +133 -0
  135. package/node_modules/assemblyscript/std/assembly/rt/tcms.ts +254 -0
  136. package/node_modules/assemblyscript/std/assembly/rt/tlsf.ts +592 -0
  137. package/node_modules/assemblyscript/std/assembly/rt.ts +87 -0
  138. package/node_modules/assemblyscript/std/assembly/set.ts +220 -0
  139. package/node_modules/assemblyscript/std/assembly/shared/feature.ts +65 -0
  140. package/node_modules/assemblyscript/std/assembly/shared/runtime.ts +11 -0
  141. package/node_modules/assemblyscript/std/assembly/shared/target.ts +11 -0
  142. package/node_modules/assemblyscript/std/assembly/shared/tsconfig.json +11 -0
  143. package/node_modules/assemblyscript/std/assembly/shared/typeinfo.ts +72 -0
  144. package/node_modules/assemblyscript/std/assembly/staticarray.ts +401 -0
  145. package/node_modules/assemblyscript/std/assembly/string.ts +847 -0
  146. package/node_modules/assemblyscript/std/assembly/symbol.ts +114 -0
  147. package/node_modules/assemblyscript/std/assembly/table.ts +16 -0
  148. package/node_modules/assemblyscript/std/assembly/tsconfig.json +6 -0
  149. package/node_modules/assemblyscript/std/assembly/typedarray.ts +1945 -0
  150. package/node_modules/assemblyscript/std/assembly/uri.ts +17 -0
  151. package/node_modules/assemblyscript/std/assembly/util/bytes.ts +107 -0
  152. package/node_modules/assemblyscript/std/assembly/util/casemap.ts +497 -0
  153. package/node_modules/assemblyscript/std/assembly/util/error.ts +54 -0
  154. package/node_modules/assemblyscript/std/assembly/util/hash.ts +117 -0
  155. package/node_modules/assemblyscript/std/assembly/util/math.ts +1922 -0
  156. package/node_modules/assemblyscript/std/assembly/util/memory.ts +290 -0
  157. package/node_modules/assemblyscript/std/assembly/util/number.ts +873 -0
  158. package/node_modules/assemblyscript/std/assembly/util/sort.ts +313 -0
  159. package/node_modules/assemblyscript/std/assembly/util/string.ts +1202 -0
  160. package/node_modules/assemblyscript/std/assembly/util/uri.ts +275 -0
  161. package/node_modules/assemblyscript/std/assembly/vector.ts +4 -0
  162. package/node_modules/assemblyscript/std/assembly.json +16 -0
  163. package/node_modules/assemblyscript/std/portable/index.d.ts +462 -0
  164. package/node_modules/assemblyscript/std/portable/index.js +416 -0
  165. package/node_modules/assemblyscript/std/portable.json +11 -0
  166. package/node_modules/assemblyscript/std/types/assembly/index.d.ts +1 -0
  167. package/node_modules/assemblyscript/std/types/assembly/package.json +3 -0
  168. package/node_modules/assemblyscript/std/types/portable/index.d.ts +1 -0
  169. package/node_modules/assemblyscript/std/types/portable/package.json +3 -0
  170. package/node_modules/assemblyscript/tsconfig-base.json +13 -0
  171. package/package.json +112 -0
  172. package/runtime/deps/assemblyscript/LICENSE +201 -0
  173. package/runtime/deps/assemblyscript/NOTICE +93 -0
  174. package/runtime/deps/assemblyscript/bin/asc.js +35 -0
  175. package/runtime/deps/assemblyscript/dist/asc.js +25035 -0
  176. package/runtime/deps/assemblyscript/dist/assemblyscript.js +337 -0
  177. package/runtime/deps/assemblyscript/node_modules/binaryen/LICENSE +201 -0
  178. package/runtime/deps/assemblyscript/node_modules/binaryen/index.js +28905 -0
  179. package/runtime/deps/assemblyscript/node_modules/binaryen/package.json +50 -0
  180. package/runtime/deps/assemblyscript/node_modules/long/LICENSE +202 -0
  181. package/runtime/deps/assemblyscript/node_modules/long/index.js +1581 -0
  182. package/runtime/deps/assemblyscript/node_modules/long/package.json +58 -0
  183. package/runtime/deps/assemblyscript/package.json +114 -0
  184. package/runtime/host/amxts.inc +85 -0
  185. package/runtime/licenses/AMXX-LICENSE.txt +34 -0
  186. package/runtime/licenses/AssemblyScript-LICENSE +201 -0
  187. package/runtime/licenses/AssemblyScript-NOTICE +93 -0
  188. package/runtime/licenses/Binaryen-LICENSE +201 -0
  189. package/runtime/licenses/Bun-LICENSE.md +84 -0
  190. package/runtime/licenses/GPL-3.0.txt +674 -0
  191. package/runtime/licenses/LLVM-LICENSE.TXT +279 -0
  192. package/runtime/licenses/README.md +25 -0
  193. package/runtime/licenses/WAMR-LICENSE +219 -0
  194. package/runtime/natives.txt +1095 -0
  195. package/runtime/patches/README.md +59 -0
  196. package/runtime/patches/assemblyscript-0.28.20-amxts.patch +14174 -0
  197. package/runtime/patches/wamr-2.4.5-amxts.patch +364 -0
  198. package/scripts/apply-docs.ts +508 -0
  199. package/scripts/asc.ts +27 -0
  200. package/scripts/auto-imports.ts +258 -0
  201. package/scripts/build-wasm.ts +595 -0
  202. package/scripts/check.ts +93 -0
  203. package/scripts/compile-cache.ts +179 -0
  204. package/scripts/compile.ts +401 -0
  205. package/scripts/docker-server.ts +73 -0
  206. package/scripts/docs/as/amxts.ts +210 -0
  207. package/scripts/docs/as/effects.ts +1684 -0
  208. package/scripts/docs/as/facade.ts +3302 -0
  209. package/scripts/docs/as/fs.ts +173 -0
  210. package/scripts/docs/as/lib/check.ts +68 -0
  211. package/scripts/docs/as/modules/http.ts +66 -0
  212. package/scripts/docs/as/os.ts +16 -0
  213. package/scripts/docs/as/promise.ts +132 -0
  214. package/scripts/docs/as/promise.types.ts +63 -0
  215. package/scripts/docs/as/vector.ts +48 -0
  216. package/scripts/docs/entities.ts +2338 -0
  217. package/scripts/docs/events.ts +245 -0
  218. package/scripts/docs/game.ts +497 -0
  219. package/scripts/docs/messages.ts +148 -0
  220. package/scripts/file-contents.ts +74 -0
  221. package/scripts/includes.ts +134 -0
  222. package/scripts/player-fields.ts +866 -0
  223. package/scripts/plugin-cache.ts +92 -0
  224. package/scripts/plugin-natives.ts +1157 -0
  225. package/scripts/prebuilt.ts +268 -0
  226. package/scripts/prepare.ts +134 -0
  227. package/scripts/project.ts +973 -0
  228. package/scripts/run.ts +28 -0
  229. package/scripts/shared-modules.ts +906 -0
  230. package/scripts/system.ts +33 -0
  231. package/scripts/tracked-fs.ts +115 -0
  232. package/scripts/typed-configs.ts +788 -0
  233. package/scripts/ui.ts +77 -0
  234. package/src/cli-api.mjs +175 -0
  235. package/src/parser/include-parser.ts +506 -0
  236. package/src/system.mjs +155 -0
  237. package/src/testing/compile-cache.ts +31 -0
  238. package/src/testing/compile.ts +222 -0
  239. package/src/testing/coroutines.ts +191 -0
  240. package/src/testing/index.ts +39 -0
  241. package/src/testing/kits.ts +55 -0
  242. package/src/testing/memory.ts +125 -0
  243. package/src/testing/natives.ts +925 -0
  244. package/src/testing/server.ts +1874 -0
  245. package/src/testing/setup.ts +63 -0
  246. package/src/testing/tables.ts +139 -0
  247. package/src/types.ts +51 -0
@@ -0,0 +1,1945 @@
1
+ import { COMPARATOR, SORT } from "./util/sort";
2
+ import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_NOTIMPLEMENTED } from "./util/error";
3
+ import { joinIntegerArray, joinFloatArray } from "./util/string";
4
+ import { REVERSE, FILL } from "./util/bytes";
5
+ import { idof } from "./builtins";
6
+ import { ArrayBufferView } from "./arraybuffer";
7
+
8
+ export class Int8Array extends ArrayBufferView {
9
+ [key: number]: i8;
10
+
11
+ // @ts-ignore: decorator
12
+ @lazy
13
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<i8>();
14
+
15
+ constructor(length: i32) {
16
+ super(length, alignof<i8>());
17
+ }
18
+
19
+ get length(): i32 {
20
+ return this.byteLength;
21
+ }
22
+
23
+ @operator("[]")
24
+ private __get(index: i32): i8 {
25
+ if (<u32>index >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
26
+ return load<i8>(this.dataStart + <usize>index);
27
+ }
28
+
29
+ @unsafe @operator("{}")
30
+ private __uget(index: i32): i8 {
31
+ return load<i8>(this.dataStart + <usize>index);
32
+ }
33
+
34
+ @operator("[]=")
35
+ private __set(index: i32, value: native<i8>): void {
36
+ if (<u32>index >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
37
+ store<i8>(this.dataStart + <usize>index, value);
38
+ }
39
+
40
+ @unsafe @operator("{}=")
41
+ private __uset(index: i32, value: native<i8>): void {
42
+ store<i8>(this.dataStart + <usize>index, value);
43
+ }
44
+
45
+ at(index: i32): i8 {
46
+ let len = this.byteLength;
47
+ index += select(0, len, index >= 0);
48
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
49
+ return load<i8>(this.dataStart + <usize>index);
50
+ }
51
+
52
+ includes(searchElement: i8, fromIndex: i32 = 0): bool {
53
+ return INCLUDES<Int8Array, i8>(this, searchElement, fromIndex);
54
+ }
55
+
56
+ indexOf(searchElement: i8, fromIndex: i32 = 0): i32 {
57
+ return INDEX_OF<Int8Array, i8>(this, searchElement, fromIndex);
58
+ }
59
+
60
+ lastIndexOf(searchElement: i8, fromIndex: i32 = this.length): i32 {
61
+ return LAST_INDEX_OF<Int8Array, i8>(this, searchElement, fromIndex);
62
+ }
63
+
64
+ fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int8Array {
65
+ FILL<u8>(this.dataStart, this.length, u8(value), start, end);
66
+ return this;
67
+ }
68
+
69
+ sort(comparator: (a: i8, b: i8) => i32 = COMPARATOR<i8>()): Int8Array {
70
+ SORT<i8>(this.dataStart, this.length, comparator);
71
+ return this;
72
+ }
73
+
74
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int8Array {
75
+ return SLICE<Int8Array, i8>(this, begin, end);
76
+ }
77
+
78
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int8Array {
79
+ return SUBARRAY<Int8Array, i8>(this, begin, end);
80
+ }
81
+
82
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Int8Array {
83
+ return COPY_WITHIN<Int8Array, i8>(this, target, start, end);
84
+ }
85
+
86
+ reduce<T extends number>(
87
+ fn: (accumulator: T, value: i8, index: i32, array: Int8Array) => T,
88
+ initialValue: T,
89
+ ): T {
90
+ return REDUCE<Int8Array, i8, T>(this, fn, initialValue);
91
+ }
92
+
93
+ reduceRight<T extends number>(
94
+ fn: (accumulator: T, value: i8, index: i32, array: Int8Array) => T,
95
+ initialValue: T,
96
+ ): T {
97
+ return REDUCE_RIGHT<Int8Array, i8, T>(this, fn, initialValue);
98
+ }
99
+
100
+ map(fn: (value: i8, index: i32, self: Int8Array) => i8): Int8Array {
101
+ return MAP<Int8Array, i8>(this, fn);
102
+ }
103
+
104
+ filter(fn: (value: i8, index: i32, self: Int8Array) => bool): Int8Array {
105
+ return FILTER<Int8Array, i8>(this, fn);
106
+ }
107
+
108
+ findIndex(fn: (value: i8, index: i32, self: Int8Array) => bool): i32 {
109
+ return FIND_INDEX<Int8Array, i8>(this, fn);
110
+ }
111
+
112
+ findLastIndex(fn: (value: i8, index: i32, self: Int8Array) => bool): i32 {
113
+ return FIND_LAST_INDEX<Int8Array, i8>(this, fn);
114
+ }
115
+
116
+ some(fn: (value: i8, index: i32, self: Int8Array) => bool): bool {
117
+ return SOME<Int8Array, i8>(this, fn);
118
+ }
119
+
120
+ every(fn: (value: i8, index: i32, self: Int8Array) => bool): bool {
121
+ return EVERY<Int8Array, i8>(this, fn);
122
+ }
123
+
124
+ forEach(fn: (value: i8, index: i32, self: Int8Array) => void): void {
125
+ FOREACH<Int8Array, i8>(this, fn);
126
+ }
127
+
128
+ reverse(): Int8Array {
129
+ REVERSE<u8>(this.dataStart, this.length);
130
+ return this;
131
+ }
132
+
133
+ join(separator: string = ","): string {
134
+ return joinIntegerArray<i8>(this.dataStart, this.length, separator);
135
+ }
136
+
137
+ toString(): string {
138
+ return this.join();
139
+ }
140
+
141
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
142
+ SET(this, source, offset);
143
+ }
144
+
145
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Int8Array {
146
+ return WRAP<Int8Array, i8>(buffer, byteOffset, length);
147
+ }
148
+ }
149
+
150
+ export class Uint8Array extends ArrayBufferView {
151
+ [key: number]: u8;
152
+
153
+ // @ts-ignore: decorator
154
+ @lazy
155
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<u8>();
156
+
157
+ constructor(length: i32) {
158
+ super(length, alignof<u8>());
159
+ }
160
+
161
+ get length(): i32 {
162
+ return this.byteLength;
163
+ }
164
+
165
+ @operator("[]")
166
+ private __get(index: i32): u8 {
167
+ if (<u32>index >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
168
+ return load<u8>(this.dataStart + <usize>index);
169
+ }
170
+
171
+ @unsafe @operator("{}")
172
+ private __uget(index: i32): u8 {
173
+ return load<u8>(this.dataStart + <usize>index);
174
+ }
175
+
176
+ @operator("[]=")
177
+ private __set(index: i32, value: native<u8>): void {
178
+ if (<u32>index >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
179
+ store<u8>(this.dataStart + <usize>index, value);
180
+ }
181
+
182
+ @unsafe @operator("{}=")
183
+ private __uset(index: i32, value: native<u8>): void {
184
+ store<u8>(this.dataStart + <usize>index, value);
185
+ }
186
+
187
+ at(index: i32): u8 {
188
+ let len = this.byteLength;
189
+ index += select(0, len, index >= 0);
190
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
191
+ return load<u8>(this.dataStart + <usize>index);
192
+ }
193
+
194
+ includes(searchElement: u8, fromIndex: i32 = 0): bool {
195
+ return INCLUDES<Uint8Array, u8>(this, searchElement, fromIndex);
196
+ }
197
+
198
+ indexOf(searchElement: u8, fromIndex: i32 = 0): i32 {
199
+ return INDEX_OF<Uint8Array, u8>(this, searchElement, fromIndex);
200
+ }
201
+
202
+ lastIndexOf(searchElement: u8, fromIndex: i32 = this.length): i32 {
203
+ return LAST_INDEX_OF<Uint8Array, u8>(this, searchElement, fromIndex);
204
+ }
205
+
206
+ fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8Array {
207
+ FILL<u8>(this.dataStart, this.length, u8(value), start, end);
208
+ return this;
209
+ }
210
+
211
+ sort(comparator: (a: u8, b: u8) => i32 = COMPARATOR<u8>()): Uint8Array {
212
+ SORT<u8>(this.dataStart, this.length, comparator);
213
+ return this;
214
+ }
215
+
216
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8Array {
217
+ return SLICE<Uint8Array, u8>(this, begin, end);
218
+ }
219
+
220
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8Array {
221
+ return SUBARRAY<Uint8Array, u8>(this, begin, end);
222
+ }
223
+
224
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Uint8Array {
225
+ return COPY_WITHIN<Uint8Array, u8>(this, target, start, end);
226
+ }
227
+
228
+ reduce<T extends number>(
229
+ fn: (accumulator: T, value: u8, index: i32, array: Uint8Array) => T,
230
+ initialValue: T,
231
+ ): T {
232
+ return REDUCE<Uint8Array, u8, T>(this, fn, initialValue);
233
+ }
234
+
235
+ reduceRight<T extends number>(
236
+ fn: (accumulator: T, value: u8, index: i32, array: Uint8Array) => T,
237
+ initialValue: T,
238
+ ): T {
239
+ return REDUCE_RIGHT<Uint8Array, u8, T>(this, fn, initialValue);
240
+ }
241
+
242
+ map(fn: (value: u8, index: i32, self: Uint8Array) => u8): Uint8Array {
243
+ return MAP<Uint8Array, u8>(this, fn);
244
+ }
245
+
246
+ filter(fn: (value: u8, index: i32, self: Uint8Array) => bool): Uint8Array {
247
+ return FILTER<Uint8Array, u8>(this, fn);
248
+ }
249
+
250
+ findIndex(fn: (value: u8, index: i32, self: Uint8Array) => bool): i32 {
251
+ return FIND_INDEX<Uint8Array, u8>(this, fn);
252
+ }
253
+
254
+ findLastIndex(fn: (value: u8, index: i32, self: Uint8Array) => bool): i32 {
255
+ return FIND_LAST_INDEX<Uint8Array, u8>(this, fn);
256
+ }
257
+
258
+ some(fn: (value: u8, index: i32, self: Uint8Array) => bool): bool {
259
+ return SOME<Uint8Array, u8>(this, fn);
260
+ }
261
+
262
+ every(fn: (value: u8, index: i32, self: Uint8Array) => bool): bool {
263
+ return EVERY<Uint8Array, u8>(this, fn);
264
+ }
265
+
266
+ forEach(fn: (value: u8, index: i32, self: Uint8Array) => void): void {
267
+ FOREACH<Uint8Array, u8>(this, fn);
268
+ }
269
+
270
+ reverse(): Uint8Array {
271
+ REVERSE<u8>(this.dataStart, this.length);
272
+ return this;
273
+ }
274
+
275
+ join(separator: string = ","): string {
276
+ return joinIntegerArray<u8>(this.dataStart, this.length, separator);
277
+ }
278
+
279
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
280
+ SET(this, source, offset);
281
+ }
282
+
283
+ toString(): string {
284
+ return this.join();
285
+ }
286
+
287
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Uint8Array {
288
+ return WRAP<Uint8Array, u8>(buffer, byteOffset, length);
289
+ }
290
+ }
291
+
292
+ export class Uint8ClampedArray extends ArrayBufferView {
293
+ [key: number]: u8;
294
+
295
+ // @ts-ignore: decorator
296
+ @lazy
297
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<u8>();
298
+
299
+ constructor(length: i32) {
300
+ super(length, alignof<u8>());
301
+ }
302
+
303
+ get length(): i32 {
304
+ return this.byteLength;
305
+ }
306
+
307
+ @operator("[]")
308
+ private __get(index: i32): u8 {
309
+ if (<u32>index >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
310
+ return load<u8>(this.dataStart + <usize>index);
311
+ }
312
+
313
+ @unsafe @operator("{}")
314
+ private __uget(index: i32): u8 {
315
+ return load<u8>(this.dataStart + <usize>index);
316
+ }
317
+
318
+ @operator("[]=")
319
+ private __set(index: i32, value: native<u8>): void {
320
+ if (<u32>index >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
321
+ store<u8>(this.dataStart + <usize>index, ~(<i32>value >> 31) & (((255 - value) >> 31) | value));
322
+ }
323
+
324
+ @unsafe @operator("{}=")
325
+ private __uset(index: i32, value: native<u8>): void {
326
+ store<u8>(this.dataStart + <usize>index, ~(<i32>value >> 31) & (((255 - value) >> 31) | value));
327
+ }
328
+
329
+ at(index: i32): u8 {
330
+ let len = this.byteLength;
331
+ index += select(0, len, index >= 0);
332
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
333
+ return load<u8>(this.dataStart + <usize>index);
334
+ }
335
+
336
+ includes(searchElement: u8, fromIndex: i32 = 0): bool {
337
+ return INCLUDES<Uint8ClampedArray, u8>(this, searchElement, fromIndex);
338
+ }
339
+
340
+ indexOf(searchElement: u8, fromIndex: i32 = 0): i32 {
341
+ return INDEX_OF<Uint8ClampedArray, u8>(this, searchElement, fromIndex);
342
+ }
343
+
344
+ lastIndexOf(searchElement: u8, fromIndex: i32 = this.length): i32 {
345
+ return LAST_INDEX_OF<Uint8ClampedArray, u8>(this, searchElement, fromIndex);
346
+ }
347
+
348
+ fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8ClampedArray {
349
+ value = ~(value >> 31) & (((255 - value) >> 31) | value);
350
+ FILL<u8>(this.dataStart, this.length, u8(value), start, end);
351
+ return this;
352
+ }
353
+
354
+ sort(comparator: (a: u8, b: u8) => i32 = COMPARATOR<u8>()): Uint8ClampedArray {
355
+ SORT<u8>(this.dataStart, this.length, comparator);
356
+ return this;
357
+ }
358
+
359
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8ClampedArray {
360
+ return SLICE<Uint8ClampedArray, u8>(this, begin, end);
361
+ }
362
+
363
+ subarray(start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8ClampedArray {
364
+ return SUBARRAY<Uint8ClampedArray, u8>(this, start, end);
365
+ }
366
+
367
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Uint8ClampedArray {
368
+ return COPY_WITHIN<Uint8ClampedArray, u8>(this, target, start, end);
369
+ }
370
+
371
+ reduce<T extends number>(
372
+ fn: (accumulator: T, value: u8, index: i32, array: Uint8ClampedArray) => T,
373
+ initialValue: T,
374
+ ): T {
375
+ return REDUCE<Uint8ClampedArray, u8, T>(this, fn, initialValue);
376
+ }
377
+
378
+ reduceRight<T extends number>(
379
+ fn: (accumulator: T, value: u8, index: i32, array: Uint8ClampedArray) => T,
380
+ initialValue: T,
381
+ ): T {
382
+ return REDUCE_RIGHT<Uint8ClampedArray, u8, T>(this, fn, initialValue);
383
+ }
384
+
385
+ map(fn: (value: u8, index: i32, self: Uint8ClampedArray) => u8): Uint8ClampedArray {
386
+ return MAP<Uint8ClampedArray, u8>(this, fn);
387
+ }
388
+
389
+ filter(fn: (value: u8, index: i32, self: Uint8ClampedArray) => bool): Uint8ClampedArray {
390
+ return FILTER<Uint8ClampedArray, u8>(this, fn);
391
+ }
392
+
393
+ findIndex(fn: (value: u8, index: i32, self: Uint8ClampedArray) => bool): i32 {
394
+ return FIND_INDEX<Uint8ClampedArray, u8>(this, fn);
395
+ }
396
+
397
+ findLastIndex(fn: (value: u8, index: i32, self: Uint8ClampedArray) => bool): i32 {
398
+ return FIND_LAST_INDEX<Uint8ClampedArray, u8>(this, fn);
399
+ }
400
+
401
+ some(fn: (value: u8, index: i32, self: Uint8ClampedArray) => bool): bool {
402
+ return SOME<Uint8ClampedArray, u8>(this, fn);
403
+ }
404
+
405
+ every(fn: (value: u8, index: i32, self: Uint8ClampedArray) => bool): bool {
406
+ return EVERY<Uint8ClampedArray, u8>(this, fn);
407
+ }
408
+
409
+ forEach(fn: (value: u8, index: i32, self: Uint8ClampedArray) => void): void {
410
+ FOREACH<Uint8ClampedArray, u8>(this, fn);
411
+ }
412
+
413
+ reverse(): Uint8ClampedArray {
414
+ REVERSE<u8>(this.dataStart, this.length);
415
+ return this;
416
+ }
417
+
418
+ join(separator: string = ","): string {
419
+ return joinIntegerArray<u8>(this.dataStart, this.length, separator);
420
+ }
421
+
422
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
423
+ SET(this, source, offset);
424
+ }
425
+
426
+ toString(): string {
427
+ return this.join();
428
+ }
429
+
430
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Uint8ClampedArray {
431
+ return WRAP<Uint8ClampedArray, u8>(buffer, byteOffset, length);
432
+ }
433
+ }
434
+
435
+ export class Int16Array extends ArrayBufferView {
436
+ [key: number]: i16;
437
+
438
+ // @ts-ignore: decorator
439
+ @lazy
440
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<i16>();
441
+
442
+ constructor(length: i32) {
443
+ super(length, alignof<i16>());
444
+ }
445
+
446
+ get length(): i32 {
447
+ return this.byteLength >>> alignof<i16>();
448
+ }
449
+
450
+ @operator("[]")
451
+ private __get(index: i32): i16 {
452
+ if (<u32>index >= <u32>this.byteLength >>> alignof<i16>()) throw new RangeError(E_INDEXOUTOFRANGE);
453
+ return load<i16>(this.dataStart + (<usize>index << alignof<i16>()));
454
+ }
455
+
456
+ @unsafe @operator("{}")
457
+ private __uget(index: i32): i16 {
458
+ return load<i16>(this.dataStart + (<usize>index << alignof<i16>()));
459
+ }
460
+
461
+ @operator("[]=")
462
+ private __set(index: i32, value: native<i16>): void {
463
+ if (<u32>index >= <u32>this.byteLength >>> alignof<i16>()) throw new RangeError(E_INDEXOUTOFRANGE);
464
+ store<i16>(this.dataStart + (<usize>index << alignof<i16>()), value);
465
+ }
466
+
467
+ @unsafe @operator("{}=")
468
+ private __uset(index: i32, value: native<i16>): void {
469
+ store<i16>(this.dataStart + (<usize>index << alignof<i16>()), value);
470
+ }
471
+
472
+ at(index: i32): i16 {
473
+ let len = this.byteLength >>> alignof<i16>();
474
+ index += select(0, len, index >= 0);
475
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
476
+ return load<i16>(this.dataStart + (<usize>index << alignof<i16>()));
477
+ }
478
+
479
+ includes(searchElement: i16, fromIndex: i32 = 0): bool {
480
+ return INCLUDES<Int16Array, i16>(this, searchElement, fromIndex);
481
+ }
482
+
483
+ indexOf(searchElement: i16, fromIndex: i32 = 0): i32 {
484
+ return INDEX_OF<Int16Array, i16>(this, searchElement, fromIndex);
485
+ }
486
+
487
+ lastIndexOf(searchElement: i16, fromIndex: i32 = this.length): i32 {
488
+ return LAST_INDEX_OF<Int16Array, i16>(this, searchElement, fromIndex);
489
+ }
490
+
491
+ fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int16Array {
492
+ FILL<u16>(this.dataStart, this.length, u16(value), start, end);
493
+ return this;
494
+ }
495
+
496
+ sort(comparator: (a: i16, b: i16) => i32 = COMPARATOR<i16>()): Int16Array {
497
+ SORT<i16>(this.dataStart, this.length, comparator);
498
+ return this;
499
+ }
500
+
501
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int16Array {
502
+ return SLICE<Int16Array, i16>(this, begin, end);
503
+ }
504
+
505
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int16Array {
506
+ return SUBARRAY<Int16Array, i16>(this, begin, end);
507
+ }
508
+
509
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Int16Array {
510
+ return COPY_WITHIN<Int16Array, i16>(this, target, start, end);
511
+ }
512
+
513
+ reduce<T extends number>(
514
+ fn: (accumulator: T, value: i16, index: i32, array: Int16Array) => T,
515
+ initialValue: T,
516
+ ): T {
517
+ return REDUCE<Int16Array, i16, T>(this, fn, initialValue);
518
+ }
519
+
520
+ reduceRight<T extends number>(
521
+ fn: (accumulator: T, value: i16, index: i32, array: Int16Array) => T,
522
+ initialValue: T,
523
+ ): T {
524
+ return REDUCE_RIGHT<Int16Array, i16, T>(this, fn, initialValue);
525
+ }
526
+
527
+ map(fn: (value: i16, index: i32, self: Int16Array) => i16): Int16Array {
528
+ return MAP<Int16Array, i16>(this, fn);
529
+ }
530
+
531
+ filter(fn: (value: i16, index: i32, self: Int16Array) => bool): Int16Array {
532
+ return FILTER<Int16Array, i16>(this, fn);
533
+ }
534
+
535
+ findIndex(fn: (value: i16, index: i32, self: Int16Array) => bool): i32 {
536
+ return FIND_INDEX<Int16Array, i16>(this, fn);
537
+ }
538
+
539
+ findLastIndex(fn: (value: i16, index: i32, self: Int16Array) => bool): i32 {
540
+ return FIND_LAST_INDEX<Int16Array, i16>(this, fn);
541
+ }
542
+
543
+ some(fn: (value: i16, index: i32, self: Int16Array) => bool): bool {
544
+ return SOME<Int16Array, i16>(this, fn);
545
+ }
546
+
547
+ every(fn: (value: i16, index: i32, self: Int16Array) => bool): bool {
548
+ return EVERY<Int16Array, i16>(this, fn);
549
+ }
550
+
551
+ forEach(fn: (value: i16, index: i32, self: Int16Array) => void): void {
552
+ FOREACH<Int16Array, i16>(this, fn);
553
+ }
554
+
555
+ reverse(): Int16Array {
556
+ REVERSE<u16>(this.dataStart, this.length);
557
+ return this;
558
+ }
559
+
560
+ join(separator: string = ","): string {
561
+ return joinIntegerArray<i16>(this.dataStart, this.length, separator);
562
+ }
563
+
564
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
565
+ SET(this, source, offset);
566
+ }
567
+
568
+ toString(): string {
569
+ return this.join();
570
+ }
571
+
572
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Int16Array {
573
+ return WRAP<Int16Array, i16>(buffer, byteOffset, length);
574
+ }
575
+ }
576
+
577
+ export class Uint16Array extends ArrayBufferView {
578
+ [key: number]: u16;
579
+
580
+ // @ts-ignore: decorator
581
+ @lazy
582
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<u16>();
583
+
584
+ constructor(length: i32) {
585
+ super(length, alignof<u16>());
586
+ }
587
+
588
+ get length(): i32 {
589
+ return this.byteLength >>> alignof<u16>();
590
+ }
591
+
592
+ @operator("[]")
593
+ private __get(index: i32): u16 {
594
+ if (<u32>index >= <u32>this.byteLength >>> alignof<u16>()) throw new RangeError(E_INDEXOUTOFRANGE);
595
+ return load<u16>(this.dataStart + (<usize>index << alignof<u16>()));
596
+ }
597
+
598
+ @unsafe @operator("{}")
599
+ private __uget(index: i32): u16 {
600
+ return load<u16>(this.dataStart + (<usize>index << alignof<u16>()));
601
+ }
602
+
603
+ @operator("[]=")
604
+ private __set(index: i32, value: native<u16>): void {
605
+ if (<u32>index >= <u32>this.byteLength >>> alignof<u16>()) throw new RangeError(E_INDEXOUTOFRANGE);
606
+ store<u16>(this.dataStart + (<usize>index << alignof<u16>()), value);
607
+ }
608
+
609
+ @unsafe @operator("{}=")
610
+ private __uset(index: i32, value: native<u16>): void {
611
+ store<u16>(this.dataStart + (<usize>index << alignof<u16>()), value);
612
+ }
613
+
614
+ at(index: i32): u16 {
615
+ let len = this.byteLength >>> alignof<u16>();
616
+ index += select(0, len, index >= 0);
617
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
618
+ return load<u16>(this.dataStart + (<usize>index << alignof<u16>()));
619
+ }
620
+
621
+ includes(searchElement: u16, fromIndex: i32 = 0): bool {
622
+ return INCLUDES<Uint16Array, u16>(this, searchElement, fromIndex);
623
+ }
624
+
625
+ indexOf(searchElement: u16, fromIndex: i32 = 0): i32 {
626
+ return INDEX_OF<Uint16Array, u16>(this, searchElement, fromIndex);
627
+ }
628
+
629
+ lastIndexOf(searchElement: u16, fromIndex: i32 = this.length): i32 {
630
+ return LAST_INDEX_OF<Uint16Array, u16>(this, searchElement, fromIndex);
631
+ }
632
+
633
+ fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint16Array {
634
+ FILL<u16>(this.dataStart, this.length, u16(value), start, end);
635
+ return this;
636
+ }
637
+
638
+ sort(comparator: (a: u16, b: u16) => i32 = COMPARATOR<u16>()): Uint16Array {
639
+ SORT<u16>(this.dataStart, this.length, comparator);
640
+ return this;
641
+ }
642
+
643
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint16Array {
644
+ return SLICE<Uint16Array, u16>(this, begin, end);
645
+ }
646
+
647
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint16Array {
648
+ return SUBARRAY<Uint16Array, u16>(this, begin, end);
649
+ }
650
+
651
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Uint16Array {
652
+ return COPY_WITHIN<Uint16Array, u16>(this, target, start, end);
653
+ }
654
+
655
+ reduce<T extends number>(
656
+ fn: (accumulator: T, value: u16, index: i32, array: Uint16Array) => T,
657
+ initialValue: T,
658
+ ): T {
659
+ return REDUCE<Uint16Array, u16, T>(this, fn, initialValue);
660
+ }
661
+
662
+ reduceRight<T extends number>(
663
+ fn: (accumulator: T, value: u16, index: i32, array: Uint16Array) => T,
664
+ initialValue: T,
665
+ ): T {
666
+ return REDUCE_RIGHT<Uint16Array, u16, T>(this, fn, initialValue);
667
+ }
668
+
669
+ map(fn: (value: u16, index: i32, self: Uint16Array) => u16): Uint16Array {
670
+ return MAP<Uint16Array, u16>(this, fn);
671
+ }
672
+
673
+ filter(fn: (value: u16, index: i32, self: Uint16Array) => bool): Uint16Array {
674
+ return FILTER<Uint16Array, u16>(this, fn);
675
+ }
676
+
677
+ findIndex(fn: (value: u16, index: i32, self: Uint16Array) => bool): i32 {
678
+ return FIND_INDEX<Uint16Array, u16>(this, fn);
679
+ }
680
+
681
+ findLastIndex(fn: (value: u16, index: i32, self: Uint16Array) => bool): i32 {
682
+ return FIND_LAST_INDEX<Uint16Array, u16>(this, fn);
683
+ }
684
+
685
+ some(fn: (value: u16, index: i32, self: Uint16Array) => bool): bool {
686
+ return SOME<Uint16Array, u16>(this, fn);
687
+ }
688
+
689
+ every(fn: (value: u16, index: i32, self: Uint16Array) => bool): bool {
690
+ return EVERY<Uint16Array, u16>(this, fn);
691
+ }
692
+
693
+ forEach(fn: (value: u16, index: i32, self: Uint16Array) => void): void {
694
+ FOREACH<Uint16Array, u16>(this, fn);
695
+ }
696
+
697
+ reverse(): Uint16Array {
698
+ REVERSE<u16>(this.dataStart, this.length);
699
+ return this;
700
+ }
701
+
702
+ join(separator: string = ","): string {
703
+ return joinIntegerArray<u16>(this.dataStart, this.length, separator);
704
+ }
705
+
706
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
707
+ SET(this, source, offset);
708
+ }
709
+
710
+ toString(): string {
711
+ return this.join();
712
+ }
713
+
714
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Uint16Array {
715
+ return WRAP<Uint16Array, u16>(buffer, byteOffset, length);
716
+ }
717
+ }
718
+
719
+ export class Int32Array extends ArrayBufferView {
720
+ [key: number]: i32;
721
+
722
+ // @ts-ignore: decorator
723
+ @lazy
724
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<i32>();
725
+
726
+ constructor(length: i32) {
727
+ super(length, alignof<i32>());
728
+ }
729
+
730
+ get length(): i32 {
731
+ return this.byteLength >>> alignof<i32>();
732
+ }
733
+
734
+ @operator("[]")
735
+ private __get(index: i32): i32 {
736
+ if (<u32>index >= <u32>this.byteLength >>> alignof<i32>()) throw new RangeError(E_INDEXOUTOFRANGE);
737
+ return load<i32>(this.dataStart + (<usize>index << alignof<i32>()));
738
+ }
739
+
740
+ @unsafe @operator("{}")
741
+ private __uget(index: i32): i32 {
742
+ return load<i32>(this.dataStart + (<usize>index << alignof<i32>()));
743
+ }
744
+
745
+ @operator("[]=")
746
+ private __set(index: i32, value: i32): void {
747
+ if (<u32>index >= <u32>this.byteLength >>> alignof<i32>()) throw new RangeError(E_INDEXOUTOFRANGE);
748
+ store<i32>(this.dataStart + (<usize>index << alignof<i32>()), value);
749
+ }
750
+
751
+ @unsafe @operator("{}=")
752
+ private __uset(index: i32, value: i32): void {
753
+ store<i32>(this.dataStart + (<usize>index << alignof<i32>()), value);
754
+ }
755
+
756
+ at(index: i32): i32 {
757
+ let len = this.byteLength >>> alignof<i32>();
758
+ index += select(0, len, index >= 0);
759
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
760
+ return load<i32>(this.dataStart + (<usize>index << alignof<i32>()));
761
+ }
762
+
763
+ includes(searchElement: i32, fromIndex: i32 = 0): bool {
764
+ return INCLUDES<Int32Array, i32>(this, searchElement, fromIndex);
765
+ }
766
+
767
+ indexOf(searchElement: i32, fromIndex: i32 = 0): i32 {
768
+ return INDEX_OF<Int32Array, i32>(this, searchElement, fromIndex);
769
+ }
770
+
771
+ lastIndexOf(searchElement: i32, fromIndex: i32 = this.length): i32 {
772
+ return LAST_INDEX_OF<Int32Array, i32>(this, searchElement, fromIndex);
773
+ }
774
+
775
+ fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int32Array {
776
+ FILL<u32>(this.dataStart, this.length, u32(value), start, end);
777
+ return this;
778
+ }
779
+
780
+ sort(comparator: (a: i32, b: i32) => i32 = COMPARATOR<i32>()): Int32Array {
781
+ SORT<i32>(this.dataStart, this.length, comparator);
782
+ return this;
783
+ }
784
+
785
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int32Array {
786
+ return SLICE<Int32Array, i32>(this, begin, end);
787
+ }
788
+
789
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int32Array {
790
+ return SUBARRAY<Int32Array, i32>(this, begin, end);
791
+ }
792
+
793
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Int32Array {
794
+ return COPY_WITHIN<Int32Array, i32>(this, target, start, end);
795
+ }
796
+
797
+ reduce<T extends number>(
798
+ fn: (accumulator: T, value: i32, index: i32, array: Int32Array) => T,
799
+ initialValue: T,
800
+ ): T {
801
+ return REDUCE<Int32Array, i32, T>(this, fn, initialValue);
802
+ }
803
+
804
+ reduceRight<T extends number>(
805
+ fn: (accumulator: T, value: i32, index: i32, array: Int32Array) => T,
806
+ initialValue: T,
807
+ ): T {
808
+ return REDUCE_RIGHT<Int32Array, i32, T>(this, fn, initialValue);
809
+ }
810
+
811
+ map(fn: (value: i32, index: i32, self: Int32Array) => i32): Int32Array {
812
+ return MAP<Int32Array, i32>(this, fn);
813
+ }
814
+
815
+ filter(fn: (value: i32, index: i32, self: Int32Array) => bool): Int32Array {
816
+ return FILTER<Int32Array, i32>(this, fn);
817
+ }
818
+
819
+ findIndex(fn: (value: i32, index: i32, self: Int32Array) => bool): i32 {
820
+ return FIND_INDEX<Int32Array, i32>(this, fn);
821
+ }
822
+
823
+ findLastIndex(fn: (value: i32, index: i32, self: Int32Array) => bool): i32 {
824
+ return FIND_LAST_INDEX<Int32Array, i32>(this, fn);
825
+ }
826
+
827
+ some(fn: (value: i32, index: i32, self: Int32Array) => bool): bool {
828
+ return SOME<Int32Array, i32>(this, fn);
829
+ }
830
+
831
+ every(fn: (value: i32, index: i32, self: Int32Array) => bool): bool {
832
+ return EVERY<Int32Array, i32>(this, fn);
833
+ }
834
+
835
+ forEach(fn: (value: i32, index: i32, self: Int32Array) => void): void {
836
+ FOREACH<Int32Array, i32>(this, fn);
837
+ }
838
+
839
+ reverse(): Int32Array {
840
+ REVERSE<u32>(this.dataStart, this.length);
841
+ return this;
842
+ }
843
+
844
+ join(separator: string = ","): string {
845
+ return joinIntegerArray<i32>(this.dataStart, this.length, separator);
846
+ }
847
+
848
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
849
+ SET(this, source, offset);
850
+ }
851
+
852
+ toString(): string {
853
+ return this.join();
854
+ }
855
+
856
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Int32Array {
857
+ return WRAP<Int32Array, i32>(buffer, byteOffset, length);
858
+ }
859
+ }
860
+
861
+ export class Uint32Array extends ArrayBufferView {
862
+ [key: number]: u32;
863
+
864
+ // @ts-ignore: decorator
865
+ @lazy
866
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<u32>();
867
+
868
+ constructor(length: i32) {
869
+ super(length, alignof<u32>());
870
+ }
871
+
872
+ get length(): i32 {
873
+ return this.byteLength >>> alignof<u32>();
874
+ }
875
+
876
+ @operator("[]")
877
+ private __get(index: i32): u32 {
878
+ if (<u32>index >= <u32>this.byteLength >>> alignof<u32>()) throw new RangeError(E_INDEXOUTOFRANGE);
879
+ return load<u32>(this.dataStart + (<usize>index << alignof<u32>()));
880
+ }
881
+
882
+ @unsafe @operator("{}")
883
+ private __uget(index: i32): u32 {
884
+ return load<u32>(this.dataStart + (<usize>index << alignof<u32>()));
885
+ }
886
+
887
+ @operator("[]=")
888
+ private __set(index: i32, value: u32): void {
889
+ if (<u32>index >= <u32>this.byteLength >>> alignof<u32>()) throw new RangeError(E_INDEXOUTOFRANGE);
890
+ store<u32>(this.dataStart + (<usize>index << alignof<u32>()), value);
891
+ }
892
+
893
+ @unsafe @operator("{}=")
894
+ private __uset(index: i32, value: u32): void {
895
+ store<u32>(this.dataStart + (<usize>index << alignof<u32>()), value);
896
+ }
897
+
898
+ at(index: i32): u32 {
899
+ let len = this.byteLength >>> alignof<u32>();
900
+ index += select(0, len, index >= 0);
901
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
902
+ return load<u32>(this.dataStart + (<usize>index << alignof<u32>()));
903
+ }
904
+
905
+ includes(searchElement: u32, fromIndex: i32 = 0): bool {
906
+ return INCLUDES<Uint32Array, u32>(this, searchElement, fromIndex);
907
+ }
908
+
909
+ indexOf(searchElement: u32, fromIndex: i32 = 0): i32 {
910
+ return INDEX_OF<Uint32Array, u32>(this, searchElement, fromIndex);
911
+ }
912
+
913
+ lastIndexOf(searchElement: u32, fromIndex: i32 = this.length): i32 {
914
+ return LAST_INDEX_OF<Uint32Array, u32>(this, searchElement, fromIndex);
915
+ }
916
+
917
+ fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint32Array {
918
+ FILL<u32>(this.dataStart, this.length, value, start, end);
919
+ return this;
920
+ }
921
+
922
+ sort(comparator: (a: u32, b: u32) => i32 = COMPARATOR<u32>()): Uint32Array {
923
+ SORT<u32>(this.dataStart, this.length, comparator);
924
+ return this;
925
+ }
926
+
927
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint32Array {
928
+ return SLICE<Uint32Array, u32>(this, begin, end);
929
+ }
930
+
931
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint32Array {
932
+ return SUBARRAY<Uint32Array, u32>(this, begin, end);
933
+ }
934
+
935
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Uint32Array {
936
+ return COPY_WITHIN<Uint32Array, u32>(this, target, start, end);
937
+ }
938
+
939
+ reduce<T extends number>(
940
+ fn: (accumulator: T, value: u32, index: i32, array: Uint32Array) => T,
941
+ initialValue: T,
942
+ ): T {
943
+ return REDUCE<Uint32Array, u32, T>(this, fn, initialValue);
944
+ }
945
+
946
+ reduceRight<T extends number>(
947
+ fn: (accumulator: T, value: u32, index: i32, array: Uint32Array) => T,
948
+ initialValue: T,
949
+ ): T {
950
+ return REDUCE_RIGHT<Uint32Array, u32, T>(this, fn, initialValue);
951
+ }
952
+
953
+ map(fn: (value: u32, index: i32, self: Uint32Array) => u32): Uint32Array {
954
+ return MAP<Uint32Array, u32>(this, fn);
955
+ }
956
+
957
+ filter(fn: (value: u32, index: i32, self: Uint32Array) => bool): Uint32Array {
958
+ return FILTER<Uint32Array, u32>(this, fn);
959
+ }
960
+
961
+ findIndex(fn: (value: u32, index: i32, self: Uint32Array) => bool): i32 {
962
+ return FIND_INDEX<Uint32Array, u32>(this, fn);
963
+ }
964
+
965
+ findLastIndex(fn: (value: u32, index: i32, self: Uint32Array) => bool): i32 {
966
+ return FIND_LAST_INDEX<Uint32Array, u32>(this, fn);
967
+ }
968
+
969
+ some(fn: (value: u32, index: i32, self: Uint32Array) => bool): bool {
970
+ return SOME<Uint32Array, u32>(this, fn);
971
+ }
972
+
973
+ every(fn: (value: u32, index: i32, self: Uint32Array) => bool): bool {
974
+ return EVERY<Uint32Array, u32>(this, fn);
975
+ }
976
+
977
+ forEach(fn: (value: u32, index: i32, self: Uint32Array) => void): void {
978
+ FOREACH<Uint32Array, u32>(this, fn);
979
+ }
980
+
981
+ reverse(): Uint32Array {
982
+ REVERSE<u32>(this.dataStart, this.length);
983
+ return this;
984
+ }
985
+
986
+ join(separator: string = ","): string {
987
+ return joinIntegerArray<u32>(this.dataStart, this.length, separator);
988
+ }
989
+
990
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
991
+ SET(this, source, offset);
992
+ }
993
+
994
+ toString(): string {
995
+ return this.join();
996
+ }
997
+
998
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Uint32Array {
999
+ return WRAP<Uint32Array, u32>(buffer, byteOffset, length);
1000
+ }
1001
+ }
1002
+
1003
+ export class Int64Array extends ArrayBufferView {
1004
+ [key: number]: i64;
1005
+
1006
+ // @ts-ignore: decorator
1007
+ @lazy
1008
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<i64>();
1009
+
1010
+ constructor(length: i32) {
1011
+ super(length, alignof<i64>());
1012
+ }
1013
+
1014
+ get length(): i32 {
1015
+ return this.byteLength >>> alignof<i64>();
1016
+ }
1017
+
1018
+ @operator("[]")
1019
+ private __get(index: i32): i64 {
1020
+ if (<u32>index >= <u32>this.byteLength >>> alignof<i64>()) throw new RangeError(E_INDEXOUTOFRANGE);
1021
+ return load<i64>(this.dataStart + (<usize>index << alignof<i64>()));
1022
+ }
1023
+
1024
+ @unsafe @operator("{}")
1025
+ private __uget(index: i32): i64 {
1026
+ return load<i64>(this.dataStart + (<usize>index << alignof<i64>()));
1027
+ }
1028
+
1029
+ @operator("[]=")
1030
+ private __set(index: i32, value: i64): void {
1031
+ if (<u32>index >= <u32>this.byteLength >>> alignof<i64>()) throw new RangeError(E_INDEXOUTOFRANGE);
1032
+ store<i64>(this.dataStart + (<usize>index << alignof<i64>()), value);
1033
+ }
1034
+
1035
+ @unsafe @operator("{}=")
1036
+ private __uset(index: i32, value: i64): void {
1037
+ store<i64>(this.dataStart + (<usize>index << alignof<i64>()), value);
1038
+ }
1039
+
1040
+ at(index: i32): i64 {
1041
+ let len = this.byteLength >>> alignof<i64>();
1042
+ index += select(0, len, index >= 0);
1043
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
1044
+ return load<i64>(this.dataStart + (<usize>index << alignof<i64>()));
1045
+ }
1046
+
1047
+ includes(searchElement: i64, fromIndex: i32 = 0): bool {
1048
+ return INCLUDES<Int64Array, i64>(this, searchElement, fromIndex);
1049
+ }
1050
+
1051
+ indexOf(searchElement: i64, fromIndex: i32 = 0): i32 {
1052
+ return INDEX_OF<Int64Array, i64>(this, searchElement, fromIndex);
1053
+ }
1054
+
1055
+ lastIndexOf(searchElement: i64, fromIndex: i32 = this.length): i32 {
1056
+ return LAST_INDEX_OF<Int64Array, i64>(this, searchElement, fromIndex);
1057
+ }
1058
+
1059
+ fill(value: i64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int64Array {
1060
+ FILL<u64>(this.dataStart, this.length, u64(value), start, end);
1061
+ return this;
1062
+ }
1063
+
1064
+ sort(comparator: (a: i64, b: i64) => i32 = COMPARATOR<i64>()): Int64Array {
1065
+ SORT<i64>(this.dataStart, this.length, comparator);
1066
+ return this;
1067
+ }
1068
+
1069
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int64Array {
1070
+ return SLICE<Int64Array, i64>(this, begin, end);
1071
+ }
1072
+
1073
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Int64Array {
1074
+ return SUBARRAY<Int64Array, i64>(this, begin, end);
1075
+ }
1076
+
1077
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Int64Array {
1078
+ return COPY_WITHIN<Int64Array, i64>(this, target, start, end);
1079
+ }
1080
+
1081
+ reduce<T extends number>(
1082
+ fn: (accumulator: T, value: i64, index: i32, array: Int64Array) => T,
1083
+ initialValue: T,
1084
+ ): T {
1085
+ return REDUCE<Int64Array, i64, T>(this, fn, initialValue);
1086
+ }
1087
+
1088
+ reduceRight<T extends number>(
1089
+ fn: (accumulator: T, value: i64, index: i32, array: Int64Array) => T,
1090
+ initialValue: T,
1091
+ ): T {
1092
+ return REDUCE_RIGHT<Int64Array, i64, T>(this, fn, initialValue);
1093
+ }
1094
+
1095
+ map(fn: (value: i64, index: i32, self: Int64Array) => i64): Int64Array {
1096
+ return MAP<Int64Array, i64>(this, fn);
1097
+ }
1098
+
1099
+ filter(fn: (value: i64, index: i32, self: Int64Array) => bool): Int64Array {
1100
+ return FILTER<Int64Array, i64>(this, fn);
1101
+ }
1102
+
1103
+ findIndex(fn: (value: i64, index: i32, self: Int64Array) => bool): i32 {
1104
+ return FIND_INDEX<Int64Array, i64>(this, fn);
1105
+ }
1106
+
1107
+ findLastIndex(fn: (value: i64, index: i32, self: Int64Array) => bool): i32 {
1108
+ return FIND_LAST_INDEX<Int64Array, i64>(this, fn);
1109
+ }
1110
+
1111
+ some(fn: (value: i64, index: i32, self: Int64Array) => bool): bool {
1112
+ return SOME<Int64Array, i64>(this, fn);
1113
+ }
1114
+
1115
+ every(fn: (value: i64, index: i32, self: Int64Array) => bool): bool {
1116
+ return EVERY<Int64Array, i64>(this, fn);
1117
+ }
1118
+
1119
+ forEach(fn: (value: i64, index: i32, self: Int64Array) => void): void {
1120
+ FOREACH<Int64Array, i64>(this, fn);
1121
+ }
1122
+
1123
+ reverse(): Int64Array {
1124
+ REVERSE<u64>(this.dataStart, this.length);
1125
+ return this;
1126
+ }
1127
+
1128
+ join(separator: string = ","): string {
1129
+ return joinIntegerArray<i64>(this.dataStart, this.length, separator);
1130
+ }
1131
+
1132
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
1133
+ SET(this, source, offset);
1134
+ }
1135
+
1136
+ toString(): string {
1137
+ return this.join();
1138
+ }
1139
+
1140
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Int64Array {
1141
+ return WRAP<Int64Array, i64>(buffer, byteOffset, length);
1142
+ }
1143
+ }
1144
+
1145
+ export class Uint64Array extends ArrayBufferView {
1146
+ [key: number]: u64;
1147
+
1148
+ // @ts-ignore: decorator
1149
+ @lazy
1150
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<u64>();
1151
+
1152
+ constructor(length: i32) {
1153
+ super(length, alignof<u64>());
1154
+ }
1155
+
1156
+ get length(): i32 {
1157
+ return this.byteLength >>> alignof<u64>();
1158
+ }
1159
+
1160
+ @operator("[]")
1161
+ private __get(index: i32): u64 {
1162
+ if (<u32>index >= <u32>this.byteLength >>> alignof<u64>()) throw new RangeError(E_INDEXOUTOFRANGE);
1163
+ return load<u64>(this.dataStart + (<usize>index << alignof<u64>()));
1164
+ }
1165
+
1166
+ @unsafe @operator("{}")
1167
+ private __uget(index: i32): u64 {
1168
+ return load<u64>(this.dataStart + (<usize>index << alignof<u64>()));
1169
+ }
1170
+
1171
+ @operator("[]=")
1172
+ private __set(index: i32, value: u64): void {
1173
+ if (<u32>index >= <u32>this.byteLength >>> alignof<u64>()) throw new RangeError(E_INDEXOUTOFRANGE);
1174
+ store<u64>(this.dataStart + (<usize>index << alignof<u64>()), value);
1175
+ }
1176
+
1177
+ @unsafe @operator("{}=")
1178
+ private __uset(index: i32, value: u64): void {
1179
+ store<u64>(this.dataStart + (<usize>index << alignof<u64>()), value);
1180
+ }
1181
+
1182
+ at(index: i32): u64 {
1183
+ let len = this.byteLength >>> alignof<u64>();
1184
+ index += select(0, len, index >= 0);
1185
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
1186
+ return load<u64>(this.dataStart + (<usize>index << alignof<u64>()));
1187
+ }
1188
+
1189
+ includes(searchElement: u64, fromIndex: i32 = 0): bool {
1190
+ return INCLUDES<Uint64Array, u64>(this, searchElement, fromIndex);
1191
+ }
1192
+
1193
+ indexOf(searchElement: u64, fromIndex: i32 = 0): i32 {
1194
+ return INDEX_OF<Uint64Array, u64>(this, searchElement, fromIndex);
1195
+ }
1196
+
1197
+ lastIndexOf(searchElement: u64, fromIndex: i32 = this.length): i32 {
1198
+ return LAST_INDEX_OF<Uint64Array, u64>(this, searchElement, fromIndex);
1199
+ }
1200
+
1201
+ fill(value: u64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint64Array {
1202
+ FILL<u64>(this.dataStart, this.length, value, start, end);
1203
+ return this;
1204
+ }
1205
+
1206
+ sort(comparator: (a: u64, b: u64) => i32 = COMPARATOR<u64>()): Uint64Array {
1207
+ SORT<u64>(this.dataStart, this.length, comparator);
1208
+ return this;
1209
+ }
1210
+
1211
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint64Array {
1212
+ return SLICE<Uint64Array, u64>(this, begin, end);
1213
+ }
1214
+
1215
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Uint64Array {
1216
+ return SUBARRAY<Uint64Array, u64>(this, begin, end);
1217
+ }
1218
+
1219
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Uint64Array {
1220
+ return COPY_WITHIN<Uint64Array, u64>(this, target, start, end);
1221
+ }
1222
+
1223
+ reduce<T extends number>(
1224
+ fn: (accumulator: T, value: u64, index: i32, array: Uint64Array) => T,
1225
+ initialValue: T,
1226
+ ): T {
1227
+ return REDUCE<Uint64Array, u64, T>(this, fn, initialValue);
1228
+ }
1229
+
1230
+ reduceRight<T extends number>(
1231
+ fn: (accumulator: T, value: u64, index: i32, array: Uint64Array) => T,
1232
+ initialValue: T,
1233
+ ): T {
1234
+ return REDUCE_RIGHT<Uint64Array, u64, T>(this, fn, initialValue);
1235
+ }
1236
+
1237
+ map(fn: (value: u64, index: i32, self: Uint64Array) => u64): Uint64Array {
1238
+ return MAP<Uint64Array, u64>(this, fn);
1239
+ }
1240
+
1241
+ filter(fn: (value: u64, index: i32, self: Uint64Array) => bool): Uint64Array {
1242
+ return FILTER<Uint64Array, u64>(this, fn);
1243
+ }
1244
+
1245
+ findIndex(fn: (value: u64, index: i32, self: Uint64Array) => bool): i32 {
1246
+ return FIND_INDEX<Uint64Array, u64>(this, fn);
1247
+ }
1248
+
1249
+ findLastIndex(fn: (value: u64, index: i32, self: Uint64Array) => bool): i32 {
1250
+ return FIND_LAST_INDEX<Uint64Array, u64>(this, fn);
1251
+ }
1252
+
1253
+ some(fn: (value: u64, index: i32, self: Uint64Array) => bool): bool {
1254
+ return SOME<Uint64Array, u64>(this, fn);
1255
+ }
1256
+
1257
+ every(fn: (value: u64, index: i32, self: Uint64Array) => bool): bool {
1258
+ return EVERY<Uint64Array, u64>(this, fn);
1259
+ }
1260
+
1261
+ forEach(fn: (value: u64, index: i32, self: Uint64Array) => void): void {
1262
+ FOREACH<Uint64Array, u64>(this, fn);
1263
+ }
1264
+
1265
+ reverse(): Uint64Array {
1266
+ REVERSE<u64>(this.dataStart, this.length);
1267
+ return this;
1268
+ }
1269
+
1270
+ join(separator: string = ","): string {
1271
+ return joinIntegerArray<u64>(this.dataStart, this.length, separator);
1272
+ }
1273
+
1274
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
1275
+ SET(this, source, offset);
1276
+ }
1277
+
1278
+ toString(): string {
1279
+ return this.join();
1280
+ }
1281
+
1282
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Uint64Array {
1283
+ return WRAP<Uint64Array, u64>(buffer, byteOffset, length);
1284
+ }
1285
+ }
1286
+
1287
+ export class Float32Array extends ArrayBufferView {
1288
+ [key: number]: f32;
1289
+
1290
+ // @ts-ignore: decorator
1291
+ @lazy
1292
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<f32>();
1293
+
1294
+ constructor(length: i32) {
1295
+ super(length, alignof<f32>());
1296
+ }
1297
+
1298
+ get length(): i32 {
1299
+ return this.byteLength >>> alignof<f32>();
1300
+ }
1301
+
1302
+ @operator("[]")
1303
+ private __get(index: i32): f32 {
1304
+ if (<u32>index >= <u32>this.byteLength >>> alignof<f32>()) throw new RangeError(E_INDEXOUTOFRANGE);
1305
+ return load<f32>(this.dataStart + (<usize>index << alignof<f32>()));
1306
+ }
1307
+
1308
+ @unsafe @operator("{}")
1309
+ private __uget(index: i32): f32 {
1310
+ return load<f32>(this.dataStart + (<usize>index << alignof<f32>()));
1311
+ }
1312
+
1313
+ @operator("[]=")
1314
+ private __set(index: i32, value: f32): void {
1315
+ if (<u32>index >= <u32>this.byteLength >>> alignof<f32>()) throw new RangeError(E_INDEXOUTOFRANGE);
1316
+ store<f32>(this.dataStart + (<usize>index << alignof<f32>()), value);
1317
+ }
1318
+
1319
+ @unsafe @operator("{}=")
1320
+ private __uset(index: i32, value: f32): void {
1321
+ store<f32>(this.dataStart + (<usize>index << alignof<f32>()), value);
1322
+ }
1323
+
1324
+ at(index: i32): f32 {
1325
+ let len = this.byteLength >>> alignof<f32>();
1326
+ index += select(0, len, index >= 0);
1327
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
1328
+ return load<f32>(this.dataStart + (<usize>index << alignof<f32>()));
1329
+ }
1330
+
1331
+ includes(searchElement: f32, fromIndex: i32 = 0): bool {
1332
+ return INCLUDES<Float32Array, f32>(this, searchElement, fromIndex);
1333
+ }
1334
+
1335
+ indexOf(searchElement: f32, fromIndex: i32 = 0): i32 {
1336
+ return INDEX_OF<Float32Array, f32>(this, searchElement, fromIndex);
1337
+ }
1338
+
1339
+ lastIndexOf(searchElement: f32, fromIndex: i32 = this.length): i32 {
1340
+ return LAST_INDEX_OF<Float32Array, f32>(this, searchElement, fromIndex);
1341
+ }
1342
+
1343
+ fill(value: f32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float32Array {
1344
+ FILL<f32>(this.dataStart, this.length, value, start, end);
1345
+ return this;
1346
+ }
1347
+
1348
+ sort(comparator: (a: f32, b: f32) => i32 = COMPARATOR<f32>()): Float32Array {
1349
+ SORT<f32>(this.dataStart, this.length, comparator);
1350
+ return this;
1351
+ }
1352
+
1353
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Float32Array {
1354
+ return SLICE<Float32Array, f32>(this, begin, end);
1355
+ }
1356
+
1357
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Float32Array {
1358
+ return SUBARRAY<Float32Array, f32>(this, begin, end);
1359
+ }
1360
+
1361
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Float32Array {
1362
+ return COPY_WITHIN<Float32Array, f32>(this, target, start, end);
1363
+ }
1364
+
1365
+ reduce<T extends number>(
1366
+ fn: (accumulator: T, value: f32, index: i32, array: Float32Array) => T,
1367
+ initialValue: T,
1368
+ ): T {
1369
+ return REDUCE<Float32Array, f32, T>(this, fn, initialValue);
1370
+ }
1371
+
1372
+ reduceRight<T extends number>(
1373
+ fn: (accumulator: T, value: f32, index: i32, array: Float32Array) => T,
1374
+ initialValue: T,
1375
+ ): T {
1376
+ return REDUCE_RIGHT<Float32Array, f32, T>(this, fn, initialValue);
1377
+ }
1378
+
1379
+ map(fn: (value: f32, index: i32, self: Float32Array) => f32): Float32Array {
1380
+ return MAP<Float32Array, f32>(this, fn);
1381
+ }
1382
+
1383
+ filter(fn: (value: f32, index: i32, self: Float32Array) => bool): Float32Array {
1384
+ return FILTER<Float32Array, f32>(this, fn);
1385
+ }
1386
+
1387
+ findIndex(fn: (value: f32, index: i32, self: Float32Array) => bool): i32 {
1388
+ return FIND_INDEX<Float32Array, f32>(this, fn);
1389
+ }
1390
+
1391
+ findLastIndex(fn: (value: f32, index: i32, self: Float32Array) => bool): i32 {
1392
+ return FIND_LAST_INDEX<Float32Array, f32>(this, fn);
1393
+ }
1394
+
1395
+ some(fn: (value: f32, index: i32, self: Float32Array) => bool): bool {
1396
+ return SOME<Float32Array, f32>(this, fn);
1397
+ }
1398
+
1399
+ every(fn: (value: f32, index: i32, self: Float32Array) => bool): bool {
1400
+ return EVERY<Float32Array, f32>(this, fn);
1401
+ }
1402
+
1403
+ forEach(fn: (value: f32, index: i32, self: Float32Array) => void): void {
1404
+ FOREACH<Float32Array, f32>(this, fn);
1405
+ }
1406
+
1407
+ reverse(): Float32Array {
1408
+ REVERSE<f32>(this.dataStart, this.length);
1409
+ return this;
1410
+ }
1411
+
1412
+ join(separator: string = ","): string {
1413
+ return joinFloatArray<f32>(this.dataStart, this.length, separator);
1414
+ }
1415
+
1416
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
1417
+ SET(this, source, offset);
1418
+ }
1419
+
1420
+ toString(): string {
1421
+ return this.join();
1422
+ }
1423
+
1424
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Float32Array {
1425
+ return WRAP<Float32Array, f32>(buffer, byteOffset, length);
1426
+ }
1427
+ }
1428
+
1429
+ export class Float64Array extends ArrayBufferView {
1430
+ [key: number]: f64;
1431
+
1432
+ // @ts-ignore: decorator
1433
+ @lazy
1434
+ static readonly BYTES_PER_ELEMENT: i32 = sizeof<f64>();
1435
+
1436
+ constructor(length: i32) {
1437
+ super(length, alignof<f64>());
1438
+ }
1439
+
1440
+ get length(): i32 {
1441
+ return this.byteLength >>> alignof<f64>();
1442
+ }
1443
+
1444
+ @operator("[]")
1445
+ private __get(index: i32): f64 {
1446
+ if (<u32>index >= <u32>this.byteLength >>> alignof<f64>()) throw new RangeError(E_INDEXOUTOFRANGE);
1447
+ return load<f64>(this.dataStart + (<usize>index << alignof<f64>()));
1448
+ }
1449
+
1450
+ @unsafe @operator("{}")
1451
+ private __uget(index: i32): f64 {
1452
+ return load<f64>(this.dataStart + (<usize>index << alignof<f64>()));
1453
+ }
1454
+
1455
+ @operator("[]=")
1456
+ private __set(index: i32, value: f64): void {
1457
+ if (<u32>index >= <u32>this.byteLength >>> alignof<f64>()) throw new RangeError(E_INDEXOUTOFRANGE);
1458
+ store<f64>(this.dataStart + (<usize>index << alignof<f64>()), value);
1459
+ }
1460
+
1461
+ @unsafe @operator("{}=")
1462
+ private __uset(index: i32, value: f64): void {
1463
+ store<f64>(this.dataStart + (<usize>index << alignof<f64>()), value);
1464
+ }
1465
+
1466
+ at(index: i32): f64 {
1467
+ let len = this.byteLength >>> alignof<f64>();
1468
+ index += select(0, len, index >= 0);
1469
+ if (<u32>index >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
1470
+ return load<f64>(this.dataStart + (<usize>index << alignof<f64>()));
1471
+ }
1472
+
1473
+ includes(searchElement: f64, fromIndex: i32 = 0): bool {
1474
+ return INCLUDES<Float64Array, f64>(this, searchElement, fromIndex);
1475
+ }
1476
+
1477
+ indexOf(searchElement: f64, fromIndex: i32 = 0): i32 {
1478
+ return INDEX_OF<Float64Array, f64>(this, searchElement, fromIndex);
1479
+ }
1480
+
1481
+ lastIndexOf(searchElement: f64, fromIndex: i32 = this.length): i32 {
1482
+ return LAST_INDEX_OF<Float64Array, f64>(this, searchElement, fromIndex);
1483
+ }
1484
+
1485
+ fill(value: f64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float64Array {
1486
+ FILL<f64>(this.dataStart, this.length, value, start, end);
1487
+ return this;
1488
+ }
1489
+
1490
+ sort(comparator: (a: f64, b: f64) => i32 = COMPARATOR<f64>()): Float64Array {
1491
+ SORT<f64>(this.dataStart, this.length, comparator);
1492
+ return this;
1493
+ }
1494
+
1495
+ slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Float64Array {
1496
+ return SLICE<Float64Array, f64>(this, begin, end);
1497
+ }
1498
+
1499
+ subarray(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Float64Array {
1500
+ return SUBARRAY<Float64Array, f64>(this, begin, end);
1501
+ }
1502
+
1503
+ copyWithin(target: i32, start: i32, end: i32 = i32.MAX_VALUE): Float64Array {
1504
+ return COPY_WITHIN<Float64Array, f64>(this, target, start, end);
1505
+ }
1506
+
1507
+ reduce<T extends number>(
1508
+ fn: (accumulator: T, value: f64, index: i32, array: Float64Array) => T,
1509
+ initialValue: T,
1510
+ ): T {
1511
+ return REDUCE<Float64Array, f64, T>(this, fn, initialValue);
1512
+ }
1513
+
1514
+ reduceRight<T extends number>(
1515
+ fn: (accumulator: T, value: f64, index: i32, array: Float64Array) => T,
1516
+ initialValue: T,
1517
+ ): T {
1518
+ return REDUCE_RIGHT<Float64Array, f64, T>(this, fn, initialValue);
1519
+ }
1520
+
1521
+ map(fn: (value: f64, index: i32, self: Float64Array) => f64): Float64Array {
1522
+ return MAP<Float64Array, f64>(this, fn);
1523
+ }
1524
+
1525
+ filter(fn: (value: f64, index: i32, self: Float64Array) => bool): Float64Array {
1526
+ return FILTER<Float64Array, f64>(this, fn);
1527
+ }
1528
+
1529
+ findIndex(fn: (value: f64, index: i32, self: Float64Array) => bool): i32 {
1530
+ return FIND_INDEX<Float64Array, f64>(this, fn);
1531
+ }
1532
+
1533
+ findLastIndex(fn: (value: f64, index: i32, self: Float64Array) => bool): i32 {
1534
+ return FIND_LAST_INDEX<Float64Array, f64>(this, fn);
1535
+ }
1536
+
1537
+ some(fn: (value: f64, index: i32, self: Float64Array) => bool): bool {
1538
+ return SOME<Float64Array, f64>(this, fn);
1539
+ }
1540
+
1541
+ every(fn: (value: f64, index: i32, self: Float64Array) => bool): bool {
1542
+ return EVERY<Float64Array, f64>(this, fn);
1543
+ }
1544
+
1545
+ forEach(fn: (value: f64, index: i32, self: Float64Array) => void): void {
1546
+ FOREACH<Float64Array, f64>(this, fn);
1547
+ }
1548
+
1549
+ reverse(): Float64Array {
1550
+ REVERSE<f64>(this.dataStart, this.length);
1551
+ return this;
1552
+ }
1553
+
1554
+ join(separator: string = ","): string {
1555
+ return joinFloatArray<f64>(this.dataStart, this.length, separator);
1556
+ }
1557
+
1558
+ set<U extends ArrayLike<number>>(source: U, offset: i32 = 0): void {
1559
+ SET(this, source, offset);
1560
+ }
1561
+
1562
+ toString(): string {
1563
+ return this.join();
1564
+ }
1565
+
1566
+ static wrap(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): Float64Array {
1567
+ return WRAP<Float64Array, f64>(buffer, byteOffset, length);
1568
+ }
1569
+ }
1570
+
1571
+ // @ts-ignore: decorator
1572
+ @inline
1573
+ function SLICE<TArray extends ArrayBufferView, T extends number>(
1574
+ array: TArray,
1575
+ start: i32,
1576
+ end: i32
1577
+ ): TArray {
1578
+ let len = array.length;
1579
+ start = start < 0 ? max(start + len, 0) : min(start, len);
1580
+ end = end < 0 ? max(end + len, 0) : min(end , len);
1581
+ len = max(end - start, 0);
1582
+ let slice = instantiate<TArray>(len);
1583
+ memory.copy(
1584
+ slice.dataStart,
1585
+ array.dataStart + (<usize>start << alignof<T>()),
1586
+ <usize>len << alignof<T>()
1587
+ );
1588
+ return slice;
1589
+ }
1590
+
1591
+ // @ts-ignore: decorator
1592
+ @inline
1593
+ function SUBARRAY<TArray extends ArrayBufferView, T extends number>(
1594
+ array: TArray,
1595
+ begin: i32,
1596
+ end: i32
1597
+ ): TArray {
1598
+ let len = array.length;
1599
+ begin = begin < 0 ? max(len + begin, 0) : min(begin, len);
1600
+ end = end < 0 ? max(len + end, 0) : min(end, len);
1601
+ end = max(end, begin);
1602
+
1603
+ let out = changetype<TArray>(__new(offsetof<TArray>(), idof<TArray>()));
1604
+ let buf = changetype<usize>(array.buffer);
1605
+ store<usize>(changetype<usize>(out), buf, offsetof<TArray>("buffer"));
1606
+ __link(changetype<usize>(out), buf, false);
1607
+ store<usize>(changetype<usize>(out), array.dataStart + (<usize>begin << alignof<T>()), offsetof<TArray>("dataStart"));
1608
+ store<u32>(changetype<usize>(out), (end - begin) << alignof<T>(), offsetof<TArray>("byteLength"));
1609
+ return out;
1610
+ }
1611
+
1612
+ // @ts-ignore: decorator
1613
+ @inline
1614
+ function COPY_WITHIN<TArray extends ArrayBufferView, T extends number>(
1615
+ array: TArray,
1616
+ target: i32,
1617
+ start: i32,
1618
+ end: i32
1619
+ ): TArray {
1620
+ let len = array.length;
1621
+ let ptr = array.dataStart;
1622
+
1623
+ end = min<i32>(end, len);
1624
+ let to = target < 0 ? max(len + target, 0) : min(target, len);
1625
+ let from = start < 0 ? max(len + start, 0) : min(start, len);
1626
+ let last = end < 0 ? max(len + end, 0) : min(end, len);
1627
+ let count = min(last - from, len - to);
1628
+
1629
+ memory.copy(
1630
+ ptr + (<usize>to << alignof<T>()),
1631
+ ptr + (<usize>from << alignof<T>()),
1632
+ <usize>count << alignof<T>()
1633
+ );
1634
+ return array;
1635
+ }
1636
+
1637
+ // @ts-ignore: decorator
1638
+ @inline
1639
+ function REDUCE<TArray extends ArrayBufferView, T extends number, TRet extends number>(
1640
+ array: TArray,
1641
+ fn: (accumulator: TRet, value: T, index: i32, array: TArray) => TRet,
1642
+ initialValue: TRet
1643
+ ): TRet {
1644
+ let ptr = array.dataStart;
1645
+ for (let i = 0, k = array.length; i < k; i++) {
1646
+ initialValue = fn(initialValue, load<T>(ptr + (<usize>i << alignof<T>())), i, array);
1647
+ }
1648
+ return initialValue;
1649
+ }
1650
+
1651
+ // @ts-ignore: decorator
1652
+ @inline
1653
+ function REDUCE_RIGHT<TArray extends ArrayBufferView, T extends number, TRet extends number>(
1654
+ array: TArray,
1655
+ fn: (accumulator: TRet, value: T, index: i32, array: TArray) => TRet,
1656
+ initialValue: TRet
1657
+ ): TRet {
1658
+ let ptr = array.dataStart;
1659
+ for (let i = array.length - 1; i >= 0; i--) {
1660
+ initialValue = fn(initialValue, load<T>(ptr + (<usize>i << alignof<T>())), i, array);
1661
+ }
1662
+ return initialValue;
1663
+ }
1664
+
1665
+ // @ts-ignore: decorator
1666
+ @inline
1667
+ function MAP<TArray extends ArrayBufferView, T extends number>(
1668
+ array: TArray,
1669
+ fn: (value: T, index: i32, self: TArray) => T,
1670
+ ): TArray {
1671
+ let len = array.length;
1672
+ let ptr = array.dataStart;
1673
+
1674
+ let byteLength = len << alignof<T>();
1675
+ let out = changetype<TArray>(__new(offsetof<TArray>(), idof<TArray>()));
1676
+ let buf = changetype<ArrayBuffer>(__new(byteLength, idof<ArrayBuffer>()));
1677
+ for (let i = 0; i < len; i++) {
1678
+ store<T>(
1679
+ changetype<usize>(buf) + (<usize>i << alignof<T>()),
1680
+ fn(load<T>(ptr + (<usize>i << alignof<T>())), i, array)
1681
+ );
1682
+ }
1683
+ store<usize>(changetype<usize>(out), changetype<usize>(buf), offsetof<TArray>("buffer"));
1684
+ __link(changetype<usize>(out), changetype<usize>(buf), false);
1685
+ store<usize>(changetype<usize>(out), changetype<usize>(buf), offsetof<TArray>("dataStart"));
1686
+ store<u32>(changetype<usize>(out), byteLength, offsetof<TArray>("byteLength"));
1687
+ return out;
1688
+ }
1689
+
1690
+ // @ts-ignore: decorator
1691
+ @inline
1692
+ function FILTER<TArray extends ArrayBufferView, T extends number>(
1693
+ array: TArray,
1694
+ fn: (value: T, index: i32, self: TArray) => bool,
1695
+ ): TArray {
1696
+ let len = array.length;
1697
+ let out = changetype<TArray>(__new(offsetof<TArray>(), idof<TArray>()));
1698
+ let buf = changetype<ArrayBuffer>(__new(len << alignof<T>(), idof<ArrayBuffer>()));
1699
+ let dataStart = array.dataStart;
1700
+ let j: usize = 0;
1701
+ for (let i = 0; i < len; i++) {
1702
+ let value = load<T>(dataStart + (<usize>i << alignof<T>()));
1703
+ if (fn(value, i, array)) {
1704
+ store<T>(
1705
+ changetype<usize>(buf) + (j++ << alignof<T>()),
1706
+ value
1707
+ );
1708
+ }
1709
+ }
1710
+ // shrink output buffer
1711
+ let byteLength = j << alignof<T>();
1712
+ let data = __renew(changetype<usize>(buf), byteLength);
1713
+ store<usize>(changetype<usize>(out), data, offsetof<TArray>("buffer"));
1714
+ __link(changetype<usize>(out), data, false);
1715
+ store<u32>(changetype<usize>(out), byteLength, offsetof<TArray>("byteLength"));
1716
+ store<usize>(changetype<usize>(out), data, offsetof<TArray>("dataStart"));
1717
+ return out;
1718
+ }
1719
+
1720
+ // @ts-ignore: decorator
1721
+ @inline
1722
+ function FIND_INDEX<TArray extends ArrayBufferView, T extends number>(
1723
+ array: TArray,
1724
+ fn: (value: T, index: i32, array: TArray) => bool,
1725
+ ): i32 {
1726
+ let ptr = array.dataStart;
1727
+ for (let i = 0, k = array.length; i < k; i++) {
1728
+ if (fn(load<T>(ptr + (<usize>i << alignof<T>())), i, array)) return i;
1729
+ }
1730
+ return -1;
1731
+ }
1732
+
1733
+ // @ts-ignore: decorator
1734
+ @inline
1735
+ function FIND_LAST_INDEX<TArray extends ArrayBufferView, T extends number>(
1736
+ array: TArray,
1737
+ fn: (value: T, index: i32, array: TArray) => bool,
1738
+ ): i32 {
1739
+ let ptr = array.dataStart;
1740
+ for (let i = array.length - 1; i >= 0; --i) {
1741
+ if (fn(load<T>(ptr + (<usize>i << alignof<T>())), i, array)) return i;
1742
+ }
1743
+ return -1;
1744
+ }
1745
+
1746
+ // @ts-ignore: decorator
1747
+ @inline
1748
+ function INCLUDES<TArray extends ArrayBufferView, T extends number>(
1749
+ array: TArray,
1750
+ searchElement: T,
1751
+ fromIndex: i32,
1752
+ ): bool {
1753
+ if (isFloat<T>()) {
1754
+ let index: isize = fromIndex;
1755
+ let len: isize = array.length;
1756
+ if (len == 0 || index >= len) return false;
1757
+ if (index < 0) index = max(len + index, 0);
1758
+ let dataStart = array.dataStart;
1759
+ while (index < len) {
1760
+ let elem = load<T>(dataStart + (index << alignof<T>()));
1761
+ // @ts-ignore
1762
+ if (elem == searchElement || isNaN(elem) & isNaN(searchElement)) return true;
1763
+ ++index;
1764
+ }
1765
+ return false;
1766
+ } else {
1767
+ return INDEX_OF<TArray, T>(array, searchElement, fromIndex) >= 0;
1768
+ }
1769
+ }
1770
+
1771
+ // @ts-ignore: decorator
1772
+ @inline
1773
+ function INDEX_OF<TArray extends ArrayBufferView, T extends number>(
1774
+ array: TArray,
1775
+ searchElement: T,
1776
+ fromIndex: i32,
1777
+ ): i32 {
1778
+ let index: isize = fromIndex;
1779
+ let len: isize = array.length;
1780
+ if (len == 0 || index >= len) return -1;
1781
+ if (index < 0) index = max(len + index, 0);
1782
+ let dataStart = array.dataStart;
1783
+ while (index < len) {
1784
+ if (load<T>(dataStart + (index << alignof<T>())) == searchElement) return <i32>index;
1785
+ ++index;
1786
+ }
1787
+ return -1;
1788
+ }
1789
+
1790
+ // @ts-ignore: decorator
1791
+ @inline
1792
+ function LAST_INDEX_OF<TArray extends ArrayBufferView, T extends number>(
1793
+ array: TArray,
1794
+ searchElement: T,
1795
+ fromIndex: i32,
1796
+ ): i32 {
1797
+ let index: isize = fromIndex;
1798
+ let len: isize = array.length;
1799
+ if (len == 0) return -1;
1800
+ if (index < 0) index = len + index; // no need to clamp
1801
+ else if (index >= len) index = len - 1;
1802
+ let dataStart = array.dataStart;
1803
+ while (index >= 0) {
1804
+ if (load<T>(dataStart + (index << alignof<T>())) == searchElement) return <i32>index;
1805
+ --index;
1806
+ }
1807
+ return -1;
1808
+ }
1809
+
1810
+ // @ts-ignore: decorator
1811
+ @inline
1812
+ function SOME<TArray extends ArrayBufferView, T extends number>(
1813
+ array: TArray,
1814
+ fn: (value: T, index: i32, array: TArray) => bool,
1815
+ ): bool {
1816
+ let ptr = array.dataStart;
1817
+ for (let i = 0, k = array.length; i < k; i++) {
1818
+ if (fn(load<T>(ptr + (<usize>i << alignof<T>())), i, array)) return true;
1819
+ }
1820
+ return false;
1821
+ }
1822
+
1823
+ // @ts-ignore: decorator
1824
+ @inline
1825
+ function EVERY<TArray extends ArrayBufferView, T extends number>(
1826
+ array: TArray,
1827
+ fn: (value: T, index: i32, array: TArray) => bool,
1828
+ ): bool {
1829
+ let ptr = array.dataStart;
1830
+ for (let i = 0, k = array.length; i < k; i++) {
1831
+ if (fn(load<T>(ptr + (<usize>i << alignof<T>())), i, array)) continue;
1832
+ return false;
1833
+ }
1834
+ return true;
1835
+ }
1836
+
1837
+ // @ts-ignore: decorator
1838
+ @inline
1839
+ function FOREACH<TArray extends ArrayBufferView, T extends number>(
1840
+ array: TArray,
1841
+ fn: (value: T, index: i32, array: TArray) => void,
1842
+ ): void {
1843
+ let ptr = array.dataStart;
1844
+ for (let i = 0, k = array.length; i < k; i++) {
1845
+ fn(load<T>(ptr + (<usize>i << alignof<T>())), i, array);
1846
+ }
1847
+ }
1848
+
1849
+ // @ts-ignore: decorator
1850
+ @inline
1851
+ function WRAP<TArray extends ArrayBufferView, T>(
1852
+ buffer: ArrayBuffer,
1853
+ byteOffset: i32 = 0,
1854
+ len: i32 = -1
1855
+ ): TArray {
1856
+ let byteLength: i32;
1857
+ let bufferByteLength = buffer.byteLength;
1858
+ const mask: u32 = sizeof<T>() - 1;
1859
+ if (i32(<u32>byteOffset > <u32>bufferByteLength) | (byteOffset & mask)) {
1860
+ throw new RangeError(E_INDEXOUTOFRANGE);
1861
+ }
1862
+ if (len < 0) {
1863
+ if (len == -1) {
1864
+ if (bufferByteLength & mask) {
1865
+ throw new RangeError(E_INVALIDLENGTH);
1866
+ }
1867
+ byteLength = bufferByteLength - byteOffset;
1868
+ } else {
1869
+ throw new RangeError(E_INVALIDLENGTH);
1870
+ }
1871
+ } else {
1872
+ byteLength = len << alignof<T>();
1873
+ if (byteOffset + byteLength > bufferByteLength) {
1874
+ throw new RangeError(E_INVALIDLENGTH);
1875
+ }
1876
+ }
1877
+ let out = changetype<TArray>(__new(offsetof<TArray>(), idof<TArray>()));
1878
+ store<usize>(changetype<usize>(out), changetype<usize>(buffer), offsetof<TArray>("buffer"));
1879
+ __link(changetype<usize>(out), changetype<usize>(buffer), false);
1880
+ store<u32>(changetype<usize>(out), byteLength, offsetof<TArray>("byteLength"));
1881
+ store<usize>(changetype<usize>(out), changetype<usize>(buffer) + <usize>byteOffset, offsetof<TArray>("dataStart"));
1882
+ return out;
1883
+ }
1884
+
1885
+ // @ts-ignore: decorator
1886
+ @inline
1887
+ function SET<
1888
+ TArray extends ArrayLike<number>,
1889
+ UArray extends ArrayLike<number>
1890
+ >(
1891
+ target: TArray,
1892
+ source: UArray,
1893
+ offset: i32 = 0
1894
+ ): void {
1895
+ // need to assert at compile time that U is not a reference or a function
1896
+ if (isReference<valueof<UArray>>()) {
1897
+ ERROR(E_NOTIMPLEMENTED);
1898
+ }
1899
+ let sourceLen = source.length;
1900
+ if (offset < 0 || sourceLen + offset > target.length) {
1901
+ // offset is out of bounds
1902
+ throw new RangeError(E_INDEXOUTOFRANGE);
1903
+ }
1904
+ // @ts-ignore: dataStart
1905
+ let targetStart = target.dataStart + (<usize>offset << (alignof<valueof<TArray>>()));
1906
+ // @ts-ignore: dataStart
1907
+ let sourceStart = source.dataStart;
1908
+ // if the types align and match, use memory.copy() instead of manual loop
1909
+ if (
1910
+ isInteger<valueof<TArray>>() == isInteger<valueof<UArray>>() &&
1911
+ alignof<valueof<TArray>>() == alignof<valueof<UArray>>() &&
1912
+ !(isSigned<valueof<UArray>>() && target instanceof Uint8ClampedArray)
1913
+ ) {
1914
+ memory.copy(targetStart, sourceStart, <usize>sourceLen << (alignof<valueof<UArray>>()));
1915
+ } else {
1916
+ for (let i = 0; i < sourceLen; i++) {
1917
+ let ptr = targetStart + (<usize>i << (alignof<valueof<TArray>>()));
1918
+ let value = load<valueof<UArray>>(sourceStart + (<usize>i << (alignof<valueof<UArray>>())));
1919
+ // if TArray is Uint8ClampedArray, then values must be clamped
1920
+ if (target instanceof Uint8ClampedArray) {
1921
+ if (isFloat<valueof<UArray>>()) {
1922
+ store<valueof<TArray>>(ptr,
1923
+ isFinite<valueof<UArray>>(value)
1924
+ ? <valueof<TArray>>max<valueof<UArray>>(0, min<valueof<UArray>>(255, value))
1925
+ : 0
1926
+ );
1927
+ } else {
1928
+ if (!isSigned<valueof<UArray>>()) {
1929
+ store<valueof<TArray>>(ptr, min<valueof<UArray>>(255, value));
1930
+ } else if (sizeof<valueof<TArray>>() <= 4) {
1931
+ store<valueof<TArray>>(ptr, ~(<i32>value >> 31) & (((255 - <i32>value) >> 31) | value));
1932
+ } else {
1933
+ store<valueof<TArray>>(ptr, ~(<i64>value >> 63) & (((255 - <i64>value) >> 63) | value));
1934
+ }
1935
+ }
1936
+ } else {
1937
+ if (isFloat<valueof<UArray>>() && !isFloat<valueof<TArray>>()) {
1938
+ store<valueof<TArray>>(ptr, isFinite<valueof<UArray>>(value) ? <valueof<TArray>>value : 0);
1939
+ } else {
1940
+ store<valueof<TArray>>(ptr, <valueof<TArray>>value);
1941
+ }
1942
+ }
1943
+ }
1944
+ }
1945
+ }