3
* Extract the sub signals of a signal expression, that is not
4
* necesseraly all the subtrees.
5
* @param sig the signals
6
* @param vsigs a reference to the vector where the subsignals will be placed
7
* @return the number of subsignals
10
int getSubSignals (Tree sig, vector<Tree>& vsigs)
16
Tree c, sel, x, y, z, var, le, label, id, ff, largs, type, name, file;
18
if ( getUserData(sig) ) { for (int i=0; i<sig->arity(); i++) { vsigs.push_back(sig->branch(i)); }
19
return sig->arity(); }
20
else if ( isSigInt(sig, &i) ) { return 0; }
21
else if ( isSigReal(sig, &r) ) { return 0; }
22
else if ( isSigInput(sig, &i) ) { return 0; }
23
else if ( isSigOutput(sig, &i, x) ) { vsigs.push_back(x); return 1; }
25
else if ( isSigDelay1(sig, x) ) { vsigs.push_back(x); return 1; }
27
else if ( isSigFixDelay(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
28
else if ( isSigPrefix(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
29
else if ( isSigIota(sig, x) ) { vsigs.push_back(x); return 1; }
31
else if ( isSigBinOp(sig, &i, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
32
else if ( isSigFFun(sig, ff, largs) ) { int n = 0; while (!isNil(largs)) { vsigs.push_back(hd(largs)); largs = tl(largs); n++; } return n; }
33
else if ( isSigFConst(sig, type, name, file) ) { return 0; }
35
else if ( isSigTable(sig, id, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
36
else if ( isSigWRTbl(sig, id, x, y, z) ) { vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(z); return 3; }
37
else if ( isSigRDTbl(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
39
else if ( isSigSelect2(sig, sel, x, y) ) { vsigs.push_back(sel); vsigs.push_back(x); vsigs.push_back(y); return 3; }
40
else if ( isSigSelect3(sig, sel, x, y, z) ) { vsigs.push_back(sel); vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(z); return 4; }
42
else if ( isSigGen(sig, x) ) { vsigs.push_back(x); return 1; }
44
else if ( isProj(sig, &i, x) ) { vsigs.push_back(x); return 1; }
45
else if ( isRec(sig, var, le) ) { vsigs.push_back(le); return 1; }
47
else if ( isSigIntCast(sig, x) ) { vsigs.push_back(x); return 1; }
48
else if ( isSigFloatCast(sig, x) ) { vsigs.push_back(x); return 1; }
50
else if ( isSigButton(sig, label) ) { return 0; }
51
else if ( isSigCheckbox(sig, label) ) { return 0; }
52
else if ( isSigVSlider(sig, label,c,x,y,z) ) { return 0; }
53
else if ( isSigHSlider(sig, label,c,x,y,z) ) { return 0; }
54
else if ( isSigNumEntry(sig, label,c,x,y,z) ) { return 0; }
56
else if ( isSigVBargraph(sig, label,x,y,z) ) { vsigs.push_back(z); return 1; }
57
else if ( isSigHBargraph(sig, label,x,y,z) ) { vsigs.push_back(z); return 1; }
58
else if ( isSigAttach(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
59
else if ( isList(sig) ) { int n = 0; while (!isNil(sig)) { vsigs.push_back(hd(sig)); sig = tl(sig); n++; } return n; }
62
cerr << "ERROR, unrecognized signal : " << *sig << endl;