subsignals.cpp File Reference

#include <signals.hh>
Include dependency graph for subsignals.cpp:

Go to the source code of this file.

Functions

int getSubSignals (Tree sig, vector< Tree > &vsigs, bool visitgen)
 Extract the sub signals of a signal expression, that is not necesseraly all the subtrees.

Function Documentation

int getSubSignals ( Tree  sig,
vector< Tree > &  vsigs,
bool  visitgen 
)

Extract the sub signals of a signal expression, that is not necesseraly all the subtrees.

Parameters:
sig the signals
vsigs a reference to the vector where the subsignals will be placed
Returns:
the number of subsignals

Definition at line 10 of file subsignals.cpp.

References CTree::arity(), CTree::branch(), getUserData(), hd(), isList(), isNil(), isProj(), isRec(), isSigAttach(), isSigBinOp(), isSigButton(), isSigCheckbox(), isSigDelay1(), isSigDocAccessTbl(), isSigDocConstantTbl(), isSigDocWriteTbl(), isSigFConst(), isSigFFun(), isSigFixDelay(), isSigFloatCast(), isSigFVar(), isSigGen(), isSigHBargraph(), isSigHSlider(), isSigInput(), isSigInt(), isSigIntCast(), isSigIota(), isSigNumEntry(), isSigOutput(), isSigPrefix(), isSigRDTbl(), isSigReal(), isSigSelect2(), isSigSelect3(), isSigTable(), isSigVBargraph(), isSigVSlider(), isSigWRTbl(), name(), and tl().

Referenced by annotate(), colorize(), OccMarkup::incOcc(), listMultiColoredExp(), ScalarCompiler::sharingAnnotation(), DocCompiler::sharingAnnotation(), and uncolorize().

00011 {
00012     vsigs.clear();
00013 
00014     int     i;
00015     double  r;
00016     Tree    c, sel, x, y, z, u, v, 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 ( isSigDocConstantTbl(sig, x, y) )      { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00041     else if ( isSigDocWriteTbl(sig, x, y, u, v) )   { vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(u); vsigs.push_back(v); return 4; }
00042     else if ( isSigDocAccessTbl(sig, x, y) )        { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00043 
00044 
00045     else if ( isSigSelect2(sig, sel, x, y) )        { vsigs.push_back(sel); vsigs.push_back(x); vsigs.push_back(y); return 3; }
00046     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; }
00047 
00048     else if ( isSigGen(sig, x) )                    { if (visitgen) { vsigs.push_back(x); return 1;} else { return 0; } }
00049 
00050     else if ( isProj(sig, &i, x) )                  { vsigs.push_back(x); return 1; }
00051     else if ( isRec(sig, var, le) )                 { vsigs.push_back(le); return 1; }
00052 
00053     else if ( isSigIntCast(sig, x) )                { vsigs.push_back(x); return 1; }
00054     else if ( isSigFloatCast(sig, x) )              { vsigs.push_back(x); return 1; }
00055 
00056     else if ( isSigButton(sig, label) )             { return 0; }
00057     else if ( isSigCheckbox(sig, label) )           { return 0; }
00058     else if ( isSigVSlider(sig, label,c,x,y,z) )    { return 0; }
00059     else if ( isSigHSlider(sig, label,c,x,y,z) )    { return 0; }
00060     else if ( isSigNumEntry(sig, label,c,x,y,z) )   { return 0; }
00061 
00062     else if ( isSigVBargraph(sig, label,x,y,z) )    { vsigs.push_back(z); return 1; }
00063     else if ( isSigHBargraph(sig, label,x,y,z) )    { vsigs.push_back(z); return 1; }
00064     else if ( isSigAttach(sig, x, y) )              { vsigs.push_back(x); vsigs.push_back(y); return 2; }
00065     else if ( isList(sig) )                         { int n = 0; while (!isNil(sig)) { vsigs.push_back(hd(sig)); sig = tl(sig); n++; } return n; }
00066 
00067     else {
00068         cerr << "ERROR, unrecognized signal : " << *sig << endl;
00069         exit(1);
00070     }
00071     return 0;
00072 }

Here is the call graph for this function:

Here is the caller graph for this function:

Generated on Thu Apr 29 00:00:15 2010 for FAUST compiler by  doxygen 1.6.3