arnaucube
arnaucube/circomPublic Self-hosted repository
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