41 static void recdraw(
Tree sig, set<Tree>& drawn, ofstream& fout );
52 set<Tree> alreadyDrawn;
54 fout <<
"strict digraph loopgraph {\n"
55 <<
" rankdir=LR; node [fontsize=10];"
61 fout <<
"OUTPUT_" << out <<
"[color=\"red2\" style=\"filled\" fillcolor=\"pink\"];" << endl;
76 static void recdraw(
Tree sig, set<Tree>& drawn, ofstream& fout )
82 if (drawn.count(sig) == 0) {
91 fout <<
'S' << sig <<
"[label=\"" <<
sigLabel(sig) <<
"\""
98 if (n==1 &&
isList(subsig[0])) {
100 assert(
isRec(sig,
id,body));
101 if (!
isRec(sig,
id,body)) {
109 subsig.push_back(
hd(L));
115 for (
int i=0; i<n; i++) {
116 recdraw(subsig[i], drawn, fout);
117 fout <<
'S' << subsig[i] <<
" -> " <<
'S' << sig
136 if (t->nature()==
kInt) {
137 s +=
" color=\"blue\"";
139 s +=
" color=\"red\"";
143 if (t->vectorability()==
kVect && t->variability()==
kSamp) {
144 s +=
" style=\"bold\"";
158 if (t->variability()==
kKonst) {
159 s +=
" shape=\"box\"";
160 }
else if (t->variability()==
kBlock) {
161 s +=
" shape=\"hexagon\"";
162 }
else if (t->variability()==
kSamp) {
163 s +=
" shape=\"ellipse\"";
174 "+",
"-",
"*",
"/",
"%",
176 ">",
"<",
">=",
"<=",
"==",
"!=",
188 Tree x, y, z, c, type,
name, file, ff, largs, id, le, sel, var, label;
194 if (p) { fout << p->
name(); }
195 else if (
isSigInt(sig, &i) ) { fout << i; }
196 else if (
isSigReal(sig, &r) ) { fout << r; }
199 else if (
isSigInput(sig, &i) ) { fout <<
"INPUT_" << i; }
200 else if (
isSigOutput(sig, &i, x) ) { fout <<
"OUTPUT_" << i; }
204 else if (
isSigPrefix(sig, x, y) ) { fout <<
"prefix"; }
205 else if (
isSigIota(sig, x) ) { fout <<
"iota"; }
207 else if (
isSigFFun(sig, ff, largs) ) { fout <<
"ffunction:" << *ff; }
209 else if (
isSigFVar(sig, type, name, file) ) { fout << *
name; }
211 else if (
isSigTable(sig,
id, x, y) ) { fout <<
"table:" << id; }
212 else if (
isSigWRTbl(sig,
id, x, y, z) ) { fout <<
"write:" << id; }
213 else if (
isSigRDTbl(sig, x, y) ) { fout <<
"read"; }
217 else if (
isSigSelect2(sig, sel, x, y) ) { fout <<
"select2"; }
218 else if (
isSigSelect3(sig, sel, x, y, z) ) { fout <<
"select3"; }
220 else if (
isSigGen(sig, x) ) { fout <<
"generator"; }
222 else if (
isProj(sig, &i, x) ) { fout <<
"Proj" << i; }
223 else if (
isRec(sig, var, le) ) { fout <<
"REC " << *var; }
228 else if (
isSigButton(sig, label) ) { fout <<
"button \"" << *label <<
'"'; }
229 else if (
isSigCheckbox(sig, label) ) { fout <<
"checkbox \"" << *label <<
'"'; }
230 else if (
isSigVSlider(sig, label,c,x,y,z) ) { fout <<
"vslider \"" << *label <<
'"'; }
231 else if (
isSigHSlider(sig, label,c,x,y,z) ) { fout <<
"hslider \"" << *label <<
'"'; }
232 else if (
isSigNumEntry(sig, label,c,x,y,z) ) { fout <<
"nentry \"" << *label <<
'"'; }
234 else if (
isSigVBargraph(sig, label,x,y,z) ) { fout <<
"vbargraph \"" << *label <<
'"'; }
235 else if (
isSigHBargraph(sig, label,x,y,z) ) { fout <<
"hbargraph \"" << *label <<
'"'; }
237 else if (
isSigButton(sig, label) ) { fout <<
"button"; }
238 else if (
isSigCheckbox(sig, label) ) { fout <<
"checkbox"; }
239 else if (
isSigVSlider(sig, label,c,x,y,z) ) { fout <<
"vslider"; }
240 else if (
isSigHSlider(sig, label,c,x,y,z) ) { fout <<
"hslider"; }
241 else if (
isSigNumEntry(sig, label,c,x,y,z) ) { fout <<
"nentry"; }
243 else if (
isSigVBargraph(sig, label,x,y,z) ) { fout <<
"vbargraph"; }
244 else if (
isSigHBargraph(sig, label,x,y,z) ) { fout <<
"hbargraph"; }
246 else if (
isSigAttach(sig, x, y) ) { fout <<
"attach"; }
249 cerr <<
"ERROR, unrecognized signal : " << *sig << endl;
bool isSigHSlider(Tree s)
bool isSigRDTbl(Tree s, Tree &t, Tree &i)
void sigToGraph(Tree L, ofstream &fout)
Draw a list of signals as a directed graph using graphviz's dot language.
bool isSigPrefix(Tree t, Tree &t0, Tree &t1)
bool isSigCheckbox(Tree s)
bool isSigFFun(Tree s, Tree &ff, Tree &largs)
static string sigLabel(Tree sig)
return the label of a signal as a string
bool isSigNumEntry(Tree s)
bool isSigSelect2(Tree t, Tree &selector, Tree &s1, Tree &s2)
bool isSigIota(Tree t, Tree &t0)
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
bool isSigInput(Tree t, int *i)
bool isSigFixDelay(Tree t, Tree &t0, Tree &t1)
bool isSigVBargraph(Tree s)
bool isSigSelect3(Tree t, Tree &selector, Tree &s1, Tree &s2, Tree &s3)
bool isSigVSlider(Tree s)
static string edgeattr(Type t)
Convert a signal type into edge attributes.
bool isSigGen(Tree t, Tree &x)
static const char * binopname[]
translate signal binary operations into strings
bool isSigReal(Tree t, double *r)
bool isSigHBargraph(Tree s)
static void recdraw(Tree sig, set< Tree > &drawn, ofstream &fout)
Draw recursively a signal.
bool isSigTable(Tree t, Tree &id, Tree &n, Tree &sig)
bool isSigBinOp(Tree s, int *op, Tree &x, Tree &y)
bool isSigAttach(Tree t, Tree &t0, Tree &t1)
Type getCertifiedSigType(Tree sig)
Retrieve the type of sig and check it exists.
bool isSigWRTbl(Tree u, Tree &id, Tree &t, Tree &i, Tree &s)
const char * name(Symbol *sym)
Returns the name of a symbol.
bool isSigWaveform(Tree s)
bool isRec(Tree t, Tree &body)
is t a de Bruijn recursive tree
bool isSigInt(Tree t, int *i)
bool isSigDelay1(Tree t, Tree &t0)
bool isSigFloatCast(Tree t)
void * getUserData(Symbol *sym)
Returns user data.
bool isSigIntCast(Tree t)
static string nodeattr(Type t)
Convert a signal type into node attributes.
bool isProj(Tree t, int *i, Tree &rgroup)
API to the typing system of signals.
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.
bool isSigOutput(Tree t, int *i, Tree &t0)