FAUST compiler  0.9.9.6b8
signals.cpp
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  HISTORY
25  22/01/05 : added int cast in select2 and select3 selection signal
26 *****************************************************************************/
27 
28 
29 
30 #include "signals.hh"
31 
32 
34 
38 
40 Tree sigInt(int i) { return tree(i); }
41 bool isSigInt(Tree t, int* i) { return isInt(t->node(), i); }
42 
43 Tree sigReal(double r) { return tree(r); }
44 bool isSigReal(Tree t, double* r) { return isDouble(t->node(), r); }
45 
46 Sym SIGINPUT = symbol ("sigInput");
47 Tree sigInput(int i) { return tree(SIGINPUT, tree(i)); }
48 bool isSigInput(Tree t, int* i) { Tree x; return isTree(t, SIGINPUT, x) && isInt(x->node(),i); }
49 
50 Sym SIGOUTPUT = symbol ("sigOutput");
51 Tree sigOutput(int i, Tree t0) { return tree(SIGOUTPUT, tree(i), t0); }
52 bool isSigOutput(Tree t, int* i, Tree& t0) { Tree x; return isTree(t, SIGOUTPUT, x, t0) && isInt(x->node(),i); }
53 
54 Sym SIGDELAY1 = symbol ("sigDelay1");
55 Tree sigDelay0(Tree t0) { return sigFixDelay(t0, sigInt(0));}
56 
57 Tree sigDelay1(Tree t0) { return tree(SIGDELAY1, t0); }
58 bool isSigDelay1(Tree t, Tree& t0) { return isTree(t, SIGDELAY1, t0); }
59 
60 Sym SIGFIXDELAY = symbol ("sigFixDelay");
61 Tree sigFixDelay(Tree t0, Tree t1) { return tree(SIGFIXDELAY, t0, sigIntCast(t1)); }
62 bool isSigFixDelay(Tree t, Tree& t0, Tree& t1) { return isTree(t, SIGFIXDELAY, t0, t1); }
63 
64 Sym SIGPREFIX = symbol ("sigPrefix");
65 Tree sigPrefix(Tree t0, Tree t1) { return tree(SIGPREFIX, t0, t1); }
66 bool isSigPrefix(Tree t, Tree& t0, Tree& t1) { return isTree(t, SIGPREFIX, t0, t1); }
67 
68 Sym SIGIOTA = symbol ("sigIota");
69 Tree sigIota(Tree t0) { return tree(SIGIOTA, t0); }
70 bool isSigIota(Tree t, Tree& t0) { return isTree(t, SIGIOTA, t0); }
71 
72 
73 // Read only and read write tables
74 
75 Sym SIGRDTBL = symbol ("SigRDTbl");
76 Tree sigRDTbl (Tree t, Tree i) { return tree(SIGRDTBL, t, i); }
77 bool isSigRDTbl (Tree s, Tree& t, Tree& i) { return isTree(s, SIGRDTBL, t, i); }
78 
79 Sym SIGWRTBL = symbol ("SigWRTbl");
80 Tree sigWRTbl (Tree id, Tree t, Tree i, Tree s) { return tree(SIGWRTBL, id, t, i, s); }
81 bool isSigWRTbl (Tree u, Tree& id, Tree& t, Tree& i, Tree& s) { return isTree(u, SIGWRTBL, id, t, i, s); }
82 
83 Sym SIGTABLE = symbol ("SigTable");
84 Tree sigTable (Tree id, Tree n, Tree sig) { return tree(SIGTABLE, id, n, sig); }
85 bool isSigTable (Tree t, Tree& id, Tree& n, Tree& sig) { return isTree(t, SIGTABLE, id, n, sig); }
86 
87 // Signal used to generate the initial content of a table
88 
89 Sym SIGGEN = symbol ("SigGen");
90 Tree sigGen (Tree s) { return tree(SIGGEN, s); }
91 bool isSigGen (Tree t, Tree& x) { return isTree(t, SIGGEN, x); }
92 bool isSigGen (Tree t) { return t->node()== Node(SIGGEN); }
93 
94 
95 // Documentator Tables : special version of tables only for documentation purposes
96 
97 Sym SIGDOCONSTANTTBL = symbol ("SigDocConstantTbl");
98 Tree sigDocConstantTbl (Tree n, Tree sig) { return tree(SIGDOCONSTANTTBL, n, sig); }
99 bool isSigDocConstantTbl (Tree t, Tree& n, Tree& sig) { return isTree(t, SIGDOCONSTANTTBL, n, sig); }
100 
101 Sym SIGDOCWRITETBL = symbol ("SigDocWriteTbl");
102 Tree sigDocWriteTbl (Tree n, Tree sig, Tree widx, Tree wsig) { return tree(SIGDOCWRITETBL, n, sig, widx, wsig); }
103 bool isSigDocWriteTbl (Tree t, Tree& n, Tree& sig, Tree& widx, Tree& wsig) { return isTree(t, SIGDOCWRITETBL, n, sig, widx, wsig); }
104 
105 Sym SIGDOCACCESSTBL = symbol ("SigDocAccessTbl");
106 Tree sigDocAccessTbl (Tree tbl, Tree ridx) { return tree(SIGDOCACCESSTBL, tbl, ridx); }
107 bool isSigDocAccessTbl (Tree t, Tree& tbl, Tree& ridx) { return isTree(t, SIGDOCACCESSTBL, tbl, ridx); }
108 
109 
110 // Select on signal among severals
111 
112 Sym SIGSELECT2 = symbol ("SigSelect2");
113 Sym SIGSELECT3 = symbol ("SigSelect3");
114 
115 Tree sigSelect2 (Tree selector, Tree s1, Tree s2) { return tree(SIGSELECT2, sigIntCast(selector), s1, s2); }
116 bool isSigSelect2 (Tree t, Tree& selector, Tree& s1, Tree& s2) { return isTree(t, SIGSELECT2, selector, s1, s2); }
117 
118 Tree sigSelect3 (Tree selector, Tree s1, Tree s2, Tree s3) { return tree(SIGSELECT3, sigIntCast(selector), s1, s2, s3); }
119 bool isSigSelect3 (Tree t, Tree& selector, Tree& s1, Tree& s2, Tree& s3) { return isTree(t, SIGSELECT3, selector, s1, s2, s3); }
120 
121 
122 // Arithmetical operations
123 
124 Sym SIGBINOP = symbol ("SigBinOp");
125 Tree sigBinOp(int op, Tree x, Tree y) { return tree(SIGBINOP, tree(op), x, y); }
126 bool isSigBinOp(Tree s, int* op, Tree& x, Tree& y) { Tree t; return isTree(s, SIGBINOP, t, x, y) && isInt(t->node(),op); }
127 
128 
129 // Foreign Functions
130 
131 Sym SIGFFUN = symbol ("SigFFun");
132 Tree sigFFun (Tree ff, Tree largs) { return tree(SIGFFUN, ff, largs); }
133 bool isSigFFun (Tree s, Tree& ff, Tree& largs) { return isTree(s, SIGFFUN, ff, largs); }
134 
135 
136 Sym SIGFCONST = symbol ("SigFConst");
137 Tree sigFConst (Tree type, Tree name, Tree file) { return tree(SIGFCONST, type, name, file); }
138 bool isSigFConst (Tree s) { Tree t,n,f; return isTree(s, SIGFCONST, t, n, f); }
139 bool isSigFConst (Tree s, Tree& type, Tree& name, Tree& file) { return isTree(s, SIGFCONST,type, name, file); }
140 
141 
142 Sym SIGFVAR = symbol ("SigFVar");
143 Tree sigFVar (Tree type, Tree name, Tree file) { return tree(SIGFVAR, type, name, file); }
144 bool isSigFVar (Tree s) { Tree t,n,f; return isTree(s, SIGFVAR, t, n, f); }
145 bool isSigFVar (Tree s, Tree& type, Tree& name, Tree& file) { return isTree(s, SIGFVAR, type, name, file); }
146 
147 // nouvelle version utilisant rec et ref
148 
149 Sym SIGPROJ = symbol ("SigProj");
150 Tree sigProj (int i, Tree rgroup) { return tree(SIGPROJ, tree(i), rgroup); }
151 bool isProj (Tree t, int* i, Tree& rgroup) { Tree x; return isTree(t, SIGPROJ, x, rgroup) && isInt(x->node(), i); }
152 
153 
154 // Int and Float casting
155 
156 Sym SIGINTCAST = symbol ("sigIntCast");
157 Sym SIGFLOATCAST = symbol ("sigFloatCast");
158 
160 {
161  Node n = t->node();
162 
163  int i; if (isInt(n, &i)) return t;
164  double x; if (isDouble(n, &x)) return tree(int(x));
165  if (isSigIntCast(t)) return t;
166 
167  return tree(SIGINTCAST, t);
168 }
169 
171 {
172  Node n = t->node();
173 
174  int i; if (isInt(n, &i)) return tree(double(i));
175  double x; if (isDouble(n, &x)) return t;
176  if (isSigFloatCast(t)) return t;
177  if (isSigInput(t, &i)) return t;
178 
179  return tree(SIGFLOATCAST, t);
180 }
181 
182 //Tree sigFloatCast(Tree t) { return isSigFloatCast(t)? t : tree(SIGFLOATCAST, t); }
183 
184 bool isSigIntCast(Tree t) { Tree x; return isTree(t, SIGINTCAST, x); }
185 bool isSigIntCast(Tree t, Tree& x) { return isTree(t, SIGINTCAST, x); }
186 
187 bool isSigFloatCast(Tree t) { Tree x; return isTree(t, SIGFLOATCAST, x);}
188 bool isSigFloatCast(Tree t, Tree& x) { return isTree(t, SIGFLOATCAST, x); }
189 
190 
191 
192 
193 /*****************************************************************************
194  User Interface Elements
195 *****************************************************************************/
196 
197 Sym SIGBUTTON = symbol ("SigButton");
198 Tree sigButton (Tree lbl) { return tree(SIGBUTTON, lbl); }
199 bool isSigButton (Tree s) { Tree lbl; return isTree(s, SIGBUTTON, lbl); }
200 bool isSigButton (Tree s, Tree& lbl) { return isTree(s, SIGBUTTON, lbl); }
201 
202 
203 Sym SIGCHECKBOX = symbol ("SigCheckbox");
204 Tree sigCheckbox (Tree lbl) { return tree(SIGCHECKBOX, lbl); }
205 bool isSigCheckbox (Tree s) { Tree lbl; return isTree(s, SIGCHECKBOX, lbl); }
206 bool isSigCheckbox (Tree s, Tree& lbl) { return isTree(s, SIGCHECKBOX, lbl); }
207 
208 
209 Sym SIGWAVEFORM = symbol("SigWaveform");
210 Tree sigWaveform (const tvec& wf) { return tree(SIGWAVEFORM, wf); }
211 bool isSigWaveform(Tree s) { return isTree(s, SIGWAVEFORM); }
212 
213 
214 Sym SIGHSLIDER = symbol ("SigHSlider");
216  { return tree(SIGHSLIDER, lbl, list4(cur,min,max,step)); }
217 bool isSigHSlider (Tree s) { Tree lbl, params; return isTree(s, SIGHSLIDER, lbl, params); }
218 
219 bool isSigHSlider (Tree s, Tree& lbl, Tree& cur, Tree& min, Tree& max, Tree& step)
220 {
221  Tree params;
222  if (isTree(s, SIGHSLIDER, lbl, params)) {
223  cur = nth(params, 0);
224  min = nth(params, 1);
225  max = nth(params, 2);
226  step= nth(params, 3);
227  return true;
228  } else {
229  return false;
230  }
231 }
232 
233 
234 Sym SIGVSLIDER = symbol ("SigVSlider");
236  { return tree(SIGVSLIDER, lbl, list4(cur,min,max,step)); }
237 bool isSigVSlider (Tree s) { Tree lbl, params; return isTree(s, SIGVSLIDER, lbl, params); }
238 
239 bool isSigVSlider (Tree s, Tree& lbl, Tree& cur, Tree& min, Tree& max, Tree& step)
240 {
241  Tree params;
242  if (isTree(s, SIGVSLIDER, lbl, params)) {
243  cur = nth(params, 0);
244  min = nth(params, 1);
245  max = nth(params, 2);
246  step= nth(params, 3);
247  return true;
248  } else {
249  return false;
250  }
251 }
252 
253 
254 Sym SIGNUMENTRY = symbol ("SigNumEntry");
256  { return tree(SIGNUMENTRY, lbl, list4(cur,min,max,step)); }
257 bool isSigNumEntry (Tree s) { Tree lbl, params; return isTree(s, SIGNUMENTRY, lbl, params); }
258 
259 bool isSigNumEntry (Tree s, Tree& lbl, Tree& cur, Tree& min, Tree& max, Tree& step)
260 {
261  Tree params;
262  if (isTree(s, SIGNUMENTRY, lbl, params)) {
263  cur = nth(params, 0);
264  min = nth(params, 1);
265  max = nth(params, 2);
266  step= nth(params, 3);
267  return true;
268  } else {
269  return false;
270  }
271 }
272 
273 // output elements
274 
275 
276 
277 Sym SIGHBARGRAPH = symbol ("SigHBargraph");
278 Tree sigHBargraph (Tree lbl, Tree min, Tree max, Tree x) { return tree(SIGHBARGRAPH, lbl, min, max, x); }
279 bool isSigHBargraph (Tree s) { Tree lbl, min, max, x; return isTree(s, SIGHBARGRAPH, lbl, min, max, x); }
280 bool isSigHBargraph (Tree s, Tree& lbl, Tree& min, Tree& max, Tree& x) { return isTree(s, SIGHBARGRAPH, lbl, min, max, x); }
281 
282 
283 Sym SIGVBARGRAPH = symbol ("SigVBargraph");
284 Tree sigVBargraph (Tree lbl, Tree min, Tree max, Tree x) { return tree(SIGVBARGRAPH, lbl, min, max, x); }
285 bool isSigVBargraph (Tree s) { Tree lbl, min, max, x; return isTree(s, SIGVBARGRAPH, lbl, min, max, x); }
286 bool isSigVBargraph (Tree s, Tree& lbl, Tree& min, Tree& max, Tree& x) { return isTree(s, SIGVBARGRAPH, lbl, min, max, x); }
287 
288 
289 Sym SIGATTACH = symbol ("sigAttach");
290 Tree sigAttach(Tree t0, Tree t1) { return tree(SIGATTACH, t0, t1); }
291 bool isSigAttach(Tree t, Tree& t0, Tree& t1) { return isTree(t, SIGATTACH, t0, t1); }
292 
293 
294 
296 {
297  Tree r = tree(addNode(a->node(),b->node()));
298  //cerr.flags(ios::showpoint); cerr << "addNums " << *a << "+" << *b << " -> " << *r << endl;
299  return r;
300 }
301 
303 {
304  Tree r = tree(subNode(a->node(),b->node()));
305  //cerr.flags(ios::showpoint); cerr << "subNums " << *a << "-" << *b << " -> " << *r << endl;
306  return r;
307 }
308 
310 {
311  Tree r = tree(mulNode(a->node(),b->node()));
312  //cerr.flags(ios::showpoint); cerr << "mulNums " << *a << "*" << *b << " -> " << *r << endl;
313  return r;
314 }
315 
316 //Tree divNums(Tree a, Tree b)
317 //{
318 // Tree r = tree(divNode(a->node(),b->node()));
319 // //cerr.flags(ios::showpoint); cerr << "divNums " << *a << "/" << *b << " -> " << *r << endl;
320 // return r;
321 //}
322 
324 {
325  Tree r = tree(divExtendedNode(a->node(),b->node()));
326  //cerr.flags(ios::showpoint); cerr << "divExtendeNums " << *a << "/" << *b << " -> " << *r << endl;
327  return r;
328 }
329 
331 {
332  Tree r = tree(minusNode(a->node()));
333  //cerr.flags(ios::showpoint); cerr << "minusNum " << *a << " -> " << *r << endl;
334  return r;
335 }
336 
338 {
339  Tree r = tree(inverseNode(a->node()));
340  //cerr.flags(ios::showpoint); cerr << "inverseNum " << *a << " -> " << *r << endl;
341  return r;
342 }
343 
344 bool isSigAdd(Tree a, Tree& x, Tree& y)
345 {
346  int op;
347  return isSigBinOp(a, &op, x, y) && (op == kAdd);
348 }
349 
350 bool isSigMul(Tree a, Tree& x, Tree& y)
351 {
352  int op;
353  return isSigBinOp(a, &op, x, y) && (op == kMul);
354 }
355 
356 bool isSigSub(Tree a, Tree& x, Tree& y)
357 {
358  int op;
359  return isSigBinOp(a, &op, x, y) && (op == kSub);
360 }
361 
362 bool isSigDiv(Tree a, Tree& x, Tree& y)
363 {
364  int op;
365  return isSigBinOp(a, &op, x, y) && (op == kDiv);
366 }
367 
368 
369 
370 
371 /*****************************************************************************
372  matrix extension
373 *****************************************************************************/
374 Sym SIGTUPLE = symbol ("SigTuple");
375 Sym SIGTUPLEACCESS = symbol ("SigTupleAccess");
376 
377 // a tuple of signals is basically a list of signals.
378 // mode = 0 means normal, mode = 1 means blocked
379 Tree sigTuple (int mode, Tree ls) { return tree(SIGTUPLE, tree(mode), ls); }
380 bool isSigTuple (Tree s, int* mode, Tree& ls) { Tree m; return isTree(s, SIGTUPLE, m, ls) && isInt(m->node(), mode); }
381 
382 // Access the components of a tuple.
383 // ts is tuple of signals, idx is a scalar signal between 0..n
384 Tree sigTupleAccess(Tree ts, Tree idx) { return tree(SIGTUPLEACCESS, ts, idx); }
385 bool isSigTupleAccess(Tree s, Tree& ts, Tree& idx) { return isTree(s, SIGTUPLEACCESS, ts, idx); }
386 
387 // create a tuple of signals
389 {
390  Tree l1, l2;
391  int m1, m2;
392 
393  if (isSigTuple(s1, &m1, l1) && (m1 == 0)) {
394  // nothing to do
395  } else {
396  l1 = list1(s1);
397  }
398 
399  if (isSigTuple(s2, &m2, l2) && (m2 == 0)) {
400  // nothing to do
401  } else {
402  l2 = list1(s2);
403  }
404 
405 
406  return sigTuple(0, concat(l1,l2));
407 }
408 
409 
410 
417 bool verySimple(Tree exp)
418 {
419  int i;
420  double r;
421  Tree type, name, file;
422 
423  return isSigInt(exp, &i)
424  || isSigReal(exp, &r)
425  || isSigInput(exp, &i)
426  || isSigFConst(exp, type, name, file);
427 }
Tree sigGen(Tree s)
Definition: signals.cpp:90
bool isSigHSlider(Tree s)
Definition: signals.cpp:217
bool isSigRDTbl(Tree s, Tree &t, Tree &i)
Definition: signals.cpp:77
Sym SIGGEN
Definition: signals.cpp:89
Tree sigIntCast(Tree t)
Definition: signals.cpp:159
Tree sigReal(double r)
Definition: signals.cpp:43
bool isSigSub(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:356
bool isSigFConst(Tree s)
Definition: signals.cpp:138
Tree sigTupleAccess(Tree ts, Tree idx)
Definition: signals.cpp:384
bool isSigPrefix(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:66
bool isSigCheckbox(Tree s)
Definition: signals.cpp:205
Sym SIGPREFIX
Definition: signals.cpp:64
Tree minusNum(Tree a)
Definition: signals.cpp:330
Tree sigDelay0(Tree t0)
Definition: signals.cpp:55
Tree sigHBargraph(Tree lbl, Tree min, Tree max, Tree x)
Definition: signals.cpp:278
bool isSigFFun(Tree s, Tree &ff, Tree &largs)
Definition: signals.cpp:133
Tree sigHSlider(Tree lbl, Tree cur, Tree min, Tree max, Tree step)
Definition: signals.cpp:215
Class Node = (type x (int + double + Sym + void*))
Definition: node.hh:75
Sym SIGBUTTON
Definition: signals.cpp:197
bool isSigNumEntry(Tree s)
Definition: signals.cpp:257
bool isSigTuple(Tree s, int *mode, Tree &ls)
Definition: signals.cpp:380
const Node addNode(const Node &x, const Node &y)
Definition: node.hh:241
bool isSigSelect2(Tree t, Tree &selector, Tree &s1, Tree &s2)
Definition: signals.cpp:116
Tree sigOutput(int i, Tree t0)
Definition: signals.cpp:51
Tree sigIota(Tree t0)
Definition: signals.cpp:69
Tree sigInput(int i)
Definition: signals.cpp:47
Sym SIGDOCACCESSTBL
Definition: signals.cpp:105
bool isSigIota(Tree t, Tree &t0)
Definition: signals.cpp:70
vector< Tree > tvec
Definition: tree.hh:90
Tree sigSelect2(Tree selector, Tree s1, Tree s2)
Definition: signals.cpp:115
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
const Node divExtendedNode(const Node &x, const Node &y)
Definition: node.hh:250
bool isSigFixDelay(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:62
Tree sigPrefix(Tree t0, Tree t1)
Definition: signals.cpp:65
Tree addNums(Tree a, Tree b)
Definition: signals.cpp:295
const Node & node() const
return the content of the tree
Definition: tree.hh:143
Tree list4(Tree a, Tree b, Tree c, Tree d)
Definition: list.hh:130
Sym SIGHSLIDER
Definition: signals.cpp:214
Sym SIGHBARGRAPH
Definition: signals.cpp:277
Sym SIGTUPLEACCESS
Definition: signals.cpp:375
Sym SIGIOTA
Definition: signals.cpp:68
Sym SIGTUPLE
Definition: signals.cpp:374
bool isSigVBargraph(Tree s)
Definition: signals.cpp:285
Sym SIGPROJ
Definition: signals.cpp:149
bool isSigSelect3(Tree t, Tree &selector, Tree &s1, Tree &s2, Tree &s3)
Definition: signals.cpp:119
bool isSigVSlider(Tree s)
Definition: signals.cpp:237
Definition: binop.hh:56
Sym SIGRDTBL
Definition: signals.cpp:75
double max(double x, double y)
Definition: interval.hh:60
bool isSigGen(Tree t, Tree &x)
Definition: signals.cpp:91
Sym SIGWRTBL
Definition: signals.cpp:79
Sym SIGDOCWRITETBL
Definition: signals.cpp:101
Definition: binop.hh:56
Tree mulNums(Tree a, Tree b)
Definition: signals.cpp:309
bool isSigReal(Tree t, double *r)
Definition: signals.cpp:44
Tree sigVSlider(Tree lbl, Tree cur, Tree min, Tree max, Tree step)
Definition: signals.cpp:235
Sym SIGINTCAST
Definition: signals.cpp:156
const Node mulNode(const Node &x, const Node &y)
Definition: node.hh:247
Tree sigDocAccessTbl(Tree tbl, Tree ridx)
Definition: signals.cpp:106
Tree sigProj(int i, Tree rgroup)
Definition: signals.cpp:150
Sym SIGFVAR
Definition: signals.cpp:142
Sym SIGTABLE
Definition: signals.cpp:83
Sym SIGFFUN
Definition: signals.cpp:131
bool isSigTupleAccess(Tree s, Tree &ts, Tree &idx)
Definition: signals.cpp:385
bool isSigHBargraph(Tree s)
Definition: signals.cpp:279
bool isSigDocConstantTbl(Tree t, Tree &n, Tree &sig)
Definition: signals.cpp:99
const Node minusNode(const Node &x)
Definition: node.hh:260
Sym SIGWAVEFORM
Definition: signals.cpp:209
Definition: binop.hh:56
Sym SIGFCONST
Definition: signals.cpp:136
Sym SIGSELECT3
Definition: signals.cpp:113
Tree list1(Tree a)
Definition: list.hh:127
bool isSigTable(Tree t, Tree &id, Tree &n, Tree &sig)
Definition: signals.cpp:85
bool isSigBinOp(Tree s, int *op, Tree &x, Tree &y)
Definition: signals.cpp:126
Tree sigWaveform(const tvec &wf)
Definition: signals.cpp:210
Sym SIGOUTPUT
Definition: signals.cpp:50
bool isDouble(const Node &n)
Definition: node.hh:143
bool isSigAttach(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:291
Sym SIGATTACH
Definition: signals.cpp:289
Sym SIGINPUT
Definition: signals.cpp:46
Tree sigAttach(Tree t0, Tree t1)
Definition: signals.cpp:290
Sym SIGDOCONSTANTTBL
Definition: signals.cpp:97
bool isSigDocAccessTbl(Tree t, Tree &tbl, Tree &ridx)
Definition: signals.cpp:107
Tree concat(Tree l, Tree q)
Definition: list.cpp:216
Sym SIGDELAY1
Definition: signals.cpp:54
Tree sigDocConstantTbl(Tree n, Tree sig)
Definition: signals.cpp:98
bool isSigWRTbl(Tree u, Tree &id, Tree &t, Tree &i, Tree &s)
Definition: signals.cpp:81
Tree sigCartesianProd(Tree s1, Tree s2)
Definition: signals.cpp:388
Tree sigFloatCast(Tree t)
Definition: signals.cpp:170
Tree sigFixDelay(Tree t0, Tree t1)
Definition: signals.cpp:61
bool isSigAdd(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:344
Sym SIGFLOATCAST
Definition: signals.cpp:157
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 isSigDiv(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:362
const char * name(Symbol *sym)
Returns the name of a symbol.
Definition: symbol.hh:98
Tree sigFFun(Tree ff, Tree largs)
Definition: signals.cpp:132
bool isSigWaveform(Tree s)
Definition: signals.cpp:211
bool isSigInt(Tree t, int *i)
Definition: signals.cpp:41
Sym SIGBINOP
Definition: signals.cpp:124
Tree sigFConst(Tree type, Tree name, Tree file)
Definition: signals.cpp:137
Sym SIGFIXDELAY
Definition: signals.cpp:60
Tree tree(const Node &n)
Definition: tree.hh:186
Tree sigCheckbox(Tree lbl)
Definition: signals.cpp:204
Sym SIGVSLIDER
Definition: signals.cpp:234
Tree sigVBargraph(Tree lbl, Tree min, Tree max, Tree x)
Definition: signals.cpp:284
Sym SIGVBARGRAPH
Definition: signals.cpp:283
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
Symbols are unique objects with a name stored in a hash table.
Definition: symbol.hh:53
Tree inverseNum(Tree a)
Definition: signals.cpp:337
const Node subNode(const Node &x, const Node &y)
Definition: node.hh:244
bool isSigFloatCast(Tree t)
Definition: signals.cpp:187
bool isTree(const Tree &t, const Node &n)
Definition: tree.cpp:305
Tree sigTuple(int mode, Tree ls)
Definition: signals.cpp:379
Sym SIGCHECKBOX
Definition: signals.cpp:203
bool isSigFVar(Tree s)
Definition: signals.cpp:144
Tree sigNumEntry(Tree lbl, Tree cur, Tree min, Tree max, Tree step)
Definition: signals.cpp:255
Tree sigFVar(Tree type, Tree name, Tree file)
Definition: signals.cpp:143
Tree sigButton(Tree lbl)
Definition: signals.cpp:198
bool isSigIntCast(Tree t)
Definition: signals.cpp:184
Sym SIGNUMENTRY
Definition: signals.cpp:254
Tree sigRDTbl(Tree t, Tree i)
Definition: signals.cpp:76
Symbol * symbol(const char *str)
Returns (and creates if new) the symbol of name str.
Definition: symbol.hh:95
Tree sigSelect3(Tree selector, Tree s1, Tree s2, Tree s3)
Definition: signals.cpp:118
bool isSigMul(Tree a, Tree &x, Tree &y)
Definition: signals.cpp:350
Tree sigDocWriteTbl(Tree n, Tree sig, Tree widx, Tree wsig)
Definition: signals.cpp:102
bool isProj(Tree t, int *i, Tree &rgroup)
Definition: signals.cpp:151
bool isInt(const Node &n)
Definition: node.hh:126
Tree divExtendedNums(Tree a, Tree b)
Definition: signals.cpp:323
Tree sigWRTbl(Tree id, Tree t, Tree i, Tree s)
Definition: signals.cpp:80
double min(double x, double y)
Definition: interval.hh:59
Definition: binop.hh:56
Tree sigTable(Tree id, Tree n, Tree sig)
Definition: signals.cpp:84
Tree subNums(Tree a, Tree b)
Definition: signals.cpp:302
Tree nth(Tree l, int i)
Definition: list.cpp:182
Tree sigBinOp(int op, Tree x, Tree y)
Definition: signals.cpp:125
bool isSigOutput(Tree t, int *i, Tree &t0)
Definition: signals.cpp:52
bool isSigButton(Tree s)
Definition: signals.cpp:199
const Node inverseNode(const Node &x)
Definition: node.hh:263
Sym SIGSELECT2
Definition: signals.cpp:112
Tree sigDelay1(Tree t0)
Definition: signals.cpp:57
Tree sigInt(int i)
Signals.
Definition: signals.cpp:40