|
FAUST compiler
0.9.9.6b8
|
#include <stdio.h>#include "sigtype.hh"#include "sigprint.hh"#include "prim2.hh"#include "tlib.hh"#include "sigorderrules.hh"#include "xtended.hh"
Go to the source code of this file.
Defines | |
| #define | O getSigOrder |
Functions | |
| static int | infereSigOrder (Tree sig) |
| Infere the order of a term according to its components. | |
| int | getSigOrder (Tree sig) |
| retrieve the order annotation (between 0 and 3) of a signal. | |
Variables | |
| Tree | ORDERPROP = tree(symbol("OrderProp")) |
| #define O getSigOrder |
Definition at line 75 of file sigorderrules.cpp.
Referenced by infereSigOrder().
| int getSigOrder | ( | Tree | sig | ) |
retrieve the order annotation (between 0 and 3) of a signal.
(compute the order the first time). Orders have the following meanings 0 : numbers 1 : constants 2 : user interface values 3 : audio values
| sig | the signal we want to know the order |
Definition at line 62 of file sigorderrules.cpp.
References getProperty(), infereSigOrder(), setProperty(), tree(), and tree2int().
Referenced by mterm::complexity(), aterm::normalizedTree(), mterm::normalizedTree(), and normalizeFixedDelayTerm().
{
Tree tt;
if (getProperty(sig, ORDERPROP, tt)) {
return tree2int(tt);
} else {
int order = infereSigOrder(sig);
setProperty(sig, ORDERPROP, tree(order));
return order;
}
}


| static int infereSigOrder | ( | Tree | sig | ) | [static] |
Infere the order of a term according to its components.
| sig | the signal to analyze |
Definition at line 84 of file sigorderrules.cpp.
References CTree::arity(), CTree::branch(), getUserData(), hd(), xtended::infereSigOrder(), isList(), isNil(), isProj(), isRec(), isRef(), isSigAttach(), isSigBinOp(), isSigButton(), isSigCheckbox(), isSigDelay1(), isSigDocAccessTbl(), isSigDocConstantTbl(), isSigDocWriteTbl(), isSigFConst(), isSigFFun(), isSigFixDelay(), isSigFloatCast(), isSigFVar(), isSigGen(), isSigHBargraph(), isSigHSlider(), isSigInput(), isSigInt(), isSigIntCast(), isSigNumEntry(), isSigOutput(), isSigPrefix(), isSigRDTbl(), isSigReal(), isSigSelect2(), isSigSelect3(), isSigTable(), isSigVBargraph(), isSigVSlider(), isSigWRTbl(), max(), name(), O, print(), and tl().
Referenced by getSigOrder().
{
int i;
double r;
Tree sel, s1, s2, s3, s4, ff, id, ls, l, x, y, var, body, type, name, file;
xtended* xt = (xtended*) getUserData(sig);
// primitive elements
if (xt)
{
//return 3;
vector<int> args;
for (int i=0; i<sig->arity(); i++) { args.push_back( O(sig->branch(i)) ); }
return xt->infereSigOrder(args);
}
else if (isSigInt(sig, &i)) return 0;
else if (isSigReal(sig, &r)) return 0;
else if (isSigInput(sig, &i)) return 3;
else if (isSigOutput(sig, &i, s1)) return 3;
else if (isSigDelay1(sig, s1)) return 3;
else if (isSigPrefix(sig, s1, s2)) return 3;
else if (isSigFixDelay(sig, s1, s2)) return 3;
else if (isSigBinOp(sig, &i, s1, s2)) return max(O(s1),O(s2));
else if (isSigIntCast(sig, s1)) return O(s1);
else if (isSigFloatCast(sig, s1)) return O(s1);
else if (isSigFFun(sig,ff,ls) && isNil(ls)) return 1;
else if (isSigFFun(sig, ff, ls)) return max(1,O(ls));
else if (isSigFConst(sig,type,name,file)) return 1;
else if (isSigFVar(sig,type,name,file)) return 2;
else if (isSigButton(sig)) return 2;
else if (isSigCheckbox(sig)) return 2;
else if (isSigVSlider(sig)) return 2;
else if (isSigHSlider(sig)) return 2;
else if (isSigNumEntry(sig)) return 2;
else if (isSigHBargraph(sig, l, x, y, s1)) return O(s1);
else if (isSigVBargraph(sig, l, x, y, s1)) return O(s1);
else if (isSigAttach(sig, s1, s2)) return O(s1);
else if (isRec(sig, var, body)) exit(1); //return 3; // not supposed to happen.
else if (isRef(sig, var)) exit(1); //return 3; // not supposed to happen.
else if (isProj(sig, &i, s1)) return 3;
else if (isSigTable(sig, id, s1, s2)) return 3;
else if (isSigWRTbl(sig, id, s1, s2, s3)) return 3;
else if (isSigRDTbl(sig, s1, s2)) return 3;
else if (isSigDocConstantTbl(sig, s1, s2)) return 3;
else if (isSigDocWriteTbl(sig,s1,s2,s3,s4)) return 3;
else if (isSigDocAccessTbl(sig,s1,s2)) return 3;
else if (isSigGen(sig, s1)) return 3;
else if (isSigSelect2(sig,sel,s1,s2)) return 3;
else if (isSigSelect3(sig,sel,s1,s2,s3)) return 3;
else if (isList(sig))
{
int r = 0;
while (isList(sig)) { int x = O(hd(sig)); if (x > r) r = x; sig = tl(sig); }
return r;
}
// unrecognized signal here
fprintf(stderr, "ERROR infering signal order : unrecognized signal : "); print(sig, stderr); fprintf(stderr, "\n");
exit(1);
return 0;
}


1.8.0