00001 #include <signals.hh>
00010 int getSubSignals (Tree sig, vector<Tree>& vsigs, bool visitgen)
00011 {
00012 vsigs.clear();
00013
00014 int i;
00015 float r;
00016 Tree c, sel, x, y, z, var, le, label, id, ff, largs, type, name, file;
00017
00018 if ( getUserData(sig) ) { for (int i=0; i<sig->arity(); i++) { vsigs.push_back(sig->branch(i)); }
00019 return sig->arity(); }
00020 else if ( isSigInt(sig, &i) ) { return 0; }
00021 else if ( isSigReal(sig, &r) ) { return 0; }
00022 else if ( isSigInput(sig, &i) ) { return 0; }
00023 else if ( isSigOutput(sig, &i, x) ) { vsigs.push_back(x); return 1; }
00024
00025 else if ( isSigDelay1(sig, x) ) { vsigs.push_back(x); return 1; }
00026
00027 else if ( isSigFixDelay(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00028 else if ( isSigPrefix(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00029 else if ( isSigIota(sig, x) ) { vsigs.push_back(x); return 1; }
00030
00031 else if ( isSigBinOp(sig, &i, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00032 else if ( isSigFFun(sig, ff, largs) ) { int n = 0; while (!isNil(largs)) { vsigs.push_back(hd(largs)); largs = tl(largs); n++; } return n; }
00033 else if ( isSigFConst(sig, type, name, file) ) { return 0; }
00034 else if ( isSigFVar(sig, type, name, file) ) { return 0; }
00035
00036 else if ( isSigTable(sig, id, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00037 else if ( isSigWRTbl(sig, id, x, y, z) ) { vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(z); return 3; }
00038 else if ( isSigRDTbl(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00039
00040 else if ( isSigSelect2(sig, sel, x, y) ) { vsigs.push_back(sel); vsigs.push_back(x); vsigs.push_back(y); return 3; }
00041 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; }
00042
00043 else if ( isSigGen(sig, x) ) { if (visitgen) { vsigs.push_back(x); return 1;} else { return 0; } }
00044
00045 else if ( isProj(sig, &i, x) ) { vsigs.push_back(x); return 1; }
00046 else if ( isRec(sig, var, le) ) { vsigs.push_back(le); return 1; }
00047
00048 else if ( isSigIntCast(sig, x) ) { vsigs.push_back(x); return 1; }
00049 else if ( isSigFloatCast(sig, x) ) { vsigs.push_back(x); return 1; }
00050
00051 else if ( isSigButton(sig, label) ) { return 0; }
00052 else if ( isSigCheckbox(sig, label) ) { return 0; }
00053 else if ( isSigVSlider(sig, label,c,x,y,z) ) { return 0; }
00054 else if ( isSigHSlider(sig, label,c,x,y,z) ) { return 0; }
00055 else if ( isSigNumEntry(sig, label,c,x,y,z) ) { return 0; }
00056
00057 else if ( isSigVBargraph(sig, label,x,y,z) ) { vsigs.push_back(z); return 1; }
00058 else if ( isSigHBargraph(sig, label,x,y,z) ) { vsigs.push_back(z); return 1; }
00059 else if ( isSigAttach(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00060 else if ( isList(sig) ) { int n = 0; while (!isNil(sig)) { vsigs.push_back(hd(sig)); sig = tl(sig); n++; } return n; }
00061
00062 else {
00063 cerr << "ERROR, unrecognized signal : " << *sig << endl;
00064 exit(1);
00065 }
00066 return 0;
00067 }
00068