FAUST compiler  0.9.9.6b8
signals.hh
Go to the documentation of this file.
1 /************************************************************************
2  ************************************************************************
3  FAUST compiler
4  Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
5  ---------------------------------------------------------------------
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  ************************************************************************
20  ************************************************************************/
21 
22 
23 
24 #ifndef _SIGNALS_
25 #define _SIGNALS_
26 
27 #include "tlib.hh"
28 #include "binop.hh"
29 #include <assert.h>
30 #include <vector>
31 
32 using namespace std;
33 
34 
36 
41 
43 // Constant signals : for all t, x(t)=n
44 Tree sigInt(int n);
45 Tree sigReal(double n);
46 
47 bool isSigInt(Tree t, int* i);
48 bool isSigReal(Tree t, double* r);
49 
50 // waveforms
51 
52 Tree sigWaveform (const tvec& wf);
53 bool isSigWaveform(Tree s);
54 
55 // Inputs and outputs
56 Tree sigInput(int i);
57 Tree sigOutput(int i, Tree t);
58 
59 bool isSigInput(Tree t, int* i);
60 bool isSigOutput(Tree t, int* i, Tree& t0);
61 
62 // delay
65 bool isSigDelay1(Tree t, Tree& t0);
66 
67 Tree sigFixDelay(Tree t0, Tree t1);
68 bool isSigFixDelay(Tree t, Tree& t0, Tree& t1);
69 
70 Tree sigPrefix(Tree t0, Tree t1);
71 bool isSigPrefix(Tree t, Tree& t0, Tree& t1);
72 
73 Tree sigIota(Tree t0);
74 bool isSigIota(Tree t, Tree& t0);
75 
76 // Int and Double casting
79 
80 bool isSigIntCast(Tree t);
81 bool isSigFloatCast(Tree t);
82 
83 bool isSigIntCast(Tree t, Tree& x);
84 bool isSigFloatCast(Tree t, Tree& x);
85 
86 
87 // tables
88 Tree sigRDTbl (Tree t, Tree i);
89 Tree sigWRTbl (Tree id, Tree t, Tree i, Tree s);
90 Tree sigTable (Tree id, Tree n, Tree sig);
91 Tree sigGen (Tree content);
92 
93 bool isSigRDTbl (Tree s, Tree& t, Tree& i);
94 bool isSigWRTbl (Tree u, Tree& id, Tree& t, Tree& i, Tree& s);
95 bool isSigTable (Tree t, Tree& id, Tree& n, Tree& sig);
96 bool isSigGen (Tree t, Tree& content);
97 bool isSigGen (Tree t);
98 
99 inline Tree sigWriteReadTable(Tree n, Tree init, Tree widx, Tree wsig, Tree ridx)
100 {
101  return sigRDTbl(sigWRTbl(nil, sigTable(nil, n, sigGen(init)), widx, wsig), ridx);
102 }
103 
104 inline Tree sigReadOnlyTable(Tree n, Tree init, Tree ridx)
105 {
106  return sigRDTbl(sigTable(nil, n, sigGen(init)), ridx);
107 }
108 
109 
110 // Tables for documentator
111 // used to replace real tables for documentation purposes only
112 
114 Tree sigDocWriteTbl(Tree n, Tree init, Tree widx, Tree wsig);
115 Tree sigDocAccessTbl(Tree doctbl, Tree ridx);
116 
117 bool isSigDocConstantTbl(Tree s, Tree& n, Tree& init);
118 bool isSigDocWriteTbl(Tree s, Tree& n, Tree& init, Tree& widx, Tree& wsig);
119 bool isSigDocAccessTbl(Tree s, Tree& doctbl, Tree& ridx);
120 
121 // selectors
122 
123 Tree sigSelect2 (Tree selector, Tree s1, Tree s2);
124 Tree sigSelect3 (Tree selector, Tree s1, Tree s2, Tree s3);
125 
126 bool isSigSelect2 (Tree t, Tree& selector, Tree& s1, Tree& s2);
127 bool isSigSelect3 (Tree t, Tree& selector, Tree& s1, Tree& s2, Tree& s3);
128 
129 // arithmetical operations
130 
131 Tree sigBinOp (int op, Tree x, Tree y);
132 bool isSigBinOp (Tree s, int* op, Tree& x, Tree& y);
133 
134 // Foreign Functions
135 
136 Tree sigFFun (Tree ff, Tree largs);
137 bool isSigFFun (Tree s, Tree& ff, Tree& largs);
138 
139 // Foreign Constants
140 
141 Tree sigFConst (Tree type, Tree name, Tree file);
142 bool isSigFConst (Tree s);
143 bool isSigFConst (Tree s, Tree& type, Tree& name, Tree& file);
144 
145 // Foreign Variables
146 
147 Tree sigFVar (Tree type, Tree name, Tree file);
148 bool isSigFVar (Tree s);
149 bool isSigFVar (Tree s, Tree& type, Tree& name, Tree& file);
150 
151 // emulation des anciennes fonctions
152 inline Tree sigAdd(Tree x, Tree y) { return sigBinOp(kAdd, x, y); }
153 inline Tree sigSub(Tree x, Tree y) { return sigBinOp(kSub, x, y); }
154 inline Tree sigMul(Tree x, Tree y) { return sigBinOp(kMul, x, y); }
155 inline Tree sigDiv(Tree x, Tree y) { return sigBinOp(kDiv, x, y); }
156 inline Tree sigRem(Tree x, Tree y) { return sigBinOp(kRem, x, y); }
157 
158 inline Tree sigAND(Tree x, Tree y) { return sigBinOp(kAND, x, y); }
159 inline Tree sigOR(Tree x, Tree y) { return sigBinOp(kOR, x, y); }
160 inline Tree sigXOR(Tree x, Tree y) { return sigBinOp(kXOR, x, y); }
161 
162 inline Tree sigLeftShift(Tree x, Tree y) { return sigBinOp(kLsh, x, y); }
163 inline Tree sigRightShift(Tree x, Tree y) { return sigBinOp(kRsh, x, y); }
164 
165 inline Tree sigGT(Tree x, Tree y) { return sigBinOp(kGT, x, y); }
166 inline Tree sigLT(Tree x, Tree y) { return sigBinOp(kLT, x, y); }
167 inline Tree sigGE(Tree x, Tree y) { return sigBinOp(kGE, x, y); }
168 inline Tree sigLE(Tree x, Tree y) { return sigBinOp(kLE, x, y); }
169 inline Tree sigEQ(Tree x, Tree y) { return sigBinOp(kEQ, x, y); }
170 inline Tree sigNE(Tree x, Tree y) { return sigBinOp(kNE, x, y); }
171 
172 // pattern matching pour les anciennes fonctions
173 bool isSigAdd (Tree a, Tree&x, Tree&y);
174 bool isSigMul (Tree a, Tree&x, Tree&y);
175 bool isSigSub (Tree a, Tree&x, Tree&y);
176 bool isSigDiv (Tree a, Tree&x, Tree&y);
177 
178 // operations pratiques sur des arbres dont on sait qu'ils sont des nombres
179 Tree addNums (Tree a, Tree b);
180 Tree subNums (Tree a, Tree b);
181 Tree mulNums (Tree a, Tree b);
183 Tree minusNum (Tree a);
184 Tree inverseNum (Tree a);
185 
186 // tests sur les signaux constants
187 inline bool isNum (Tree a) { assert(a); return isNum(a->node()); }
188 inline bool isZero (Tree a) { assert(a); return isZero(a->node()); }
189 inline bool isGTZero (Tree a) { assert(a); return isGTZero(a->node()); }
190 inline bool isGEZero (Tree a) { assert(a); return isGEZero(a->node()); }
191 inline bool isOne (Tree a) { assert(a); return isOne(a->node()); }
192 inline bool isMinusOne (Tree a) { assert(a); return isMinusOne(a->node()); }
193 
194 //projection for recursive groups
195 Tree sigProj (int i, Tree rgroup);
196 bool isProj (Tree t, int* i, Tree& rgroup);
197 
198 inline bool isNum(const Tree& t, num& n)
199 {
200  double f;
201  int i;
202 
203  if (isDouble(t->node(), &f)) { n = f; return true; }
204  if (isInt(t->node(), &i)) { n = i; return true; }
205  return false;
206 }
207 
208 
209 /*****************************************************************************
210  User Interface Elements
211 *****************************************************************************/
212 
213 Tree sigButton (Tree label);
214 bool isSigButton (Tree s);
215 bool isSigButton (Tree s, Tree& label);
216 
217 Tree sigCheckbox (Tree label);
218 bool isSigCheckbox (Tree s);
219 bool isSigCheckbox (Tree s, Tree& label);
220 
221 Tree sigVSlider (Tree label, Tree cur, Tree min, Tree max, Tree step);
222 bool isSigVSlider (Tree s);
223 bool isSigVSlider (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
224 
225 Tree sigHSlider (Tree label, Tree cur, Tree min, Tree max, Tree step);
226 bool isSigHSlider (Tree s);
227 bool isSigHSlider (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
228 
229 Tree sigNumEntry (Tree label, Tree cur, Tree min, Tree max, Tree step);
230 bool isSigNumEntry (Tree s);
231 bool isSigNumEntry (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
232 
233 // output elements
234 Tree sigVBargraph (Tree label, Tree min, Tree max, Tree t0);
235 bool isSigVBargraph (Tree s);
236 bool isSigVBargraph (Tree s, Tree& label, Tree& min, Tree& max, Tree& t0);
237 
238 Tree sigHBargraph (Tree label, Tree min, Tree max, Tree t0);
239 bool isSigHBargraph (Tree s);
240 bool isSigHBargraph (Tree s, Tree& label, Tree& min, Tree& max, Tree& t0);
241 
242 Tree sigAttach (Tree x, Tree y);
243 bool isSigAttach (Tree s);
244 bool isSigAttach (Tree s, Tree& x, Tree& y);
245 
246 
247 /*****************************************************************************
248  matrix extension
249 *****************************************************************************/
250 
251 // a tuple of signals is basically a list of signals.
252 // mode = 0 means normal, mode = 1 means blocked
253 Tree sigTuple (int mode, Tree ls);
254 bool isSigTuple (Tree s, int* mode, Tree& ls);
255 
256 // Access the components of a tuple.
257 // ts is tuple of signals, idx is a scalar signal between 0..n
258 Tree sigTupleAccess(Tree ts, Tree idx);
259 bool isSigTupleAccess(Tree s, Tree& ts, Tree& idx);
260 
261 // create a tuple of signals
262 Tree sigCartesianProd (Tree s1, Tree s2);
263 
264 
265 
266 /*****************************************************************************
267  access to sub signals of a signal
268 *****************************************************************************/
269 
270 int getSubSignals (Tree sig, vector<Tree>& vsigs, bool visitgen=true);
271 
272 
279 bool verySimple(Tree exp);
280 
281 
282 
283 #endif
Tree sigTuple(int mode, Tree ls)
Definition: signals.cpp:379
Tree sigAND(Tree x, Tree y)
Definition: signals.hh:158
Tree sigSelect2(Tree selector, Tree s1, Tree s2)
Definition: signals.cpp:115
Tree sigWaveform(const tvec &wf)
Definition: signals.cpp:210
Tree sigNumEntry(Tree label, Tree cur, Tree min, Tree max, Tree step)
Definition: signals.cpp:255
Tree sigBinOp(int op, Tree x, Tree y)
Definition: signals.cpp:125
Tree sigButton(Tree label)
Definition: signals.cpp:198
bool isZero(Tree a)
Definition: signals.hh:188
bool isSigPrefix(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:66
Definition: num.hh:58
bool isSigWaveform(Tree s)
Definition: signals.cpp:211
Tree inverseNum(Tree a)
Definition: signals.cpp:337
Tree sigRDTbl(Tree t, Tree i)
Definition: signals.cpp:76
Definition: binop.hh:58
Tree sigDocWriteTbl(Tree n, Tree init, Tree widx, Tree wsig)
Definition: signals.cpp:102
Tree sigInput(int i)
Definition: signals.cpp:47
bool isNum(Tree a)
Definition: signals.hh:187
Tree sigEQ(Tree x, Tree y)
Definition: signals.hh:169
Tree sigFFun(Tree ff, Tree largs)
Definition: signals.cpp:132
Tree sigSelect3(Tree selector, Tree s1, Tree s2, Tree s3)
Definition: signals.cpp:118
bool isSigDelay1(Tree t, Tree &t0)
Definition: signals.cpp:58
Tree sigXOR(Tree x, Tree y)
Definition: signals.hh:160
bool isSigIota(Tree t, Tree &t0)
Definition: signals.cpp:70
bool isOne(Tree a)
Definition: signals.hh:191
Tree sigTable(Tree id, Tree n, Tree sig)
Definition: signals.cpp:84
Tree sigGT(Tree x, Tree y)
Definition: signals.hh:165
bool isSigVSlider(Tree s)
Definition: signals.cpp:237
Definition: binop.hh:59
bool isSigAdd(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:344
Tree sigGE(Tree x, Tree y)
Definition: signals.hh:167
vector< Tree > tvec
Definition: tree.hh:90
bool isSigMul(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:350
bool isSigFFun(Tree s, Tree &ff, Tree &largs)
Definition: signals.cpp:133
Tree sigFixDelay(Tree t0, Tree t1)
Definition: signals.cpp:61
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
Definition: tree.hh:109
Tree sigWriteReadTable(Tree n, Tree init, Tree widx, Tree wsig, Tree ridx)
Definition: signals.hh:99
bool isMinusOne(Tree a)
Definition: signals.hh:192
bool isSigDocWriteTbl(Tree s, Tree &n, Tree &init, Tree &widx, Tree &wsig)
Definition: signals.cpp:103
const Node & node() const
return the content of the tree
Definition: tree.hh:143
Tree sigProj(int i, Tree rgroup)
Definition: signals.cpp:150
Tree sigDocAccessTbl(Tree doctbl, Tree ridx)
Definition: signals.cpp:106
Tree sigIntCast(Tree t)
Definition: signals.cpp:159
bool isSigTable(Tree t, Tree &id, Tree &n, Tree &sig)
Definition: signals.cpp:85
bool isSigOutput(Tree t, int *i, Tree &t0)
Definition: signals.cpp:52
Tree sigOutput(int i, Tree t)
Definition: signals.cpp:51
Definition: binop.hh:56
Tree sigFConst(Tree type, Tree name, Tree file)
Definition: signals.cpp:137
bool isSigHSlider(Tree s)
Definition: signals.cpp:217
Tree divExtendedNums(Tree a, Tree b)
Definition: signals.cpp:323
double max(double x, double y)
Definition: interval.hh:60
bool isSigVBargraph(Tree s)
Definition: signals.cpp:285
bool isSigFConst(Tree s)
Definition: signals.cpp:138
bool isSigFixDelay(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:62
bool isSigRDTbl(Tree s, Tree &t, Tree &i)
Definition: signals.cpp:77
Tree sigFVar(Tree type, Tree name, Tree file)
Definition: signals.cpp:143
Tree sigTupleAccess(Tree ts, Tree idx)
Definition: signals.cpp:384
Definition: binop.hh:56
bool isSigHBargraph(Tree s)
Definition: signals.cpp:279
bool isSigInput(Tree t, int *i)
Definition: signals.cpp:48
Tree minusNum(Tree a)
Definition: signals.cpp:330
Tree sigHSlider(Tree label, Tree cur, Tree min, Tree max, Tree step)
Definition: signals.cpp:215
Definition: binop.hh:59
bool isSigAttach(Tree s)
bool isProj(Tree t, int *i, Tree &rgroup)
Definition: signals.cpp:151
Tree sigSub(Tree x, Tree y)
Definition: signals.hh:153
bool isSigCheckbox(Tree s)
Definition: signals.cpp:205
Tree sigReal(double n)
Definition: signals.cpp:43
Tree sigLeftShift(Tree x, Tree y)
Definition: signals.hh:162
Tree sigCartesianProd(Tree s1, Tree s2)
Definition: signals.cpp:388
bool isSigReal(Tree t, double *r)
Definition: signals.cpp:44
Definition: binop.hh:58
Tree sigDelay1(Tree t)
Definition: signals.cpp:57
Tree sigRightShift(Tree x, Tree y)
Definition: signals.hh:163
Definition: binop.hh:58
Definition: binop.hh:56
bool isSigTuple(Tree s, int *mode, Tree &ls)
Definition: signals.cpp:380
Tree sigCheckbox(Tree label)
Definition: signals.cpp:204
Tree sigNE(Tree x, Tree y)
Definition: signals.hh:170
bool isSigBinOp(Tree s, int *op, Tree &x, Tree &y)
Definition: signals.cpp:126
bool isDouble(const Node &n)
Definition: node.hh:143
bool isSigNumEntry(Tree s)
Definition: signals.cpp:257
bool verySimple(Tree exp)
Test if exp is very simple that is it can't be considered a real component.
Definition: signals.cpp:417
bool isSigSelect3(Tree t, Tree &selector, Tree &s1, Tree &s2, Tree &s3)
Definition: signals.cpp:119
bool isSigIntCast(Tree t)
Definition: signals.cpp:184
bool isSigTupleAccess(Tree s, Tree &ts, Tree &idx)
Definition: signals.cpp:385
Tree sigGen(Tree content)
Definition: signals.cpp:90
Tree subNums(Tree a, Tree b)
Definition: signals.cpp:302
Tree sigAdd(Tree x, Tree y)
Definition: signals.hh:152
Definition: binop.hh:56
bool isSigButton(Tree s)
Definition: signals.cpp:199
Tree sigLE(Tree x, Tree y)
Definition: signals.hh:168
Tree addNums(Tree a, Tree b)
Definition: signals.cpp:295
Tree sigLT(Tree x, Tree y)
Definition: signals.hh:166
const char * name(Symbol *sym)
Returns the name of a symbol.
Definition: symbol.hh:98
Definition: binop.hh:58
Tree sigVSlider(Tree label, Tree cur, Tree min, Tree max, Tree step)
Definition: signals.cpp:235
Tree sigFloatCast(Tree t)
Definition: signals.cpp:170
bool isGTZero(Tree a)
Definition: signals.hh:189
Tree sigRem(Tree x, Tree y)
Definition: signals.hh:156
Tree sigHBargraph(Tree label, Tree min, Tree max, Tree t0)
Definition: signals.cpp:278
Tree mulNums(Tree a, Tree b)
Definition: signals.cpp:309
bool isSigDiv(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:362
bool isSigDocAccessTbl(Tree s, Tree &doctbl, Tree &ridx)
Definition: signals.cpp:107
bool isSigSub(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:356
Tree sigIota(Tree t0)
Definition: signals.cpp:69
Tree sigDelay0(Tree t)
Definition: signals.cpp:55
Tree sigPrefix(Tree t0, Tree t1)
Definition: signals.cpp:65
Definition: binop.hh:57
bool isSigDocConstantTbl(Tree s, Tree &n, Tree &init)
Definition: signals.cpp:99
Tree sigAttach(Tree x, Tree y)
Definition: signals.cpp:290
bool isGEZero(Tree a)
Definition: signals.hh:190
Definition: binop.hh:57
Tree nil
Definition: list.cpp:116
Tree sigMul(Tree x, Tree y)
Definition: signals.hh:154
Tree sigWRTbl(Tree id, Tree t, Tree i, Tree s)
Definition: signals.cpp:80
Tree sigOR(Tree x, Tree y)
Definition: signals.hh:159
bool isSigGen(Tree t, Tree &content)
Definition: signals.cpp:91
Definition: binop.hh:58
bool isInt(const Node &n)
Definition: node.hh:126
Tree sigReadOnlyTable(Tree n, Tree init, Tree ridx)
Definition: signals.hh:104
double min(double x, double y)
Definition: interval.hh:59
Tree sigDiv(Tree x, Tree y)
Definition: signals.hh:155
Definition: binop.hh:56
bool isSigInt(Tree t, int *i)
Definition: signals.cpp:41
Definition: binop.hh:58
int getSubSignals(Tree sig, vector< Tree > &vsigs, bool visitgen=true)
Extract the sub signals of a signal expression, that is not necesseraly all the subtrees.
Definition: subsignals.cpp:12
bool isSigWRTbl(Tree u, Tree &id, Tree &t, Tree &i, Tree &s)
Definition: signals.cpp:81
Tree sigDocConstantTbl(Tree n, Tree init)
Definition: signals.cpp:98
Tree sigInt(int n)
Signals Block-diagrams are converted into signal expressions via symbolic propagation.
Definition: signals.cpp:40
Tree sigVBargraph(Tree label, Tree min, Tree max, Tree t0)
Definition: signals.cpp:284
bool isSigFVar(Tree s)
Definition: signals.cpp:144
Definition: binop.hh:59
bool isSigSelect2(Tree t, Tree &selector, Tree &s1, Tree &s2)
Definition: signals.cpp:116
bool isSigFloatCast(Tree t)
Definition: signals.cpp:187