~ubuntu-branches/ubuntu/feisty/faust/feisty

« back to all changes in this revision

Viewing changes to compiler/signals/subsignals.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Mario Lang
  • Date: 2006-10-09 11:05:30 UTC
  • mfrom: (1.1.1 upstream) (2.1.1 edgy)
  • Revision ID: james.westby@ubuntu.com-20061009110530-zvktdvpq5zewdxso
Tags: 0.9.8-1
* New upstream release.
* Upgrade Standards-Version to 3.7.2.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <signals.hh>
 
2
/**
 
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
 
8
 */
 
9
 
 
10
int     getSubSignals (Tree sig, vector<Tree>& vsigs)
 
11
{
 
12
        vsigs.clear();
 
13
 
 
14
        int     i;
 
15
        float   r;
 
16
        Tree    c, sel, x, y, z, var, le, label, id, ff, largs, type, name, file;
 
17
 
 
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; }
 
24
 
 
25
        else if ( isSigDelay1(sig, x) )                                 { vsigs.push_back(x); return 1; }
 
26
 
 
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; }
 
30
 
 
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; }
 
34
 
 
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;     }
 
38
 
 
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; }
 
41
 
 
42
        else if ( isSigGen(sig, x) )                                    { vsigs.push_back(x); return 1; }
 
43
 
 
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; }
 
46
 
 
47
        else if ( isSigIntCast(sig, x) )                                { vsigs.push_back(x); return 1; }
 
48
        else if ( isSigFloatCast(sig, x) )                              { vsigs.push_back(x); return 1; }
 
49
 
 
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; }
 
55
 
 
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; }
 
60
 
 
61
        else {
 
62
                cerr << "ERROR, unrecognized signal : " << *sig << endl;
 
63
                exit(1);
 
64
        }
 
65
        return 0;
 
66
}
 
67