Implement complexity computation for box diagrams. More...
#include <ostream>
#include "xtended.hh"
#include "boxcomplexity.h"
Go to the source code of this file.
Defines | |
#define | BC boxComplexity |
internal shortcut to simplify computeBoxComplexity code | |
Functions | |
static int | computeBoxComplexity (Tree box) |
Compute the complexity of a box expression. | |
int | boxComplexity (Tree box) |
Return the complexity propety of a box expression tree. | |
Variables | |
Tree | BCOMPLEXITY = tree ("BCOMPLEXITY") |
property Key used to store box complexity |
Implement complexity computation for box diagrams.
Definition in file boxcomplexity.cpp.
int boxComplexity | ( | Tree | box | ) |
Return the complexity propety of a box expression tree.
Return the complexity propety of a box expression tree. If no complexity property exist, it is created an computeBoxComplexity is called do to the job.
box | an evaluated box expression tree |
Definition at line 56 of file boxcomplexity.cpp.
References computeBoxComplexity().
Referenced by drawSchema(), and generateDiagramSchema().
00057 { 00058 Tree prop = box->getProperty(BCOMPLEXITY); 00059 00060 if (prop) { 00061 return tree2int(prop); 00062 00063 } else { 00064 int v = computeBoxComplexity(box); 00065 box->setProperty(BCOMPLEXITY,tree(v)); 00066 return v; 00067 } 00068 }
int computeBoxComplexity | ( | Tree | box | ) | [static] |
Compute the complexity of a box expression.
Compute the complexity of a box expression tree according to the complexity of its subexpressions. Basically it counts the number of boxes to be drawn. The box-diagram expression is supposed to be evaluated. It will exit with an error if it is not the case.
box | an evaluated box expression tree |
Definition at line 87 of file boxcomplexity.cpp.
References BC, getUserData(), and name().
Referenced by boxComplexity().
00088 { 00089 int i; 00090 float r; 00091 prim0 p0; 00092 prim1 p1; 00093 prim2 p2; 00094 prim3 p3; 00095 prim4 p4; 00096 prim5 p5; 00097 00098 Tree t1, t2, ff, label, cur, min, max, step, type, name, file; 00099 00100 xtended* xt = (xtended*) getUserData(box); 00101 00102 00103 // simple elements 00104 if (xt) return 1; 00105 else if (isBoxInt(box, &i)) return 1; 00106 else if (isBoxReal(box, &r)) return 1; 00107 00108 else if (isBoxCut(box)) return 0; 00109 else if (isBoxWire(box)) return 0; 00110 00111 else if (isBoxPrim0(box, &p0)) return 1; 00112 else if (isBoxPrim1(box, &p1)) return 1; 00113 else if (isBoxPrim2(box, &p2)) return 1; 00114 else if (isBoxPrim3(box, &p3)) return 1; 00115 else if (isBoxPrim4(box, &p4)) return 1; 00116 else if (isBoxPrim5(box, &p5)) return 1; 00117 00118 // foreign elements 00119 else if (isBoxFFun(box, ff)) return 1; 00120 else if (isBoxFConst(box, type, name, file)) 00121 return 1; 00122 else if (isBoxFVar(box, type, name, file)) 00123 return 1; 00124 // slots and symbolic boxes 00125 else if (isBoxSlot(box, &i)) return 1; 00126 else if (isBoxSymbolic(box,t1,t2)) return 1 + BC(t2); 00127 00128 // block diagram binary operator 00129 else if (isBoxSeq(box, t1, t2)) return BC(t1) + BC(t2); 00130 else if (isBoxSplit(box, t1, t2)) return BC(t1) + BC(t2); 00131 else if (isBoxMerge(box, t1, t2)) return BC(t1) + BC(t2); 00132 else if (isBoxPar(box, t1, t2)) return BC(t1) + BC(t2); 00133 else if (isBoxRec(box, t1, t2)) return BC(t1) + BC(t2); 00134 00135 // user interface widgets 00136 else if (isBoxButton(box, label)) return 1; 00137 else if (isBoxCheckbox(box, label)) return 1; 00138 else if (isBoxVSlider(box, label, cur, min, max, step)) return 1; 00139 else if (isBoxHSlider(box, label, cur, min, max, step)) return 1; 00140 else if (isBoxHBargraph(box, label, min, max)) return 1; 00141 else if (isBoxVBargraph(box, label, min, max)) return 1; 00142 else if (isBoxNumEntry(box, label, cur, min, max, step))return 1; 00143 00144 // user interface groups 00145 else if (isBoxVGroup(box, label, t1)) return BC(t1); 00146 else if (isBoxHGroup(box, label, t1)) return BC(t1); 00147 else if (isBoxTGroup(box, label, t1)) return BC(t1); 00148 00149 //a completer 00150 else { 00151 //fout << tree2str(box); 00152 cerr << "ERROR in boxComplexity : not an evaluated box [[ " << *box << " ]]"; 00153 exit(-1); 00154 } 00155 00156 return -1; 00157 }