arnaucube
arnaucube/circomPublic Self-hosted repository
circom/src/utils.js
src/utils.jsRaw
 1const fnv = require("fnv-plus");
 2
 3module.exports.ident =ident;
 4
 5module.exports.extractSizes =extractSizes;
 6module.exports.csArr = csArr;
 7module.exports.subArray = subArray;
 8module.exports.accSizes = accSizes;
 9module.exports.fnvHash = fnvHash;
10
11function ident(text) {
12    let lines = text.split("\n");
13    for (let i=0; i<lines.length; i++) {
14        if (lines[i]) lines[i] = "    "+lines[i];
15    }
16    return lines.join("\n");
17}
18
19function extractSizes (o) {
20    if (! Array.isArray(o)) return [1, 0];
21    return [o.length, ...extractSizes(o[0])];
22}
23
24// Input [1,2,3]
25// Returns " ,1 ,2, 3"
26function csArr(_arr) {
27    let S = "";
28    const arr = _arr || [];
29    for (let i=0; i<arr.length; i++) {
30        S = " ,"+arr[i];
31    }
32    return S;
33}
34
35function subArray(value, sels) {
36    if ((!sels) || (sels.length == 0)) return value;
37
38    return subArray(value[sels[0]], sels.slice(1));
39}
40
41function accSizes(_sizes) {
42    const sizes = _sizes || [];
43    const accSizes = [1, 0];
44    for (let i=sizes.length-1; i>=0; i--) {
45        accSizes.unshift(accSizes[0]*sizes[i]);
46    }
47    return accSizes;
48}
49
50function fnvHash(str) {
51    return fnv.hash(str, 64).hex();
52}
53
54
55