1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.u8aToBigInt = void 0;
|
4 | const x_bigint_1 = require("@polkadot/x-bigint");
|
5 | const consts_js_1 = require("../bi/consts.js");
|
6 | const U8_MAX = (0, x_bigint_1.BigInt)(256);
|
7 | const U16_MAX = (0, x_bigint_1.BigInt)(256 * 256);
|
8 | const U64_MAX = (0, x_bigint_1.BigInt)('0x10000000000000000');
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function u8aToBigInt(value, { isLe = true, isNegative = false } = {}) {
|
14 |
|
15 |
|
16 | if (!isLe) {
|
17 | value = value.slice().reverse();
|
18 | }
|
19 | const count = value.length;
|
20 | if (isNegative && count && (value[count - 1] & 0x80)) {
|
21 | switch (count) {
|
22 | case 0:
|
23 | return (0, x_bigint_1.BigInt)(0);
|
24 | case 1:
|
25 | return (0, x_bigint_1.BigInt)(((value[0] ^ 255) * -1) - 1);
|
26 | case 2:
|
27 | return (0, x_bigint_1.BigInt)((((value[0] + (value[1] << 8)) ^ 65535) * -1) - 1);
|
28 | case 4:
|
29 | return (0, x_bigint_1.BigInt)((((value[0] + (value[1] << 8) + (value[2] << 16) + (value[3] * 16777216)) ^ 4294967295) * -1) - 1);
|
30 | }
|
31 | const dvI = new DataView(value.buffer, value.byteOffset);
|
32 | if (count === 8) {
|
33 | return dvI.getBigInt64(0, true);
|
34 | }
|
35 | let result = (0, x_bigint_1.BigInt)(0);
|
36 | const mod = count % 2;
|
37 | for (let i = count - 2; i >= mod; i -= 2) {
|
38 | result = (result * U16_MAX) + (0, x_bigint_1.BigInt)(dvI.getUint16(i, true) ^ 0xffff);
|
39 | }
|
40 | if (mod) {
|
41 | result = (result * U8_MAX) + (0, x_bigint_1.BigInt)(value[0] ^ 0xff);
|
42 | }
|
43 | return (result * -consts_js_1._1n) - consts_js_1._1n;
|
44 | }
|
45 | switch (count) {
|
46 | case 0:
|
47 | return (0, x_bigint_1.BigInt)(0);
|
48 | case 1:
|
49 | return (0, x_bigint_1.BigInt)(value[0]);
|
50 | case 2:
|
51 | return (0, x_bigint_1.BigInt)(value[0] + (value[1] << 8));
|
52 | case 4:
|
53 | return (0, x_bigint_1.BigInt)(value[0] + (value[1] << 8) + (value[2] << 16) + (value[3] * 16777216));
|
54 | }
|
55 | const dvI = new DataView(value.buffer, value.byteOffset);
|
56 | switch (count) {
|
57 | case 8:
|
58 | return dvI.getBigUint64(0, true);
|
59 | case 16:
|
60 | return (dvI.getBigUint64(8, true) * U64_MAX) + dvI.getBigUint64(0, true);
|
61 | default: {
|
62 | let result = (0, x_bigint_1.BigInt)(0);
|
63 | const mod = count % 2;
|
64 | for (let i = count - 2; i >= mod; i -= 2) {
|
65 | result = (result * U16_MAX) + (0, x_bigint_1.BigInt)(dvI.getUint16(i, true));
|
66 | }
|
67 | if (mod) {
|
68 | result = (result * U8_MAX) + (0, x_bigint_1.BigInt)(value[0]);
|
69 | }
|
70 | return result;
|
71 | }
|
72 | }
|
73 | }
|
74 | exports.u8aToBigInt = u8aToBigInt;
|