zkjson 0.1.21 → 0.1.23
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/encoder.js +74 -75
- package/package.json +1 -1
- package/parse.js +133 -92
- package/uint.js +246 -203
package/uint.js
CHANGED
@@ -1,61 +1,67 @@
|
|
1
1
|
function digits(x) {
|
2
|
-
if (x == 0) return
|
3
|
-
var p =
|
2
|
+
if (x == 0) return 1n
|
3
|
+
var p = 0n
|
4
4
|
while (x > 0) {
|
5
|
-
x = (x /
|
5
|
+
x = (x / 10n) >> 0n
|
6
6
|
p++
|
7
7
|
}
|
8
8
|
return p
|
9
9
|
}
|
10
10
|
|
11
|
-
|
11
|
+
function arr(row) {
|
12
12
|
var _arr = []
|
13
13
|
for (var i = 0; i < row; i++) {
|
14
|
-
_arr.push(
|
14
|
+
_arr.push(0n)
|
15
15
|
}
|
16
16
|
return _arr
|
17
17
|
}
|
18
18
|
|
19
|
-
|
19
|
+
function toArray(json, size) {
|
20
|
+
json = bn(json)
|
20
21
|
var j = []
|
21
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
22
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
22
23
|
while (c[5] == 0) {
|
23
24
|
c = next(json, c)
|
24
25
|
j.push(c[0])
|
25
26
|
}
|
26
|
-
return j
|
27
|
+
return j.map(n => Number(n))
|
27
28
|
}
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
function arrPush(json, size, digit, index, val) {
|
31
|
+
json = bn(json)
|
32
|
+
index = bn(index)
|
31
33
|
var len = get(json, size, 0)
|
32
|
-
var _sum = sum(json, size, digit, 1, index +
|
33
|
-
var at = _sum +
|
34
|
+
var _sum = sum(json, size, digit, 1, index + 2n)
|
35
|
+
var at = _sum + 1n + len
|
34
36
|
json = insert(json, size, digit, at, val)
|
35
|
-
var alen = get(json, size, index +
|
36
|
-
json = replace(json, size, digit, index +
|
37
|
+
var alen = get(json, size, index + 1n)
|
38
|
+
json = replace(json, size, digit, index + 1n, alen + 1n)
|
37
39
|
return json
|
38
40
|
}
|
39
41
|
|
40
|
-
|
42
|
+
function arrGet(json, size, digit, index, index2) {
|
43
|
+
json = bn(json)
|
44
|
+
index = bn(index)
|
45
|
+
index2 = bn(index2)
|
41
46
|
var len = get(json, size, 0)
|
42
|
-
var _sum = sum(json, size, digit, 1, index +
|
43
|
-
var at = _sum +
|
47
|
+
var _sum = sum(json, size, digit, 1, index + 1n)
|
48
|
+
var at = _sum + 1n + len + index2
|
44
49
|
return get(json, size, at)
|
45
50
|
}
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
var
|
50
|
-
|
52
|
+
function pushArray(json, size, digit, _arr, asize) {
|
53
|
+
json = bn(json)
|
54
|
+
var jlen = length(json, size)
|
55
|
+
var alen = 0n
|
56
|
+
if (jlen == 0) {
|
51
57
|
json = push(json, size, digit, 1)
|
52
|
-
}else{
|
58
|
+
} else {
|
53
59
|
alen = get(json, size, 0)
|
54
|
-
json = replace(json, size, digit, 0, alen +
|
60
|
+
json = replace(json, size, digit, 0, alen + 1n)
|
55
61
|
}
|
56
|
-
var len = length(_arr,size)
|
57
|
-
json = insert(json, size, digit, alen +
|
58
|
-
var c = [0, asize, 0, 0, 0, 0, 0, 0, 0]
|
62
|
+
var len = length(_arr, size)
|
63
|
+
json = insert(json, size, digit, alen + 1n, len)
|
64
|
+
var c = bn([0, asize, 0, 0, 0, 0, 0, 0, 0])
|
59
65
|
while (c[5] == 0) {
|
60
66
|
c = next(_arr, c)
|
61
67
|
json = push(json, size, digit, c[0])
|
@@ -63,29 +69,30 @@ const pushArray = (json, size, digit, _arr, asize) => {
|
|
63
69
|
return json
|
64
70
|
}
|
65
71
|
|
66
|
-
|
67
|
-
|
68
|
-
var
|
69
|
-
|
72
|
+
function popArray(json, size, digit) {
|
73
|
+
json = bn(json)
|
74
|
+
var jlen = length(json, size)
|
75
|
+
var alen = 0n
|
76
|
+
if (jlen == 0) {
|
70
77
|
throw Error()
|
71
|
-
}else{
|
78
|
+
} else {
|
72
79
|
alen = get(json, size, 0)
|
73
80
|
}
|
74
|
-
if(alen == 1) return
|
81
|
+
if (alen == 1) return arr(size)
|
75
82
|
var len = get(json, size, alen)
|
76
|
-
json = replace(json, size, digit, 0, alen -
|
83
|
+
json = replace(json, size, digit, 0, alen - 1n)
|
77
84
|
var _sum = sum(json, size, digit, 1, alen)
|
78
|
-
var start = alen +
|
79
|
-
var end = start + len +
|
80
|
-
json = remove(json, size, digit, start,
|
81
|
-
json = remove(json, size, digit, alen,
|
85
|
+
var start = alen + 1n + _sum
|
86
|
+
var end = start + len + 1n
|
87
|
+
json = remove(json, size, digit, start, end)
|
88
|
+
json = remove(json, size, digit, alen, alen + 1n)
|
82
89
|
return json
|
83
90
|
}
|
84
91
|
|
85
|
-
|
86
|
-
|
87
|
-
var _len =
|
88
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
92
|
+
function length(json, size) {
|
93
|
+
json = bn(json)
|
94
|
+
var _len = 0n
|
95
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
89
96
|
while (c[5] == 0) {
|
90
97
|
c = next(json, c)
|
91
98
|
_len++
|
@@ -97,9 +104,10 @@ const length = (json, size) => {
|
|
97
104
|
}
|
98
105
|
}
|
99
106
|
|
100
|
-
|
101
|
-
|
102
|
-
var
|
107
|
+
function sum(json, size, digit, start, end) {
|
108
|
+
json = bn(json)
|
109
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
110
|
+
var _sum = 0n
|
103
111
|
var i = 0
|
104
112
|
while (c[5] == 0) {
|
105
113
|
c = next(json, c)
|
@@ -109,8 +117,9 @@ const sum = (json, size, digit, start, end) =>{
|
|
109
117
|
return _sum
|
110
118
|
}
|
111
119
|
|
112
|
-
|
113
|
-
|
120
|
+
function mul(json, size, digit, start, end) {
|
121
|
+
json = bn(json)
|
122
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
114
123
|
var _mul = 0
|
115
124
|
var i = 0
|
116
125
|
while (c[5] == 0) {
|
@@ -121,83 +130,93 @@ const mul = (json, size, digit, start, end) =>{
|
|
121
130
|
return _mul
|
122
131
|
}
|
123
132
|
|
124
|
-
|
133
|
+
function remove(json, size, digit, start, end) {
|
134
|
+
json = bn(json)
|
125
135
|
var _arr = arr(size)
|
126
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
136
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
127
137
|
var i = 0
|
128
138
|
while (c[5] == 0) {
|
129
139
|
c = next(json, c)
|
130
|
-
if (i < start || i >= end)
|
140
|
+
if (i < start || i >= end) {
|
141
|
+
_arr = push(_arr, size, digit, c[0])
|
142
|
+
}
|
131
143
|
i++
|
132
144
|
}
|
133
145
|
return _arr
|
134
146
|
}
|
135
147
|
|
136
|
-
|
148
|
+
function slice(json, size, digit, start, end) {
|
149
|
+
json = bn(json)
|
137
150
|
var _arr = arr(size)
|
138
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
151
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
139
152
|
var i = 0
|
140
153
|
while (c[5] == 0) {
|
141
154
|
c = next(json, c)
|
142
|
-
if (i >= start && i < end) push(_arr, size, digit, c[0])
|
155
|
+
if (i >= start && i < end) _arr = push(_arr, size, digit, c[0])
|
143
156
|
i++
|
144
157
|
}
|
145
158
|
return _arr
|
146
159
|
}
|
147
160
|
|
148
|
-
|
149
|
-
|
161
|
+
function get(json, size, index) {
|
162
|
+
json = bn(json)
|
163
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
150
164
|
var i = 0
|
151
165
|
while (c[5] == 0) {
|
152
166
|
c = next(json, c)
|
153
|
-
if(i == index) return c[0]
|
167
|
+
if (i == index) return c[0]
|
154
168
|
i++
|
155
169
|
}
|
156
170
|
throw Error()
|
157
171
|
}
|
158
172
|
|
159
|
-
|
173
|
+
function insert(json, size, digit, at, val) {
|
174
|
+
json = bn(json)
|
160
175
|
var _arr = arr(size)
|
161
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
176
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
162
177
|
var i = 0
|
163
|
-
if(at == 0) {
|
178
|
+
if (at == 0) {
|
164
179
|
_arr = push(_arr, size, digit, val)
|
165
180
|
}
|
166
181
|
while (c[5] == 0) {
|
167
182
|
c = next(json, c)
|
168
|
-
push(_arr, size, digit, c[0])
|
183
|
+
_arr = push(_arr, size, digit, c[0])
|
169
184
|
i++
|
170
|
-
if(at == i) push(_arr, size, digit, val)
|
185
|
+
if (at == i) _arr = push(_arr, size, digit, val)
|
171
186
|
}
|
172
187
|
return _arr
|
173
188
|
}
|
174
189
|
|
175
|
-
|
190
|
+
function replace(json, size, digit, at, val) {
|
191
|
+
json = bn(json)
|
176
192
|
var _arr = arr(size)
|
177
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
193
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
178
194
|
var i = 0
|
179
195
|
while (c[5] == 0) {
|
180
196
|
c = next(json, c)
|
181
|
-
if(at == i) {
|
197
|
+
if (at == i) {
|
182
198
|
_arr = push(_arr, size, digit, val)
|
183
|
-
}else{
|
184
|
-
push(_arr, size, digit, c[0])
|
199
|
+
} else {
|
200
|
+
_arr = push(_arr, size, digit, c[0])
|
185
201
|
}
|
186
202
|
i++
|
187
203
|
}
|
188
204
|
return _arr
|
189
205
|
}
|
190
206
|
|
191
|
-
|
207
|
+
function last(json, size) {
|
208
|
+
json = bn(json)
|
192
209
|
var val = 0
|
193
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
210
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
194
211
|
while (c[5] == 0) {
|
195
212
|
c = next(json, c)
|
196
213
|
val = c[0]
|
197
214
|
}
|
198
215
|
return val
|
199
216
|
}
|
200
|
-
|
217
|
+
|
218
|
+
function lastRow(json, size) {
|
219
|
+
json = bn(json)
|
201
220
|
var v = 0
|
202
221
|
for (var j = 0; j < size; j++) {
|
203
222
|
if (json[j] != 0) v = j
|
@@ -205,37 +224,41 @@ const lastRow = (json, size) => {
|
|
205
224
|
return v
|
206
225
|
}
|
207
226
|
|
208
|
-
|
227
|
+
function shift(json, size, digit) {
|
228
|
+
json = bn(json)
|
209
229
|
var _arr = arr(size)
|
210
|
-
var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
|
230
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
211
231
|
var i = 0
|
212
232
|
while (c[5] == 0) {
|
213
233
|
c = next(json, c)
|
214
|
-
if (i > 0) push(_arr, size, digit, c[0])
|
234
|
+
if (i > 0) _arr = push(_arr, size, digit, c[0])
|
215
235
|
i++
|
216
236
|
}
|
217
237
|
return _arr
|
218
238
|
}
|
219
239
|
|
220
|
-
|
240
|
+
function unshift(json, size, digit, num) {
|
241
|
+
json = bn(json)
|
221
242
|
var _arr = arr(size)
|
222
|
-
push(_arr, size, digit, num)
|
223
|
-
|
243
|
+
_arr = push(_arr, size, digit, num)
|
244
|
+
|
245
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
224
246
|
var i = 0
|
225
|
-
if (json[0]
|
247
|
+
if (json[0] != 0) {
|
226
248
|
while (c[5] == 0) {
|
227
249
|
c = next(json, c)
|
228
|
-
push(_arr, size, digit, c[0])
|
250
|
+
_arr = push(_arr, size, digit, c[0])
|
229
251
|
i++
|
230
252
|
}
|
231
253
|
}
|
232
254
|
return _arr
|
233
255
|
}
|
234
256
|
|
235
|
-
|
236
|
-
|
257
|
+
function concat(json, json2, size, digit) {
|
258
|
+
json = bn(json)
|
259
|
+
var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
|
237
260
|
var i = 0
|
238
|
-
if (json2[0]
|
261
|
+
if (json2[0] != 0) {
|
239
262
|
while (c[5] == 0) {
|
240
263
|
c = next(json2, c)
|
241
264
|
json = push(json, size, digit, c[0])
|
@@ -244,65 +267,68 @@ const concat = (json, json2, size, digit) => {
|
|
244
267
|
}
|
245
268
|
return json
|
246
269
|
}
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
var
|
252
|
-
var
|
253
|
-
var
|
254
|
-
var
|
255
|
-
var
|
256
|
-
|
270
|
+
|
271
|
+
function pop(json, size, overflow = 8) {
|
272
|
+
json = bn(json)
|
273
|
+
overflow = bn(overflow)
|
274
|
+
var l = 0n
|
275
|
+
var ll = 0n
|
276
|
+
var lnum = 0n
|
277
|
+
var series = 0n
|
278
|
+
var snum = 0n
|
279
|
+
var link = 0n
|
280
|
+
var _l = 0n
|
281
|
+
var _d = 0n
|
282
|
+
for (var l2 = 0n; l2 < size; l2++) {
|
257
283
|
if (json[l2] != 0) {
|
258
284
|
_l = l2
|
259
285
|
var x = json[l2]
|
260
286
|
var d = digits(x)
|
261
287
|
var p = d
|
262
|
-
var on =
|
263
|
-
var i =
|
288
|
+
var on = 0n
|
289
|
+
var i = 0n
|
264
290
|
while (x > 0) {
|
265
|
-
var n = (x /
|
266
|
-
x -=
|
291
|
+
var n = (x / 10n ** (p - 1n)) >> 0n
|
292
|
+
x -= 10n ** (p - 1n) * n
|
267
293
|
p--
|
268
294
|
i++
|
269
295
|
if (on == 0) {
|
270
|
-
on =
|
296
|
+
on = 1n
|
271
297
|
} else {
|
272
298
|
var len = n
|
273
299
|
if (link == 0) {
|
274
|
-
ll = i -
|
300
|
+
ll = i - 1n
|
275
301
|
l = l2
|
276
302
|
_d = d
|
277
303
|
}
|
278
304
|
lnum = len
|
279
|
-
snum =
|
305
|
+
snum = 0n
|
280
306
|
if (len == 0) {
|
281
|
-
var n = (x /
|
282
|
-
var len2 = (x /
|
307
|
+
var n = (x / 10n ** (p - 1n)) >> 0n
|
308
|
+
var len2 = (x / 10n ** (p - 1n)) >> 0n
|
283
309
|
series = len2
|
284
|
-
x -=
|
310
|
+
x -= 10n ** (p - 1n) * n
|
285
311
|
p--
|
286
312
|
i++
|
287
|
-
for (var i2 =
|
288
|
-
var n = (x /
|
289
|
-
snum = snum *
|
290
|
-
x -=
|
313
|
+
for (var i2 = 0n; i2 < len2; i2++) {
|
314
|
+
var n = (x / 10n ** (p - 1n)) >> 0n
|
315
|
+
snum = snum * 10n + n
|
316
|
+
x -= 10n ** (p - 1n) * n
|
291
317
|
p--
|
292
318
|
i++
|
293
319
|
}
|
294
320
|
} else {
|
295
321
|
var _len = len
|
296
|
-
if (len == overflow +
|
297
|
-
link =
|
322
|
+
if (len == overflow + 1n) {
|
323
|
+
link = 2n
|
298
324
|
_len = overflow
|
299
325
|
} else if (link > 0) {
|
300
326
|
link--
|
301
327
|
}
|
302
|
-
series =
|
303
|
-
for (var i2 =
|
304
|
-
var n = (x /
|
305
|
-
x -=
|
328
|
+
series = 0n
|
329
|
+
for (var i2 = 0n; i2 < _len; i2++) {
|
330
|
+
var n = (x / 10n ** (p - 1n)) >> 0n
|
331
|
+
x -= 10n ** (p - 1n) * n
|
306
332
|
p--
|
307
333
|
i++
|
308
334
|
}
|
@@ -313,40 +339,45 @@ const pop = (json, size, overflow = 3) => {
|
|
313
339
|
}
|
314
340
|
|
315
341
|
if (link == 1) {
|
316
|
-
for (var i = l +
|
317
|
-
json[i] =
|
342
|
+
for (var i = l + 1n; i <= _l; i++) {
|
343
|
+
json[i] = 0n
|
318
344
|
}
|
319
345
|
if (ll < 2) {
|
320
|
-
json[l] =
|
346
|
+
json[l] = 0n
|
321
347
|
} else {
|
322
|
-
json[l] = (json[l] /
|
348
|
+
json[l] = (json[l] / 10n ** (_d - ll)) >> 0n
|
323
349
|
}
|
324
350
|
} else if (series != 0) {
|
325
351
|
if (series == 3) {
|
326
|
-
json[l] = (json[l] /
|
327
|
-
json[l] = json[l] *
|
328
|
-
var n = (snum /
|
329
|
-
json[l] = json[l] *
|
330
|
-
json[l] = json[l] *
|
331
|
-
var n2 = ((snum /
|
332
|
-
json[l] = json[l] *
|
352
|
+
json[l] = (json[l] / 10n ** (_d - ll)) >> 0n
|
353
|
+
json[l] = json[l] * 10n + 1n
|
354
|
+
var n = (snum / 10n ** 2n) >> 0n
|
355
|
+
json[l] = json[l] * 10n + n
|
356
|
+
json[l] = json[l] * 10n + 1n
|
357
|
+
var n2 = ((snum / 10n) >> 0n) - n * 10n
|
358
|
+
json[l] = json[l] * 10n + n2
|
333
359
|
} else {
|
334
|
-
json[l] = (json[l] /
|
335
|
-
json[l] = json[l] *
|
336
|
-
snum = (snum /
|
337
|
-
json[l] = json[l] *
|
360
|
+
json[l] = (json[l] / 10n ** (_d - ll - 1n)) >> 0n
|
361
|
+
json[l] = json[l] * 10n + (series - 1n)
|
362
|
+
snum = (snum / 10n) >> 0n
|
363
|
+
json[l] = json[l] * 10n ** (series - 1n) + snum
|
338
364
|
}
|
339
365
|
} else if (ll < 2) {
|
340
|
-
json[l] =
|
366
|
+
json[l] = 0n
|
341
367
|
} else {
|
342
|
-
json[l] = (json[l] /
|
368
|
+
json[l] = (json[l] / 10n ** (d - ll)) >> 0n
|
343
369
|
}
|
344
370
|
return json
|
345
371
|
}
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
372
|
+
function push(json, size, digit, c, overflow = 8) {
|
373
|
+
overflow = bn(overflow)
|
374
|
+
json = bn(json)
|
375
|
+
c = bn(c)
|
376
|
+
var i4 = 0n
|
377
|
+
for (var i = i4; i < size; i++) {
|
378
|
+
if (json[i] != 0) i4 = i
|
379
|
+
}
|
380
|
+
var init = 0n
|
350
381
|
while (c > 0 || init == 0) {
|
351
382
|
init = 1
|
352
383
|
var len = digits(c)
|
@@ -355,76 +386,77 @@ const push = (json, size, digit, c, overflow = 3) => {
|
|
355
386
|
var _c = c
|
356
387
|
if (overflow < len) {
|
357
388
|
_len = overflow
|
358
|
-
_len2 = overflow +
|
359
|
-
_c = (c /
|
360
|
-
c -= _c *
|
389
|
+
_len2 = overflow + 1n
|
390
|
+
_c = (c / 10n ** (len - overflow)) >> 0n
|
391
|
+
c -= _c * 10n ** (len - overflow)
|
361
392
|
} else {
|
362
|
-
c =
|
393
|
+
c = 0n
|
363
394
|
}
|
364
395
|
var appended = 0
|
365
396
|
for (var i = i4; i < size; i++) {
|
366
397
|
var d = digits(json[i])
|
367
|
-
var one =
|
368
|
-
var ones =
|
369
|
-
var nums =
|
398
|
+
var one = 0n
|
399
|
+
var ones = 0n
|
400
|
+
var nums = 0n
|
370
401
|
if (_len == 1 && digit > d) {
|
371
|
-
var x = json[i] -
|
372
|
-
var i2 =
|
402
|
+
var x = json[i] - 10n ** (d - 1n)
|
403
|
+
var i2 = 1n
|
373
404
|
while (i2 < d) {
|
374
|
-
var len =
|
375
|
-
|
405
|
+
var len = 0n
|
406
|
+
len = (x / 10n ** (d - i2 - 1n)) >> 0n
|
407
|
+
x = x - len * 10n ** (d - i2 - 1n)
|
376
408
|
if (len == 1) {
|
377
409
|
if (ones == 0) one = i2
|
378
410
|
ones++
|
379
|
-
} else if (len
|
380
|
-
ones =
|
381
|
-
nums =
|
411
|
+
} else if (len != 0) {
|
412
|
+
ones = 0n
|
413
|
+
nums = 0n
|
382
414
|
} else {
|
383
415
|
one = i2
|
384
416
|
}
|
385
417
|
i2++
|
386
418
|
if (len == 0) {
|
387
|
-
var len3 = (x /
|
388
|
-
x = x - len3 *
|
419
|
+
var len3 = (x / 10n ** (d - i2 - 1n)) >> 0n
|
420
|
+
x = x - len3 * 10n ** (d - i2 - 1n)
|
389
421
|
i2++
|
390
422
|
ones = len3
|
391
|
-
for (var i3 =
|
392
|
-
var len2 = (x /
|
393
|
-
x = x - len2 *
|
394
|
-
nums = nums *
|
423
|
+
for (var i3 = 0n; i3 < len3; i3++) {
|
424
|
+
var len2 = (x / 10n ** (d - i2 - 1n)) >> 0n
|
425
|
+
x = x - len2 * 10n ** (d - i2 - 1n)
|
426
|
+
nums = nums * 10n + len2
|
395
427
|
i2++
|
396
428
|
}
|
397
429
|
} else {
|
398
|
-
for (var i3 =
|
399
|
-
var len2 = (x /
|
400
|
-
x = x - len2 *
|
401
|
-
if (len == 1) nums = nums *
|
430
|
+
for (var i3 = 0n; i3 < len; i3++) {
|
431
|
+
var len2 = (x / 10n ** (d - i2 - 1n)) >> 0n
|
432
|
+
x = x - len2 * 10n ** (d - i2 - 1n)
|
433
|
+
if (len == 1) nums = nums * 10n + len2
|
402
434
|
i2++
|
403
435
|
}
|
404
436
|
}
|
405
437
|
}
|
406
|
-
if (ones == 2) nums = nums *
|
438
|
+
if (ones == 2) nums = nums * 10n + _c
|
407
439
|
}
|
408
|
-
if (ones > 2) {
|
409
|
-
var x = (json[i] /
|
410
|
-
x = x *
|
411
|
-
x = x *
|
412
|
-
x = x *
|
440
|
+
if (ones > 2 && ones < 9) {
|
441
|
+
var x = (json[i] / 10n ** (d - one - 1n)) >> 0n
|
442
|
+
x = x * 10n + ones + 1n
|
443
|
+
x = x * 10n ** ones + nums
|
444
|
+
x = x * 10n + _c
|
413
445
|
json[i] = x
|
414
446
|
i4 = i
|
415
447
|
appended = 1
|
416
448
|
} else if (ones == 2) {
|
417
|
-
var x = (json[i] /
|
418
|
-
x = x *
|
419
|
-
x = x *
|
420
|
-
x = x *
|
449
|
+
var x = (json[i] / 10n ** (d - one)) >> 0n
|
450
|
+
x = x * 10n + 0n
|
451
|
+
x = x * 10n + ones + 1n
|
452
|
+
x = x * 10n ** (ones + 1n) + nums
|
421
453
|
json[i] = x
|
422
454
|
i4 = i
|
423
455
|
appended = 1
|
424
456
|
} else if (digit > d + _len && appended == 0) {
|
425
|
-
if (json[i] == 0) json[i] =
|
426
|
-
json[i] = json[i] *
|
427
|
-
json[i] = json[i] *
|
457
|
+
if (json[i] == 0) json[i] = 1n
|
458
|
+
json[i] = json[i] * 10n + _len2
|
459
|
+
json[i] = json[i] * 10n ** _len + _c
|
428
460
|
i4 = i
|
429
461
|
appended = 1
|
430
462
|
}
|
@@ -432,95 +464,104 @@ const push = (json, size, digit, c, overflow = 3) => {
|
|
432
464
|
}
|
433
465
|
return json
|
434
466
|
}
|
467
|
+
function bn(arr) {
|
468
|
+
if (typeof arr == "number") return BigInt(arr)
|
469
|
+
if (!Array.isArray(arr)) return arr
|
470
|
+
return arr.map(n => {
|
471
|
+
return typeof n != "number" ? n : BigInt(n)
|
472
|
+
})
|
473
|
+
}
|
435
474
|
|
436
|
-
|
475
|
+
function next(json, c) {
|
476
|
+
json = bn(json)
|
477
|
+
c = bn(c)
|
437
478
|
if (c[5] == 1) {
|
438
|
-
return [0, c[1], 0, 0, 0, 1, c[6], c[7], c[8]]
|
479
|
+
return bn([0, c[1], 0, 0, 0, 1, c[6], c[7], c[8]])
|
439
480
|
}
|
440
|
-
var prev =
|
481
|
+
var prev = 0n
|
441
482
|
for (var j = c[2]; j < c[1]; j++) {
|
442
483
|
var d = digits(json[j])
|
443
484
|
if (json[j] > 0) {
|
444
485
|
var p = c[4] == 0 ? digits(json[j]) : c[4]
|
445
486
|
var x = c[4] == 0 ? json[j] : c[3]
|
446
|
-
var cur =
|
447
|
-
var num =
|
448
|
-
var on = c[4] == 0 ?
|
449
|
-
var len = c[4] == 0 ?
|
487
|
+
var cur = 0n
|
488
|
+
var num = 0n
|
489
|
+
var on = c[4] == 0 ? 0n : c[7]
|
490
|
+
var len = c[4] == 0 ? 0n : c[8]
|
450
491
|
while (p > 0) {
|
451
|
-
var n = (x /
|
492
|
+
var n = (x / 10n ** (p - 1n)) >> 0n
|
452
493
|
if (on == 0) {
|
453
|
-
on =
|
494
|
+
on = 1n
|
454
495
|
} else if (on == 1) {
|
455
496
|
if (n == 0) {
|
456
|
-
on =
|
497
|
+
on = 4n
|
457
498
|
} else {
|
458
499
|
if (n == 9) {
|
459
|
-
len =
|
460
|
-
on =
|
500
|
+
len = 8n
|
501
|
+
on = 3n
|
461
502
|
} else {
|
462
|
-
on =
|
503
|
+
on = 2n
|
463
504
|
len = n
|
464
505
|
}
|
465
|
-
cur =
|
506
|
+
cur = 0n
|
466
507
|
}
|
467
508
|
} else if (on == 4) {
|
468
|
-
on =
|
509
|
+
on = 5n
|
469
510
|
len = n
|
470
511
|
} else {
|
471
|
-
num += n *
|
512
|
+
num += n * 10n ** (len - cur - 1n)
|
472
513
|
cur++
|
473
514
|
if (on == 5) {
|
474
515
|
num = n
|
475
516
|
len--
|
476
|
-
x -=
|
517
|
+
x -= 10n ** (p - 1n) * n
|
477
518
|
p--
|
478
|
-
var done =
|
519
|
+
var done = 0n
|
479
520
|
if (p == 0) {
|
480
521
|
j++
|
481
522
|
if (c[1] == j || json[j] == 0) {
|
482
|
-
x =
|
483
|
-
done =
|
523
|
+
x = 0n
|
524
|
+
done = 1n
|
484
525
|
} else {
|
485
526
|
x = json[j]
|
486
527
|
}
|
487
528
|
}
|
488
|
-
if (len == 0) on =
|
489
|
-
return [num, c[1], j, x, p, done, c[6], on, len]
|
529
|
+
if (len == 0) on = 1n
|
530
|
+
return bn([num, c[1], j, x, p, done, c[6], on, len])
|
490
531
|
} else if (cur == len) {
|
491
|
-
prev *=
|
532
|
+
prev *= 10n ** len
|
492
533
|
if (on == 3) {
|
493
534
|
prev += num
|
494
535
|
} else {
|
495
536
|
num += prev
|
496
|
-
x -=
|
537
|
+
x -= 10n ** (p - 1n) * n
|
497
538
|
p--
|
498
|
-
var done =
|
539
|
+
var done = 0n
|
499
540
|
if (p == 0) {
|
500
541
|
j++
|
501
542
|
if (c[1] == j || json[j] == 0) {
|
502
|
-
x =
|
503
|
-
done =
|
543
|
+
x = 0n
|
544
|
+
done = 1n
|
504
545
|
} else {
|
505
546
|
x = json[j]
|
506
547
|
}
|
507
548
|
}
|
508
|
-
return [num, c[1], j, x, p, done, c[6], 1, len]
|
549
|
+
return bn([num, c[1], j, x, p, done, c[6], 1, len])
|
509
550
|
}
|
510
|
-
cur =
|
511
|
-
on =
|
512
|
-
len =
|
513
|
-
num =
|
551
|
+
cur = 0n
|
552
|
+
on = 1n
|
553
|
+
len = 0n
|
554
|
+
num = 0n
|
514
555
|
}
|
515
556
|
}
|
516
|
-
x -=
|
557
|
+
x -= 10n ** (p - 1n) * n
|
517
558
|
p--
|
518
559
|
}
|
519
560
|
} else {
|
520
|
-
return [0, c[1], 0, 0, 0, 1, c[6], 0, 0]
|
561
|
+
return bn([0, c[1], 0, 0, 0, 1, c[6], 0, 0])
|
521
562
|
}
|
522
563
|
}
|
523
|
-
return [0, c[1], 0, 0, 0, 1, c[6], 0, 0]
|
564
|
+
return bn([0, c[1], 0, 0, 0, 1, c[6], 0, 0])
|
524
565
|
}
|
525
566
|
|
526
567
|
module.exports = {
|
@@ -544,5 +585,7 @@ module.exports = {
|
|
544
585
|
arrGet,
|
545
586
|
remove,
|
546
587
|
popArray,
|
547
|
-
concat
|
588
|
+
concat,
|
589
|
+
bn,
|
590
|
+
digits,
|
548
591
|
}
|