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