@model-create/epanet-engine 0.7.1-alpha.1 → 0.7.1-alpha.3

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/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM emscripten/emsdk
1
+ FROM emscripten/emsdk:3.1.15
2
2
 
3
3
  RUN apt-get update && \
4
4
  apt-get install -qqy git && \
package/build.sh CHANGED
@@ -26,16 +26,18 @@ echo "============================================="
26
26
  -s NO_EXIT_RUNTIME="1" \
27
27
  -s DEAD_FUNCTIONS="[]" \
28
28
  -s FORCE_FILESYSTEM="1" \
29
- -s INLINING_LIMIT="1" \
30
29
  -s ALLOW_MEMORY_GROWTH="1" \
31
30
  -s ERROR_ON_UNDEFINED_SYMBOLS=0 \
32
31
  -s EXPORTED_RUNTIME_METHODS='["ccall", "getValue", "UTF8ToString", "intArrayToString","FS"]' \
33
32
  -s WASM=1 \
34
33
  -s SINGLE_FILE=1 \
34
+ -msimd128 \
35
35
  -s WASM_ASYNC_COMPILATION=0 \
36
- --llvm-lto 3 \
37
36
  --memory-init-file 0 \
38
37
  --closure 0
38
+ #-s MODULARIZE=1 \
39
+
40
+ # -msimd128 Enable SIMD https://jott.live/markdown/wasm_vector_addition
39
41
 
40
42
  #-s BINARYEN_ASYNC_COMPILATION=0 \
41
43
  #-s MODULARIZE=1 \
@@ -0,0 +1,691 @@
1
+ // Type definitions for Emscripten 1.38.33
2
+ // Project: http://kripken.github.io/emscripten-site/index.html
3
+ // Definitions by: Kensuke Matsuzaki <https://github.com/zakki>
4
+ // Periklis Tsirakidis <https://github.com/periklis>
5
+ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
6
+ // TypeScript Version: 2.2
7
+
8
+ /** Other WebAssembly declarations, for compatibility with older versions of Typescript */
9
+ declare namespace WebAssembly {
10
+ interface Module {}
11
+ }
12
+
13
+ declare namespace Emscripten {
14
+ interface FileSystemType {}
15
+ type EnvironmentType = "WEB" | "NODE" | "SHELL" | "WORKER";
16
+ type ValueType = "number" | "string" | "array" | "boolean";
17
+ type TypeCompatibleWithC = number | string | any[] | boolean;
18
+
19
+ type WebAssemblyImports = Array<{
20
+ name: string;
21
+ kind: string;
22
+ }>;
23
+
24
+ type WebAssemblyExports = Array<{
25
+ module: string;
26
+ name: string;
27
+ kind: string;
28
+ }>;
29
+
30
+ interface CCallOpts {
31
+ async?: boolean;
32
+ }
33
+ }
34
+
35
+ interface EmscriptenModule {
36
+ print(str: string): void;
37
+ printErr(str: string): void;
38
+ arguments: string[];
39
+ environment: Emscripten.EnvironmentType;
40
+ preInit: Array<{ (): void }>;
41
+ preRun: Array<{ (): void }>;
42
+ postRun: Array<{ (): void }>;
43
+ onAbort: { (what: any): void };
44
+ onRuntimeInitialized: { (): void };
45
+ preinitializedWebGLContext: WebGLRenderingContext;
46
+ noInitialRun: boolean;
47
+ noExitRuntime: boolean;
48
+ logReadFiles: boolean;
49
+ filePackagePrefixURL: string;
50
+ wasmBinary: ArrayBuffer;
51
+
52
+ destroy(object: object): void;
53
+ getPreloadedPackage(
54
+ remotePackageName: string,
55
+ remotePackageSize: number
56
+ ): ArrayBuffer;
57
+ instantiateWasm(
58
+ imports: Emscripten.WebAssemblyImports,
59
+ successCallback: (module: WebAssembly.Module) => void
60
+ ): Emscripten.WebAssemblyExports;
61
+ locateFile(url: string): string;
62
+ onCustomMessage(event: MessageEvent): void;
63
+
64
+ Runtime: any;
65
+
66
+ ccall(
67
+ ident: string,
68
+ returnType: Emscripten.ValueType | null,
69
+ argTypes: Emscripten.ValueType[],
70
+ args: Emscripten.TypeCompatibleWithC[],
71
+ opts?: Emscripten.CCallOpts
72
+ ): any;
73
+ cwrap(
74
+ ident: string,
75
+ returnType: Emscripten.ValueType | null,
76
+ argTypes: Emscripten.ValueType[],
77
+ opts?: Emscripten.CCallOpts
78
+ ): (...args: any[]) => any;
79
+
80
+ setValue(ptr: number, value: any, type: string, noSafe?: boolean): void;
81
+ getValue(ptr: number, type: string, noSafe?: boolean): number;
82
+
83
+ ALLOC_NORMAL: number;
84
+ ALLOC_STACK: number;
85
+ ALLOC_STATIC: number;
86
+ ALLOC_DYNAMIC: number;
87
+ ALLOC_NONE: number;
88
+
89
+ allocate(
90
+ slab: any,
91
+ types: string | string[],
92
+ allocator: number,
93
+ ptr: number
94
+ ): number;
95
+
96
+ // USE_TYPED_ARRAYS == 1
97
+ HEAP: Int32Array;
98
+ IHEAP: Int32Array;
99
+ FHEAP: Float64Array;
100
+
101
+ // USE_TYPED_ARRAYS == 2
102
+ HEAP8: Int8Array;
103
+ HEAP16: Int16Array;
104
+ HEAP32: Int32Array;
105
+ HEAPU8: Uint8Array;
106
+ HEAPU16: Uint16Array;
107
+ HEAPU32: Uint32Array;
108
+ HEAPF32: Float32Array;
109
+ HEAPF64: Float64Array;
110
+
111
+ TOTAL_STACK: number;
112
+ TOTAL_MEMORY: number;
113
+ FAST_MEMORY: number;
114
+
115
+ addOnPreRun(cb: () => any): void;
116
+ addOnInit(cb: () => any): void;
117
+ addOnPreMain(cb: () => any): void;
118
+ addOnExit(cb: () => any): void;
119
+ addOnPostRun(cb: () => any): void;
120
+
121
+ // Tools
122
+ intArrayFromString(
123
+ stringy: string,
124
+ dontAddNull?: boolean,
125
+ length?: number
126
+ ): number[];
127
+ intArrayToString(array: number[]): string;
128
+ writeStringToMemory(str: string, buffer: number, dontAddNull: boolean): void;
129
+ writeArrayToMemory(array: number[], buffer: number): void;
130
+ writeAsciiToMemory(str: string, buffer: number, dontAddNull: boolean): void;
131
+
132
+ addRunDependency(id: any): void;
133
+ removeRunDependency(id: any): void;
134
+
135
+ preloadedImages: any;
136
+ preloadedAudios: any;
137
+
138
+ _malloc(size: number): number;
139
+ _free(ptr: number): void;
140
+
141
+ // Exported Functions - LB
142
+ FS: EmscriptenFileSysten;
143
+ UTF8ToString(ptr: number, maxBytesToRead?: number): string;
144
+ getversion(ptr: number): number;
145
+ geterror(errorCode: number, ptr: number): number;
146
+ Epanet: EpanetProjectConstructable;
147
+ }
148
+
149
+ // EPANET
150
+ interface EpanetProjectConstructable {
151
+ new (): EpanetProject;
152
+ }
153
+ interface EpanetProject {
154
+ // Generated methods
155
+
156
+ //Project Functions
157
+ open(inputFile: string, reportFile: string, outputFile: string): number;
158
+ close(): number;
159
+ runproject(inputFile: string, reportFile: string, outputFile: string): number;
160
+ init(
161
+ reportFile: string,
162
+ outputFile: string,
163
+ unitsType: number,
164
+ headLossType: number
165
+ ): number;
166
+ getcount(obj: number, count: number): number;
167
+ gettitle(out_line1: number, out_line2: number, out_line3: number): number;
168
+ settitle(line1: string, line2: string, line3: string): number;
169
+ saveinpfile(filename: string): number;
170
+
171
+ // Hydraulic Analysis Functions
172
+ solveH(): number;
173
+ usehydfile(filename: string): number;
174
+ openH(): number;
175
+ initH(initFlag: number): number;
176
+ runH(currentTime: number): number;
177
+ nextH(tStep: number): number;
178
+ saveH(): number;
179
+ savehydfile(filename: string): number;
180
+ closeH(): number;
181
+
182
+ // Water Quality Analysis Functions
183
+ solveQ(): number;
184
+ openQ(): number;
185
+ initQ(initFlag: number): number;
186
+ runQ(currentTime: number): number;
187
+ nextQ(tStep: number): number;
188
+ stepQ(timeLeft: number): number;
189
+ closeQ(): number;
190
+
191
+ // Reporting Functions
192
+ writeline(line: string): number;
193
+ report(): number;
194
+ copyreport(filename: string): number;
195
+ clearreport(): number;
196
+ resetreport(): number;
197
+ setreport(format: string): number;
198
+ setstatusreport(level: number): number;
199
+ getstatistic(type: number, value: number): number;
200
+ getresultindex(type: number, index: number, value: number): number;
201
+
202
+ // Analysis Options Functions
203
+ getflowunits(units: number): number;
204
+ getoption(option: number, value: number): number;
205
+ getqualinfo(
206
+ qualType: number,
207
+ out_chemName: number,
208
+ out_chemUnits: number,
209
+ traceNode: number
210
+ ): number;
211
+ getqualtype(qualType: number, traceNode: number): number;
212
+ gettimeparam(param: number, value: number): number;
213
+ setflowunits(units: number): number;
214
+ setoption(option: number, value: number): number;
215
+ setqualtype(
216
+ qualType: number,
217
+ chemName: string,
218
+ chemUnits: string,
219
+ traceNode: string
220
+ ): number;
221
+ settimeparam(param: number, value: number): number;
222
+
223
+ // Network Node Functions
224
+ addnode(id: string, nodeType: number, index: number): number;
225
+ deletenode(index: number, actionCode: number): number;
226
+ getnodeindex(id: string, index: number): number;
227
+ getnodeid(index: number, out_id: number): number;
228
+ setnodeid(index: number, newid: string): number;
229
+ getnodetype(index: number, nodeType: number): number;
230
+ getnodevalue(index: number, property: number, value: number): number;
231
+ setnodevalue(index: number, property: number, value: number): number;
232
+ setjuncdata(
233
+ index: number,
234
+ elev: number,
235
+ dmnd: number,
236
+ dmndpat: string
237
+ ): number;
238
+ settankdata(
239
+ index: number,
240
+ elev: number,
241
+ initlvl: number,
242
+ minlvl: number,
243
+ maxlvl: number,
244
+ diam: number,
245
+ minvol: number,
246
+ volcurve: string
247
+ ): number;
248
+ getcoord(index: number, x: number, y: number): number;
249
+ setcoord(index: number, x: number, y: number): number;
250
+
251
+ //Nodal Demand Functions
252
+ adddemand(
253
+ nodeIndex: number,
254
+ baseDemand: number,
255
+ demandPattern: string,
256
+ demandName: string
257
+ ): number;
258
+ deletedemand(nodeIndex: number, demandIndex: number): number;
259
+ getbasedemand(
260
+ nodeIndex: number,
261
+ demandIndex: number,
262
+ baseDemand: number
263
+ ): number;
264
+ getdemandindex(
265
+ nodeIndex: number,
266
+ demandName: string,
267
+ demandIndex: number
268
+ ): number;
269
+ getdemandmodel(
270
+ type: number,
271
+ pmin: number,
272
+ preq: number,
273
+ pexp: number
274
+ ): number;
275
+ getdemandname(
276
+ nodeIndex: number,
277
+ demandIndex: number,
278
+ out_demandName: number
279
+ ): number;
280
+ getdemandpattern(
281
+ nodeIndex: number,
282
+ demandIndex: number,
283
+ patIndex: number
284
+ ): number;
285
+ getnumdemands(nodeIndex: number, numDemands: number): number;
286
+ setbasedemand(
287
+ nodeIndex: number,
288
+ demandIndex: number,
289
+ baseDemand: number
290
+ ): number;
291
+ setdemandmodel(
292
+ type: number,
293
+ pmin: number,
294
+ preq: number,
295
+ pexp: number
296
+ ): number;
297
+ setdemandname(
298
+ nodeIndex: number,
299
+ demandIdx: number,
300
+ demandName: string
301
+ ): number;
302
+ setdemandpattern(
303
+ nodeIndex: number,
304
+ demandIndex: number,
305
+ patIndex: number
306
+ ): number;
307
+
308
+ // Network Link Functions
309
+ addlink(
310
+ id: string,
311
+ linkType: number,
312
+ fromNode: string,
313
+ toNode: string,
314
+ index: number
315
+ ): number;
316
+ deletelink(index: number, actionCode: number): number;
317
+ getlinkindex(id: string, index: number): number;
318
+ getlinkid(index: number, out_id: number): number;
319
+ setlinkid(index: number, newid: string): number;
320
+ getlinktype(index: number, linkType: number): number;
321
+ setlinktype(
322
+ inout_index: number,
323
+ linkType: number,
324
+ actionCode: number
325
+ ): number;
326
+ getlinknodes(index: number, node1: number, node2: number): number;
327
+ setlinknodes(index: number, node1: number, node2: number): number;
328
+ getlinkvalue(index: number, property: number, value: number): number;
329
+ setlinkvalue(index: number, property: number, value: number): number;
330
+ setpipedata(
331
+ index: number,
332
+ length: number,
333
+ diam: number,
334
+ rough: number,
335
+ mloss: number
336
+ ): number;
337
+ getpumptype(linkIndex: number, pumpType: number): number;
338
+ getheadcurveindex(linkIndex: number, curveIndex: number): number;
339
+ setheadcurveindex(linkIndex: number, curveIndex: number): number;
340
+ getvertexcount(index: number, count: number): number;
341
+ getvertex(index: number, vertex: number, x: number, y: number): number;
342
+ setvertices(index: number, x: number, y: number, count: number): number;
343
+
344
+ // Time Pattern Functions
345
+ addpattern(id: string): number;
346
+ deletepattern(index: number): number;
347
+ getpatternindex(id: string, index: number): number;
348
+ getpatternid(index: number, out_id: number): number;
349
+ setpatternid(index: number, id: string): number;
350
+ getpatternlen(index: number, len: number): number;
351
+ getpatternvalue(index: number, period: number, value: number): number;
352
+ setpatternvalue(index: number, period: number, value: number): number;
353
+ getaveragepatternvalue(index: number, value: number): number;
354
+ setpattern(index: number, values: number, len: number): number;
355
+
356
+ // Data Curve Functions
357
+ addcurve(id: string): number;
358
+ deletecurve(index: number): number;
359
+ getcurveindex(id: string, index: number): number;
360
+ getcurveid(index: number, out_id: number): number;
361
+ setcurveid(index: number, id: string): number;
362
+ getcurvelen(index: number, len: number): number;
363
+ getcurvetype(index: number, type: number): number;
364
+ getcurvevalue(
365
+ curveIndex: number,
366
+ pointIndex: number,
367
+ x: number,
368
+ y: number
369
+ ): number;
370
+ setcurvevalue(
371
+ curveIndex: number,
372
+ pointIndex: number,
373
+ x: number,
374
+ y: number
375
+ ): number;
376
+ setcurve(
377
+ index: number,
378
+ xValues: number,
379
+ yValues: number,
380
+ nPoints: number
381
+ ): number;
382
+
383
+ // Simple Control Functions
384
+ addcontrol(
385
+ type: number,
386
+ linkIndex: number,
387
+ setting: number,
388
+ nodeIndex: number,
389
+ level: number,
390
+ index: number
391
+ ): number;
392
+ deletecontrol(index: number): number;
393
+ getcontrol(
394
+ index: number,
395
+ type: number,
396
+ linkIndex: number,
397
+ setting: number,
398
+ nodeIndex: number,
399
+ level: number
400
+ ): number;
401
+ setcontrol(
402
+ index: number,
403
+ type: number,
404
+ linkIndex: number,
405
+ setting: number,
406
+ nodeIndex: number,
407
+ level: number
408
+ ): number;
409
+
410
+ // Rule-Based Control Functions
411
+ addrule(rule: string): number;
412
+ deleterule(index: number): number;
413
+ getrule(
414
+ index: number,
415
+ nPremises: number,
416
+ nThenActions: number,
417
+ nElseActions: number,
418
+ priority: number
419
+ ): number;
420
+ getruleID(index: number, out_id: number): number;
421
+ getpremise(
422
+ ruleIndex: number,
423
+ premiseIndex: number,
424
+ logop: number,
425
+ object: number,
426
+ objIndex: number,
427
+ variable: number,
428
+ relop: number,
429
+ status: number,
430
+ value: number
431
+ ): number;
432
+ setpremise(
433
+ ruleIndex: number,
434
+ premiseIndex: number,
435
+ logop: number,
436
+ object: number,
437
+ objIndex: number,
438
+ variable: number,
439
+ relop: number,
440
+ status: number,
441
+ value: number
442
+ ): number;
443
+ setpremiseindex(
444
+ ruleIndex: number,
445
+ premiseIndex: number,
446
+ objIndex: number
447
+ ): number;
448
+ setpremisestatus(
449
+ ruleIndex: number,
450
+ premiseIndex: number,
451
+ status: number
452
+ ): number;
453
+ setpremisevalue(
454
+ ruleIndex: number,
455
+ premiseIndex: number,
456
+ value: number
457
+ ): number;
458
+ getthenaction(
459
+ ruleIndex: number,
460
+ actionIndex: number,
461
+ linkIndex: number,
462
+ status: number,
463
+ setting: number
464
+ ): number;
465
+ setthenaction(
466
+ ruleIndex: number,
467
+ actionIndex: number,
468
+ linkIndex: number,
469
+ status: number,
470
+ setting: number
471
+ ): number;
472
+ getelseaction(
473
+ ruleIndex: number,
474
+ actionIndex: number,
475
+ linkIndex: number,
476
+ status: number,
477
+ setting: number
478
+ ): number;
479
+ setelseaction(
480
+ ruleIndex: number,
481
+ actionIndex: number,
482
+ linkIndex: number,
483
+ status: number,
484
+ setting: number
485
+ ): number;
486
+ setrulepriority(index: number, priority: number): number;
487
+ }
488
+
489
+ // By default Emscripten emits a single global Module. Users setting -s
490
+ // MODULARIZE=1 -s EXPORT_NAME=MyMod should declare their own types, e.g.
491
+ // declare var MyMod: EmscriptenModule;
492
+ declare var Module: EmscriptenModule;
493
+
494
+ interface EmscriptenFileSysten {
495
+ readFile(
496
+ path: string,
497
+ opts?: { encoding?: "binary" | "utf8"; flags?: string }
498
+ ): string | Uint8Array;
499
+ writeFile(
500
+ path: string,
501
+ data: string | ArrayBufferView,
502
+ opts?: { flags?: string }
503
+ ): void;
504
+ }
505
+
506
+ declare namespace FS {
507
+ interface Lookup {
508
+ path: string;
509
+ node: FSNode;
510
+ }
511
+
512
+ interface FSStream {}
513
+ interface FSNode {}
514
+ interface ErrnoError {}
515
+
516
+ let ignorePermissions: boolean;
517
+ let trackingDelegate: any;
518
+ let tracking: any;
519
+ let genericErrors: any;
520
+
521
+ //
522
+ // paths
523
+ //
524
+ function lookupPath(path: string, opts: any): Lookup;
525
+ function getPath(node: FSNode): string;
526
+
527
+ //
528
+ // nodes
529
+ //
530
+ function isFile(mode: number): boolean;
531
+ function isDir(mode: number): boolean;
532
+ function isLink(mode: number): boolean;
533
+ function isChrdev(mode: number): boolean;
534
+ function isBlkdev(mode: number): boolean;
535
+ function isFIFO(mode: number): boolean;
536
+ function isSocket(mode: number): boolean;
537
+
538
+ //
539
+ // devices
540
+ //
541
+ function major(dev: number): number;
542
+ function minor(dev: number): number;
543
+ function makedev(ma: number, mi: number): number;
544
+ function registerDevice(dev: number, ops: any): void;
545
+
546
+ //
547
+ // core
548
+ //
549
+ function syncfs(populate: boolean, callback: (e: any) => any): void;
550
+ function syncfs(callback: (e: any) => any, populate?: boolean): void;
551
+ function mount(
552
+ type: Emscripten.FileSystemType,
553
+ opts: any,
554
+ mountpoint: string
555
+ ): any;
556
+ function unmount(mountpoint: string): void;
557
+
558
+ function mkdir(path: string, mode?: number): any;
559
+ function mkdev(path: string, mode?: number, dev?: number): any;
560
+ function symlink(oldpath: string, newpath: string): any;
561
+ function rename(old_path: string, new_path: string): void;
562
+ function rmdir(path: string): void;
563
+ function readdir(path: string): any;
564
+ function unlink(path: string): void;
565
+ function readlink(path: string): string;
566
+ function stat(path: string, dontFollow?: boolean): any;
567
+ function lstat(path: string): any;
568
+ function chmod(path: string, mode: number, dontFollow?: boolean): void;
569
+ function lchmod(path: string, mode: number): void;
570
+ function fchmod(fd: number, mode: number): void;
571
+ function chown(
572
+ path: string,
573
+ uid: number,
574
+ gid: number,
575
+ dontFollow?: boolean
576
+ ): void;
577
+ function lchown(path: string, uid: number, gid: number): void;
578
+ function fchown(fd: number, uid: number, gid: number): void;
579
+ function truncate(path: string, len: number): void;
580
+ function ftruncate(fd: number, len: number): void;
581
+ function utime(path: string, atime: number, mtime: number): void;
582
+ function open(
583
+ path: string,
584
+ flags: string,
585
+ mode?: number,
586
+ fd_start?: number,
587
+ fd_end?: number
588
+ ): FSStream;
589
+ function close(stream: FSStream): void;
590
+ function llseek(stream: FSStream, offset: number, whence: number): any;
591
+ function read(
592
+ stream: FSStream,
593
+ buffer: ArrayBufferView,
594
+ offset: number,
595
+ length: number,
596
+ position?: number
597
+ ): number;
598
+ function write(
599
+ stream: FSStream,
600
+ buffer: ArrayBufferView,
601
+ offset: number,
602
+ length: number,
603
+ position?: number,
604
+ canOwn?: boolean
605
+ ): number;
606
+ function allocate(stream: FSStream, offset: number, length: number): void;
607
+ function mmap(
608
+ stream: FSStream,
609
+ buffer: ArrayBufferView,
610
+ offset: number,
611
+ length: number,
612
+ position: number,
613
+ prot: number,
614
+ flags: number
615
+ ): any;
616
+ function ioctl(stream: FSStream, cmd: any, arg: any): any;
617
+ function readFile(
618
+ path: string,
619
+ opts?: { encoding?: "binary" | "utf8"; flags?: string }
620
+ ): string | Uint8Array;
621
+ function writeFile(
622
+ path: string,
623
+ data: string | ArrayBufferView,
624
+ opts?: { flags?: string }
625
+ ): void;
626
+
627
+ //
628
+ // module-level FS code
629
+ //
630
+ function cwd(): string;
631
+ function chdir(path: string): void;
632
+ function init(
633
+ input: null | (() => number | null),
634
+ output: null | ((c: number) => any),
635
+ error: null | ((c: number) => any)
636
+ ): void;
637
+
638
+ function createLazyFile(
639
+ parent: string | FSNode,
640
+ name: string,
641
+ url: string,
642
+ canRead: boolean,
643
+ canWrite: boolean
644
+ ): FSNode;
645
+ function createPreloadedFile(
646
+ parent: string | FSNode,
647
+ name: string,
648
+ url: string,
649
+ canRead: boolean,
650
+ canWrite: boolean,
651
+ onload?: () => void,
652
+ onerror?: () => void,
653
+ dontCreateFile?: boolean,
654
+ canOwn?: boolean
655
+ ): void;
656
+ }
657
+
658
+ declare var MEMFS: Emscripten.FileSystemType;
659
+ declare var NODEFS: Emscripten.FileSystemType;
660
+ declare var IDBFS: Emscripten.FileSystemType;
661
+
662
+ declare function UTF8ToString(ptr: number, maxBytesToRead?: number): string;
663
+ declare function stringToUTF8(
664
+ str: string,
665
+ outPtr: number,
666
+ maxBytesToRead?: number
667
+ ): void;
668
+ declare function lengthBytesUTF8(str: string): number;
669
+ declare function allocateUTF8(str: string): number;
670
+ declare function UTF16ToString(ptr: number): string;
671
+ declare function stringToUTF16(
672
+ str: string,
673
+ outPtr: number,
674
+ maxBytesToRead?: number
675
+ ): void;
676
+ declare function lengthBytesUTF16(str: string): number;
677
+ declare function UTF32ToString(ptr: number): string;
678
+ declare function stringToUTF32(
679
+ str: string,
680
+ outPtr: number,
681
+ maxBytesToRead?: number
682
+ ): void;
683
+ declare function lengthBytesUTF32(str: string): number;
684
+
685
+ interface Math {
686
+ imul(a: number, b: number): number;
687
+ }
688
+
689
+ declare module "@model-create/epanet-engine" {
690
+ export var epanetEngine: EmscriptenModule;
691
+ }