FAUST compiler  0.9.9.6b8
Macros | Functions | Variables
sigorderrules.cpp File Reference
#include <stdio.h>
#include "sigtype.hh"
#include "sigprint.hh"
#include "prim2.hh"
#include "tlib.hh"
#include "sigorderrules.hh"
#include "xtended.hh"
Include dependency graph for sigorderrules.cpp:

Go to the source code of this file.

Macros

#define O   getSigOrder
 

Functions

static int infereSigOrder (Tree sig)
 Infere the order of a term according to its components. More...
 
int getSigOrder (Tree sig)
 retrieve the order annotation (between 0 and 3) of a signal. More...
 

Variables

Tree ORDERPROP = tree(symbol("OrderProp"))
 

Macro Definition Documentation

#define O   getSigOrder

Definition at line 75 of file sigorderrules.cpp.

Referenced by infereSigOrder().

Function Documentation

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

Parameters
sigthe signal we want to know the order
Returns
the order number

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().

63 {
64  Tree tt;
65  if (getProperty(sig, ORDERPROP, tt)) {
66  return tree2int(tt);
67  } else {
68  int order = infereSigOrder(sig);
69  setProperty(sig, ORDERPROP, tree(order));
70  return order;
71  }
72 }
int tree2int(Tree t)
if t has a node of type int, return it otherwise error
Definition: tree.cpp:230
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
Definition: tree.hh:109
static int infereSigOrder(Tree sig)
Infere the order of a term according to its components.
Tree ORDERPROP
Tree tree(const Node &n)
Definition: tree.hh:186
void setProperty(Tree t, Tree key, Tree val)
Definition: list.cpp:418
bool getProperty(Tree t, Tree key, Tree &val)
Definition: list.cpp:423

Here is the call graph for this function:

Here is the caller graph for this function:

static int infereSigOrder ( Tree  sig)
static

Infere the order of a term according to its components.

Parameters
sigthe signal to analyze
Returns
the order of sig

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(), isSigWaveform(), isSigWRTbl(), max(), name(), O, print(), and tl().

Referenced by getSigOrder().

85 {
86  int i;
87  double r;
88  Tree sel, s1, s2, s3, s4, ff, id, ls, l, x, y, var, body, type, name, file;
89 
90  xtended* xt = (xtended*) getUserData(sig);
91  // primitive elements
92  if (xt)
93  {
94  //return 3;
95  vector<int> args;
96  for (int i=0; i<sig->arity(); i++) { args.push_back( O(sig->branch(i)) ); }
97  return xt->infereSigOrder(args);
98  }
99 
100 
101  else if (isSigInt(sig, &i)) return 0;
102 
103  else if (isSigReal(sig, &r)) return 0;
104 
105  else if (isSigWaveform(sig)) return 3;
106 
107  else if (isSigInput(sig, &i)) return 3;
108 
109  else if (isSigOutput(sig, &i, s1)) return 3;
110 
111  else if (isSigDelay1(sig, s1)) return 3;
112 
113  else if (isSigPrefix(sig, s1, s2)) return 3;
114 
115  else if (isSigFixDelay(sig, s1, s2)) return 3;
116 
117  else if (isSigBinOp(sig, &i, s1, s2)) return max(O(s1),O(s2));
118 
119  else if (isSigIntCast(sig, s1)) return O(s1);
120 
121  else if (isSigFloatCast(sig, s1)) return O(s1);
122 
123  else if (isSigFFun(sig,ff,ls) && isNil(ls)) return 1;
124 
125  else if (isSigFFun(sig, ff, ls)) return max(1,O(ls));
126 
127  else if (isSigFConst(sig,type,name,file)) return 1;
128 
129  else if (isSigFVar(sig,type,name,file)) return 2;
130 
131  else if (isSigButton(sig)) return 2;
132 
133  else if (isSigCheckbox(sig)) return 2;
134 
135  else if (isSigVSlider(sig)) return 2;
136 
137  else if (isSigHSlider(sig)) return 2;
138 
139  else if (isSigNumEntry(sig)) return 2;
140 
141  else if (isSigHBargraph(sig, l, x, y, s1)) return O(s1);
142 
143  else if (isSigVBargraph(sig, l, x, y, s1)) return O(s1);
144 
145  else if (isSigAttach(sig, s1, s2)) return O(s1);
146 
147  else if (isRec(sig, var, body)) exit(1); //return 3; // not supposed to happen.
148 
149  else if (isRef(sig, var)) exit(1); //return 3; // not supposed to happen.
150 
151  else if (isProj(sig, &i, s1)) return 3;
152 
153  else if (isSigTable(sig, id, s1, s2)) return 3;
154 
155  else if (isSigWRTbl(sig, id, s1, s2, s3)) return 3;
156 
157  else if (isSigRDTbl(sig, s1, s2)) return 3;
158 
159  else if (isSigDocConstantTbl(sig, s1, s2)) return 3;
160 
161  else if (isSigDocWriteTbl(sig,s1,s2,s3,s4)) return 3;
162 
163  else if (isSigDocAccessTbl(sig,s1,s2)) return 3;
164 
165  else if (isSigGen(sig, s1)) return 3;
166 
167  else if (isSigSelect2(sig,sel,s1,s2)) return 3;
168 
169  else if (isSigSelect3(sig,sel,s1,s2,s3)) return 3;
170 
171  else if (isList(sig))
172  {
173  int r = 0;
174  while (isList(sig)) { int x = O(hd(sig)); if (x > r) r = x; sig = tl(sig); }
175  return r;
176  }
177 
178  // unrecognized signal here
179  fprintf(stderr, "ERROR infering signal order : unrecognized signal : "); print(sig, stderr); fprintf(stderr, "\n");
180  exit(1);
181  return 0;
182 }
bool isSigRDTbl(Tree s, Tree &t, Tree &i)
Definition: signals.cpp:77
bool isSigHSlider(Tree s)
Definition: signals.cpp:217
bool isSigFConst(Tree s)
Definition: signals.cpp:138
bool isSigPrefix(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:66
bool isSigCheckbox(Tree s)
Definition: signals.cpp:205
bool isSigFFun(Tree s, Tree &ff, Tree &largs)
Definition: signals.cpp:133
bool isSigNumEntry(Tree s)
Definition: signals.cpp:257
bool isSigSelect2(Tree t, Tree &selector, Tree &s1, Tree &s2)
Definition: signals.cpp:116
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
Definition: tree.hh:109
bool isSigInput(Tree t, int *i)
Definition: signals.cpp:48
bool isSigFixDelay(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:62
Tree hd(Tree l)
Definition: list.hh:133
#define O
bool isSigVBargraph(Tree s)
Definition: signals.cpp:285
bool isSigSelect3(Tree t, Tree &selector, Tree &s1, Tree &s2, Tree &s3)
Definition: signals.cpp:119
bool isSigVSlider(Tree s)
Definition: signals.cpp:237
double max(double x, double y)
Definition: interval.hh:60
bool isSigGen(Tree t, Tree &x)
Definition: signals.cpp:91
bool isNil(Tree l)
Definition: list.hh:137
bool isSigReal(Tree t, double *r)
Definition: signals.cpp:44
bool isRef(Tree t, int &level)
is t a de Bruijn recursive reference
bool isSigHBargraph(Tree s)
Definition: signals.cpp:279
bool isSigDocConstantTbl(Tree t, Tree &n, Tree &sig)
Definition: signals.cpp:99
bool isList(Tree l)
Definition: list.hh:138
bool isSigTable(Tree t, Tree &id, Tree &n, Tree &sig)
Definition: signals.cpp:85
virtual int infereSigOrder(const vector< int > &args)=0
bool isSigBinOp(Tree s, int *op, Tree &x, Tree &y)
Definition: signals.cpp:126
bool isSigAttach(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:291
bool isSigDocAccessTbl(Tree t, Tree &tbl, Tree &ridx)
Definition: signals.cpp:107
bool isSigWRTbl(Tree u, Tree &id, Tree &t, Tree &i, Tree &s)
Definition: signals.cpp:81
int arity() const
return the number of branches (subtrees) of a tree
Definition: tree.hh:144
const char * name(Symbol *sym)
Returns the name of a symbol.
Definition: symbol.hh:98
bool isSigWaveform(Tree s)
Definition: signals.cpp:211
bool isRec(Tree t, Tree &body)
is t a de Bruijn recursive tree
bool isSigInt(Tree t, int *i)
Definition: signals.cpp:41
bool isSigDocWriteTbl(Tree t, Tree &n, Tree &sig, Tree &widx, Tree &wsig)
Definition: signals.cpp:103
bool isSigDelay1(Tree t, Tree &t0)
Definition: signals.cpp:58
bool isSigFloatCast(Tree t)
Definition: signals.cpp:187
bool isSigFVar(Tree s)
Definition: signals.cpp:144
void * getUserData(Symbol *sym)
Returns user data.
Definition: symbol.hh:100
bool isSigIntCast(Tree t)
Definition: signals.cpp:184
bool isProj(Tree t, int *i, Tree &rgroup)
Definition: signals.cpp:151
Tree tl(Tree l)
Definition: list.hh:134
Tree branch(int i) const
return the ith branch (subtree) of a tree
Definition: tree.hh:145
bool isSigOutput(Tree t, int *i, Tree &t0)
Definition: signals.cpp:52
bool isSigButton(Tree s)
Definition: signals.cpp:199
void print(Tree t, FILE *out)
Definition: list.cpp:154

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation

Tree ORDERPROP = tree(symbol("OrderProp"))

Definition at line 48 of file sigorderrules.cpp.