51 int nlines = (int)lsig.size();
55 for (
int b=0; b<nbus; b++) {
57 for (
int i=b+nbus; i<nlines; i+=nbus) {
68 int nlines = (int)inputs.size();
72 for (
int b=0; b<nbus; b++) {
73 outputs[b] = inputs[b % nlines];
99 for (
int i = 0; i < n; i++) l[i] =
sigInput(i);
113 for (
int x = i; x < j; x++) r[x-i] = l[x];
119 int n1 = (int)a.size();
120 int n2 = (int)b.size();
123 for (
int x=0; x<n1; x++) r[x] = a[x];
124 for (
int x=0; x<n2; x++) r[x+n1] = b[x];
133 int n = (int)a.size();
135 while (n--) t =
cons(a[n],t);
145 while (!
isNil(l)) { r.push_back(
hd(l)); l =
tl(l); }
150 int n = (int)l.size();
153 for(
int i = 0; i<n; i++) r[i] =
lift(l[i]);
262 Tree t1, t2, ff, label, cur,
min,
max, step, type,
name, file, slot, body;
271 assert(lsig.size() == xt->
arity());
278 assert(lsig.size()==0);
282 assert(lsig.size()==0);
289 assert(lsig.size()==0);
295 assert(lsig.size()==0);
299 else if (
isBoxFVar(box, type, name, file)) {
300 assert(lsig.size()==0);
307 assert(lsig.size()==1);
312 assert(lsig.size()==1);
320 assert(lsig.size()==0);
331 assert(lsig.size()>0);
338 assert(lsig.size()==0);
343 assert(lsig.size()==1);
349 assert(lsig.size()==2);
350 return makeList( p2(lsig[0],lsig[1]) );
354 assert(lsig.size()==3);
355 return makeList( p3(lsig[0],lsig[1],lsig[2]) );
359 assert(lsig.size()==4);
360 return makeList( p4(lsig[0],lsig[1],lsig[2],lsig[3]) );
364 assert(lsig.size()==5);
365 return makeList( p5(lsig[0],lsig[1],lsig[2],lsig[3],lsig[4]) );
370 assert(
int(lsig.size())==
ffarity(ff));
377 assert(lsig.size()==0);
382 assert(lsig.size()==0);
386 else if (
isBoxVSlider(box, label, cur, min, max, step)) {
387 assert(lsig.size()==0);
391 else if (
isBoxHSlider(box, label, cur, min, max, step)) {
392 assert(lsig.size()==0);
397 assert(lsig.size()==0);
402 assert(lsig.size()==1);
407 assert(lsig.size()==1);
428 int in1, out1, in2, out2;
436 }
else if (out1 > in2) {
440 return propagate(slotenv, path, t2,
listConcat(
propagate(slotenv, path, t1,
listRange(lsig,0,in1)),
listRange(lsig,in1,in1+in2-out1) ) );
445 int in1, out1, in2, out2;
454 int in1, out1, in2, out2;
464 int in1, out1, in2, out2;
475 int in1, out1, in2, out2;
488 cout <<
"ERROR in file " << __FILE__ <<
':' << __LINE__ <<
", unrecognised box expression : " <<
boxpp(box) << endl;
Tree(* prim2)(Tree x, Tree y)
Tree pushEnv(Tree key, Tree val, Tree env)
bool searchEnv(Tree key, Tree &v, Tree env)
static Node PROPAGATEPROPERTY(symbol("PropagateProperty"))
Propagate computes the outputs signals of a block-diagram according to a list of input signals...
siglist listConcat(const siglist &a, const siglist &b)
bool isBoxSeq(Tree t, Tree &x, Tree &y)
siglist mix(const siglist &lsig, int nbus)
propagate : box listOfSignal-> listOfSignal'
Tree sigHBargraph(Tree lbl, Tree min, Tree max, Tree x)
Tree sigHSlider(Tree lbl, Tree cur, Tree min, Tree max, Tree step)
Class Node = (type x (int + double + Sym + void*))
bool getPropagateProperty(Tree args, siglist &lsig)
Retreive the propagation result as a property of the arguments tuplet.
siglist propagate(Tree slotenv, Tree path, Tree box, const siglist &lsig)
Propagate a list of signals into a block diagram.
Tree rec(Tree body)
create a de Bruijn recursive tree
Tree cons(Tree a, Tree b)
bool isBoxSplit(Tree t, Tree &x, Tree &y)
Tree ref(int level)
create a de Bruijn recursive reference
Tree(* prim4)(Tree w, Tree x, Tree y, Tree z)
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
bool isBoxHBargraph(Tree s)
bool isBoxRec(Tree t, Tree &x, Tree &y)
double max(double x, double y)
siglist split(const siglist &inputs, int nbus)
split une liste de signaux sur n bus
Tree(* prim3)(Tree x, Tree y, Tree z)
Tree(* prim5)(Tree v, Tree w, Tree x, Tree y, Tree z)
void setPropagateProperty(Tree args, const siglist &lsig)
Store the propagation result as a property of the arguments tuplet.
Tree sigVSlider(Tree lbl, Tree cur, Tree min, Tree max, Tree step)
bool isBoxSymbolic(Tree t)
Tree boxPropagateSig(Tree path, Tree box, const siglist &lsig)
Top level propagate a list of signals into a block diagram.
Tree sigProj(int i, Tree rgroup)
Tree listConvert(const siglist &a)
Convert an stl list of signals into a tree list of signals.
bool isBoxPar(Tree t, Tree &x, Tree &y)
bool isBoxHSlider(Tree s)
void treelist2siglist(Tree l, siglist &r)
Convert a tree list of signals into an stl list of signals.
Tree sigWaveform(const tvec &wf)
siglist listLift(const siglist &l)
bool isBoxVBargraph(Tree s)
bool isBoxWaveform(Tree s)
Tree sigAdd(Tree x, Tree y)
bool isBoxCheckbox(Tree s)
siglist makeMemSigProjList(Tree t, int n)
Fabrique une liste de n mem projections d'un groupe récursif.
siglist listRange(const siglist &l, int i, int j)
virtual Tree computeSigOutput(const vector< Tree > &args)=0
virtual unsigned int arity()=0
siglist makeSigInputList(int n)
Fabrique une liste de n entrées.
const tvec & branches() const
return all branches (subtrees) of a tree
const char * name(Symbol *sym)
Returns the name of a symbol.
Tree sigFFun(Tree ff, Tree largs)
Tree sigFConst(Tree type, Tree name, Tree file)
Tree sigCheckbox(Tree lbl)
Tree sigVBargraph(Tree lbl, Tree min, Tree max, Tree x)
bool isBoxVSlider(Tree s)
bool isBoxNumEntry(Tree s)
void setProperty(Tree t, Tree key, Tree val)
Tree sigNumEntry(Tree lbl, Tree cur, Tree min, Tree max, Tree step)
void * getUserData(Symbol *sym)
Returns user data.
Tree sigFVar(Tree type, Tree name, Tree file)
Symbol * symbol(const char *str)
Returns (and creates if new) the symbol of name str.
Tree normalizePath(Tree path)
Interface for names management.
bool isBoxMerge(Tree t, Tree &x, Tree &y)
double min(double x, double y)
siglist realPropagate(Tree slotenv, Tree path, Tree box, const siglist &lsig)
Propagate a list of signals into a block diagram.
siglist makeSigProjList(Tree t, int n)
Fabrique une liste de n projections d'un groupe récursif.
bool getProperty(Tree t, Tree key, Tree &val)
bool getBoxType(Tree box, int *inum, int *onum)
Return the type (number of inputs and outputs) of a box or false if undefined.
Tree sigInt(int i)
Signals.