circom/ports/c/mainjson.cpp
ports/c/mainjson.cppRaw
1#include <iostream>
2#include <nlohmann/json.hpp>
3using json = nlohmann::json;
4
5
6#include "utils.h"
7#include "circom.h"
8#include "calcwit.h"
9
10auto j = R"(
11 {
12 "in": "314"
13 }
14)"_json;
15
16typedef void (*ItFunc)(int idx, json val);
17
18void iterateArr(int o, Circom_Sizes sizes, json jarr, ItFunc f) {
19 if (!jarr.is_array()) {
20 assert((sizes[0] == 1)&&(sizes[1] == 0));
21 f(o, jarr);
22 } else {
23 int n = sizes[0] / sizes[1];
24 for (int i=0; i<n; i++) {
25 iterateArr(o + i*sizes[1], sizes+1, jarr[i], f);
26 }
27 }
28}
29
30void itFunc(int o, json v) {
31 std::cout << o << " <-- " << v << '\n';
32}
33
34
35int main(int argc, char **argv) {
36
37 Circom_CalcWit *ctx = new Circom_CalcWit(&_circuit);
38
39 for (json::iterator it = j.begin(); it != j.end(); ++it) {
40// std::cout << it.key() << " => " << it.value() << '\n';
41 u64 h = fnv1a(it.key());
42 int o = ctx->getSignalOffset(0, h);
43 Circom_Sizes sizes = ctx->getSignalSizes(0, h);
44 iterateArr(o, sizes, it.value(), itFunc);
45 }
46}
47