MCPcopy Create free account
hub / github.com/ElementsProject/elements / simplicity_computeTypeAnalyses

Function simplicity_computeTypeAnalyses

src/simplicity/type.c:35–67  ·  view source on GitHub ↗

Given a well-formed 'type_dag', compute the bitSizes, skips, and type Merkle roots of all subexpressions. * For all 'i', 0 <= 'i' < 'len', * 'type_dag[i].typeMerkleRoot' will be the TMR * and 'type_dag[i].bitSize' will be the bitSize of the subexpression denoted by the slice * * (type_dag[i + 1])type_dag. * * and when 'type_dag[i]' represents a non-trivial 'PRODUCT' type, where on

Source from the content-addressed store, hash-verified

33 * Precondition: type type_dag[len] and 'type_dag' is well-formed.
34 */
35void simplicity_computeTypeAnalyses(type* type_dag, const size_t len) {
36 for (size_t i = 0; i < len; ++i) {
37 type_dag[i].skip = i;
38 switch (type_dag[i].kind) {
39 case ONE:
40 type_dag[i].bitSize = 0;
41 break;
42 case SUM:
43 type_dag[i].bitSize = bounded_max(type_dag[type_dag[i].typeArg[0]].bitSize, type_dag[type_dag[i].typeArg[1]].bitSize);
44 bounded_inc(&type_dag[i].bitSize);
45 break;
46 case PRODUCT:
47 type_dag[i].bitSize = bounded_add(type_dag[type_dag[i].typeArg[0]].bitSize, type_dag[type_dag[i].typeArg[1]].bitSize);
48 if (0 == type_dag[type_dag[i].typeArg[0]].bitSize) {
49 type_dag[i].skip = type_dag[type_dag[i].typeArg[1]].skip;
50 } else if (0 == type_dag[type_dag[i].typeArg[1]].bitSize) {
51 type_dag[i].skip = type_dag[type_dag[i].typeArg[0]].skip;
52 }
53 }
54
55 type_dag[i].typeMerkleRoot = tmrIV(type_dag[i].kind);
56
57 uint32_t block[16];
58 switch (type_dag[i].kind) {
59 case ONE: break;
60 case SUM:
61 case PRODUCT:
62 memcpy(block, type_dag[type_dag[i].typeArg[0]].typeMerkleRoot.s, sizeof(uint32_t[8]));
63 memcpy(block + 8, type_dag[type_dag[i].typeArg[1]].typeMerkleRoot.s, sizeof(uint32_t[8]));
64 simplicity_sha256_compression(type_dag[i].typeMerkleRoot.s, block);
65 }
66 }
67}

Callers 1

freezeTypesFunction · 0.85

Calls 4

bounded_maxFunction · 0.85
bounded_incFunction · 0.85
bounded_addFunction · 0.85
tmrIVFunction · 0.85

Tested by

no test coverage detected