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