#include <stdio.h>
#include "sigtype.hh"
#include "sigprint.hh"
#include "signals.hh"
#include "prim2.hh"
#include "tlib.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(), mterm::normalizedTree(), aterm::normalizedTree(), and normalizeFixedDelayTerm().
00063 { 00064 Tree tt; 00065 if (getProperty(sig, ORDERPROP, tt)) { 00066 return tree2int(tt); 00067 } else { 00068 int order = infereSigOrder(sig); 00069 setProperty(sig, ORDERPROP, tree(order)); 00070 return order; 00071 } 00072 }
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().
00085 { 00086 int i; 00087 double r; 00088 Tree sel, s1, s2, s3, s4, ff, id, ls, l, x, y, var, body, type, name, file; 00089 00090 xtended* xt = (xtended*) getUserData(sig); 00091 // primitive elements 00092 if (xt) 00093 { 00094 //return 3; 00095 vector<int> args; 00096 for (int i=0; i<sig->arity(); i++) { args.push_back( O(sig->branch(i)) ); } 00097 return xt->infereSigOrder(args); 00098 } 00099 00100 00101 else if (isSigInt(sig, &i)) return 0; 00102 00103 else if (isSigReal(sig, &r)) return 0; 00104 00105 else if (isSigInput(sig, &i)) return 3; 00106 00107 else if (isSigOutput(sig, &i, s1)) return 3; 00108 00109 else if (isSigDelay1(sig, s1)) return 3; 00110 00111 else if (isSigPrefix(sig, s1, s2)) return 3; 00112 00113 else if (isSigFixDelay(sig, s1, s2)) return 3; 00114 00115 else if (isSigBinOp(sig, &i, s1, s2)) return max(O(s1),O(s2)); 00116 00117 else if (isSigIntCast(sig, s1)) return O(s1); 00118 00119 else if (isSigFloatCast(sig, s1)) return O(s1); 00120 00121 else if (isSigFFun(sig,ff,ls) && isNil(ls)) return 1; 00122 00123 else if (isSigFFun(sig, ff, ls)) return max(1,O(ls)); 00124 00125 else if (isSigFConst(sig,type,name,file)) return 1; 00126 00127 else if (isSigFVar(sig,type,name,file)) return 2; 00128 00129 else if (isSigButton(sig)) return 2; 00130 00131 else if (isSigCheckbox(sig)) return 2; 00132 00133 else if (isSigVSlider(sig)) return 2; 00134 00135 else if (isSigHSlider(sig)) return 2; 00136 00137 else if (isSigNumEntry(sig)) return 2; 00138 00139 else if (isSigHBargraph(sig, l, x, y, s1)) return O(s1); 00140 00141 else if (isSigVBargraph(sig, l, x, y, s1)) return O(s1); 00142 00143 else if (isSigAttach(sig, s1, s2)) return O(s1); 00144 00145 else if (isRec(sig, var, body)) exit(1); //return 3; // not supposed to appen. 00146 00147 else if (isRef(sig, var)) exit(1); //return 3; // not supposed to appen. 00148 00149 else if (isProj(sig, &i, s1)) return 3; 00150 00151 else if (isSigTable(sig, id, s1, s2)) return 3; 00152 00153 else if (isSigWRTbl(sig, id, s1, s2, s3)) return 3; 00154 00155 else if (isSigRDTbl(sig, s1, s2)) return 3; 00156 00157 else if (isSigDocConstantTbl(sig, s1, s2)) return 3; 00158 00159 else if (isSigDocWriteTbl(sig,s1,s2,s3,s4)) return 3; 00160 00161 else if (isSigDocAccessTbl(sig,s1,s2)) return 3; 00162 00163 else if (isSigGen(sig, s1)) return 3; 00164 00165 else if (isSigSelect2(sig,sel,s1,s2)) return 3; 00166 00167 else if (isSigSelect3(sig,sel,s1,s2,s3)) return 3; 00168 00169 else if (isList(sig)) 00170 { 00171 int r = 0; 00172 while (isList(sig)) { int x = O(hd(sig)); if (x > r) r = x; sig = tl(sig); } 00173 return r; 00174 } 00175 00176 // unrecognized signal here 00177 fprintf(stderr, "ERROR infering signal order : unrecognized signal : "); print(sig, stderr); fprintf(stderr, "\n"); 00178 exit(1); 00179 return 0; 00180 }
Definition at line 48 of file sigorderrules.cpp.