Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Attributes | List of all members
FlowChart Class Reference

#include <vhdldocgen.h>

Public Types

enum  nodeTypes {
  IF_NO = 1<<1, ELSIF_NO = 1<<2, ELSE_NO = 1<<3, CASE_NO = 1<<4,
  WHEN_NO = 1<<5, EXIT_NO = 1<<6, END_NO = 1<<7, TEXT_NO = 1<<8,
  START_NO = 1<<9, ENDIF_NO = 1<<10, FOR_NO = 1<<11, WHILE_NO = 1<<12,
  END_LOOP = 1<<13, END_CASE = 1<<14, VARIABLE_NO = 1<<15, RETURN_NO = 1<<16,
  LOOP_NO = 1<<17, NEXT_NO = 1<<18, EMPTY_NO = 1<<19, COMMENT_NO = 1<<20,
  BEGIN_NO = 1<<21
}
 

Public Member Functions

 FlowChart (int typ, const char *t, const char *ex, const char *label=0)
 
 ~FlowChart ()
 

Static Public Member Functions

static void createSVG ()
 
static void startDot (FTextStream &t)
 
static void endDot (FTextStream &t)
 
static void codify (FTextStream &t, const char *str)
 
static void writeShape (FTextStream &t, const FlowChart *fl)
 
static void writeEdge (FTextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
 
static void writeEdge (FTextStream &t, const FlowChart *fl_from, const FlowChart *fl_to, int i)
 
static void writeFlowLinks (FTextStream &t)
 
static QCString getNodeName (int n)
 
static void colTextNodes ()
 
static int getNextTextLink (const FlowChart *fl, uint index)
 
static int getNextIfLink (const FlowChart *, uint)
 
static int getNextNode (int, int)
 
static int findNode (int index, int stamp, int type)
 
static int findNode (int index, int type)
 
static int findNextLoop (int j, int stamp)
 
static int findPrevLoop (int j, int stamp, bool endif=FALSE)
 
static int findLabel (int j, QCString &)
 
static void delFlowList ()
 
static const char * getNodeType (int c)
 
static void addFlowChart (int type, const char *text, const char *exp, const char *label=NULL)
 
static void moveToPrevLevel ()
 
static int getTimeStamp ()
 
static void writeFlowChart ()
 
static void alignFuncProc (QCString &q, const ArgumentList *al, bool isFunc)
 
static QCString convertNameToFileName ()
 
static void printNode (const FlowChart *n)
 
static void printFlowTree ()
 
static void buildCommentNodes (FTextStream &t)
 
static void alignCommentNode (FTextStream &t, QCString com)
 
static void printUmlTree ()
 
static QCString printPlantUmlNode (const FlowChart *flo, bool, bool)
 

Static Public Attributes

static QList< FlowChartflowList
 

Private Attributes

int id
 
int stamp
 
int type
 
int line
 
QCString label
 
QCString text
 
QCString exp
 

Detailed Description

Definition at line 267 of file vhdldocgen.h.

Member Enumeration Documentation

Enumerator
IF_NO 
ELSIF_NO 
ELSE_NO 
CASE_NO 
WHEN_NO 
EXIT_NO 
END_NO 
TEXT_NO 
START_NO 
ENDIF_NO 
FOR_NO 
WHILE_NO 
END_LOOP 
END_CASE 
VARIABLE_NO 
RETURN_NO 
LOOP_NO 
NEXT_NO 
EMPTY_NO 
COMMENT_NO 
BEGIN_NO 

Definition at line 270 of file vhdldocgen.h.

270  {
271  IF_NO = 1<<1,
272  ELSIF_NO = 1<<2,
273  ELSE_NO = 1<<3,
274  CASE_NO = 1<<4,
275  WHEN_NO = 1<<5,
276  EXIT_NO = 1<<6,
277  END_NO = 1<<7,
278  TEXT_NO = 1<<8,
279  START_NO = 1<<9,
280  ENDIF_NO = 1<<10,
281  FOR_NO = 1<<11,
282  WHILE_NO = 1<<12,
283  END_LOOP = 1<<13,
284  END_CASE = 1<<14,
285  VARIABLE_NO = 1<<15,
286  RETURN_NO = 1<<16,
287  LOOP_NO = 1<<17,
288  NEXT_NO = 1<<18,
289  EMPTY_NO = 1<<19,
290  COMMENT_NO = 1<<20,
291  BEGIN_NO = 1<<21
292  };

Constructor & Destructor Documentation

FlowChart::FlowChart ( int  typ,
const char *  t,
const char *  ex,
const char *  label = 0 
)

Definition at line 3787 of file vhdldocgen.cpp.

3788 {
3789  stamp=ifcounter;
3790 
3791  if (typ & STARTL)
3792  {
3793  ifcounter++;
3794  }
3795 
3796  text=t;
3797  exp=ex;
3798  type=typ;
3799  label=lab;
3800 
3801  if (typ & (ELSE_NO | ELSIF_NO))
3802  {
3803  stamp--;
3804  }
3805 
3806  if (typ & (START_NO | END_NO | VARIABLE_NO))
3807  {
3808  stamp=0;
3809  }
3810 
3811  id=nodeCounter++;
3812 }
static int nodeCounter
QCString label
Definition: vhdldocgen.h:344
static int ifcounter
QCString exp
Definition: vhdldocgen.h:346
QCString text
Definition: vhdldocgen.h:345
#define STARTL
FlowChart::~FlowChart ( )

Definition at line 3783 of file vhdldocgen.cpp.

3784 {
3785 }

Member Function Documentation

void FlowChart::addFlowChart ( int  type,
const char *  text,
const char *  exp,
const char *  label = NULL 
)
static

Definition at line 3814 of file vhdldocgen.cpp.

3815 {
3816  static QRegExp reg("[;]");
3817  static QRegExp reg1("[\"]");
3818 
3819  if (!VhdlDocGen::getFlowMember()) return;
3820 
3821  QCString typeString(text);
3822  QCString expression(exp);
3823 
3824 
3825  if (text)
3826  {
3827  typeString=typeString.replace(reg,"\n");
3828  }
3829 
3830  if (exp)
3831  {
3832  expression=expression.replace(reg1,"\\\"");
3833  }
3834 
3835  FlowChart *fl=new FlowChart(type,typeString.data(),expression.data(),label);
3836 
3838 
3839  if (type & (START_NO | VARIABLE_NO))
3840  {
3841  flowList.prepend(fl);
3842  }
3843  else
3844  {
3845  flowList.append(fl);
3846  }
3847 }
The QRegExp class provides pattern matching using regular expressions or wildcards.
Definition: qregexp.h:46
QCString label
Definition: vhdldocgen.h:344
void append(const type *d)
Definition: qlist.h:73
QCString exp
Definition: vhdldocgen.h:346
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:95
FlowChart(int typ, const char *t, const char *ex, const char *label=0)
QCString text
Definition: vhdldocgen.h:345
void prepend(const type *d)
Definition: qlist.h:72
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
cet::registry_via_id< success_t, val > reg
void FlowChart::alignCommentNode ( FTextStream t,
QCString  com 
)
static

Definition at line 3642 of file vhdldocgen.cpp.

3643 {
3644  uint max=0;
3645  QCString s;
3646  QStringList ql=QStringList::split("\n",com);
3647  for (uint j=0;j<ql.count();j++)
3648  {
3649  s=(QCString)ql[j].utf8();
3650  if (max<s.length()) max=s.length();
3651  }
3652 
3653  s=ql.last().utf8();
3654  int diff=max-s.length();
3655 
3656  QCString n(1);
3657  if (diff>0)
3658  {
3659  n.fill(' ',2*diff);
3660  n.append(".");
3661  s+=n;
3662  ql.remove(ql.last());
3663  ql.append(s);
3664  }
3665 
3666  for (uint j=0;j<ql.count();j++)
3667  {
3668  s=(QCString)ql[j].utf8();
3669  if (j<ql.count()-1)
3670  {
3671  s+="\n";
3672  }
3673  FlowChart::codify(t,s.data());
3674  }
3675 }
Iterator append(const T &x)
Definition: qvaluelist.h:372
uint length() const
Definition: qcstring.h:195
static void codify(FTextStream &t, const char *str)
T & last()
Definition: qvaluelist.h:380
uint count() const
Definition: qvaluelist.h:394
A list of strings.
Definition: qstringlist.h:51
std::void_t< T > n
const char * data() const
Definition: qcstring.h:207
static int max(int a, int b)
Iterator remove(Iterator it)
Definition: qvaluelist.h:375
QCString utf8() const
Definition: qstring.cpp:14507
static QStringList split(const QString &sep, const QString &str, bool allowEmptyEntries=FALSE)
unsigned uint
Definition: qglobal.h:351
static QCString * s
Definition: config.cpp:1042
void FlowChart::alignFuncProc ( QCString q,
const ArgumentList al,
bool  isFunc 
)
static

Definition at line 4220 of file vhdldocgen.cpp.

4221 {
4222  if (al==0) return;
4223 
4224  ArgumentListIterator ali(*al);
4225  int index=ali.count();
4226  if (index==0) return;
4227 
4228  int len=q.length()+VhdlDocGen::getFlowMember()->name().length();
4229  QCString prev,temp;
4230  prev.fill(' ',len+1);
4231 
4232  Argument *arg;
4233  q+="\n";
4234  for (;(arg=ali.current());++ali)
4235  {
4236  QCString attl=arg->defval+" ";
4237  attl+=arg->name+" ";
4238 
4239  if (!isFunc)
4240  {
4241  attl+=arg->attrib+" ";
4242  }
4243  else
4244  {
4245  attl+=" in ";
4246  }
4247  attl+=arg->type;
4248  if (--index) attl+=",\n"; else attl+="\n";
4249 
4250  attl.prepend(prev.data());
4251  temp+=attl;
4252  }
4253 
4254  q+=temp;
4255 }
QCString type
Definition: arguments.h:67
uint length() const
Definition: qcstring.h:195
QCString defval
Definition: arguments.h:71
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:95
This class contains the information about the argument of a function or template. ...
Definition: arguments.h:28
const QCString & name() const
Definition: definition.h:114
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
const char * data() const
Definition: qcstring.h:207
QCString attrib
Definition: arguments.h:66
QCString name
Definition: arguments.h:69
bool fill(char c, int len=-1)
Definition: qcstring.h:243
void FlowChart::buildCommentNodes ( FTextStream t)
static

Definition at line 3678 of file vhdldocgen.cpp.

3679 {
3680  uint size=flowList.count();
3681  bool begin=false;
3682 
3683  for (uint j=0;j < size-1 ;j++)
3684  {
3685  FlowChart *fll=flowList.at(j);
3686  if (fll->type & COMMENT_NO)
3687  {
3688  FlowChart* to=flowList.at(j+1);
3689  if (to->type & COMMENT_NO)
3690  {
3691  fll->label+="\n";
3692  QCString temp=fll->label+to->label;
3693  to->label=temp;
3694  flowList.remove(j);
3695  size--;
3696  if (j>0) j--;
3697  }
3698  }
3699  }// for
3700 
3701  for (uint j=0;j <flowList.count() ;j++)
3702  {
3703  FlowChart *fll=flowList.at(j);
3704 
3705  if (fll->type & BEGIN_NO)
3706  {
3707  begin = true;
3708  continue;
3709  }
3710 
3711  if (fll->type & COMMENT_NO)
3712  {
3713  FlowChart* to;
3714  if (!begin)
3715  {
3716  // comment between function/process .. begin is linked to start node
3717  to=flowList.at(0);
3718  }
3719  else
3720  {
3721  if (j>0 && flowList.at(j-1)->line==fll->line)
3722  to=flowList.at(j-1);
3723  else
3724  to=flowList.at(j+1);
3725  }
3726  t << getNodeName(fll->id);
3727  t << "[shape=none, label=<\n";
3728  t << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3729  t << "<TR><TD BGCOLOR=\"";
3730  t << flowCol.comment;
3731  t << "\" > ";
3732 
3734  t << " </TD></TR></TABLE>>];";
3735  writeEdge(t,fll->id,to->id,2);
3736  }
3737  }// for
3738 
3739  // delete comment nodes;
3740  size=flowList.count();
3741  for (uint j=0;j < size;j++)
3742  {
3743  FlowChart *fll=flowList.at(j);
3744  if (fll->type & (COMMENT_NO | BEGIN_NO))
3745  {
3746  int diff=FLOWLEN-(j+1);
3747  flowList.remove(j);
3748 
3749  if ((fll->type & COMMENT_NO) && diff > 1)
3750  flowList.at(j+1)->label=fll->label;
3751 
3752  delete fll;
3753  fll=0;
3754  size--;
3755  if (j>0) j--;
3756  }
3757  }// for;
3758 }
QCString label
Definition: vhdldocgen.h:344
static void alignCommentNode(FTextStream &t, QCString com)
static struct @11 flowCol
static void writeEdge(FTextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
type * at(uint i) const
Definition: qlist.h:94
static QCString getNodeName(int n)
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
#define FLOWLEN
uint count() const
Definition: qlist.h:66
decltype(auto) constexpr begin(T &&obj)
ADL-aware version of std::begin.
Definition: StdUtils.h:72
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
bool remove(uint i)
Definition: qlist.h:76
unsigned uint
Definition: qglobal.h:351
void FlowChart::codify ( FTextStream t,
const char *  str 
)
static

Definition at line 3760 of file vhdldocgen.cpp.

3761 {
3762  if (str)
3763  {
3764  const char *p=str;
3765  char c;
3766  while (*p)
3767  {
3768  c=*p++;
3769  switch(c)
3770  {
3771  case '<': t << "&lt;"; break;
3772  case '>': t << "&gt;"; break;
3773  case '&': t << "&amp;"; break;
3774  case '\'': t << "&#39;"; break;
3775  case '"': t << "&quot;"; break;
3776  case '\n': t <<"<BR ALIGN=\"LEFT\"/>"; break;
3777  default: t << c; break;
3778  }
3779  }
3780  }
3781 }//codify
p
Definition: test.py:223
static QCString str
void FlowChart::colTextNodes ( )
static

Definition at line 3574 of file vhdldocgen.cpp.

3575 {
3576  QCString text;
3577  FlowChart *flno;
3578  bool found=FALSE;
3579  for (uint j=0;j<flowList.count();j++)
3580  {
3581  FlowChart *flo=flowList.at(j);
3582  if (flo->type&TEXT_NO)
3583  {
3584  text+=flo->text+'\n';
3585  if (!found)
3586  {
3587  flno=flo;
3588  }
3589  if (found)
3590  {
3591  flno->text+=flo->text;
3592  flowList.remove(flo);
3593  if (j>0) j=j-1;
3594  }
3595  found=TRUE;
3596  }
3597  else
3598  found=FALSE;
3599  }
3600 
3601  // find if..endif without text
3602  // if..elseif without text
3603  for (uint j=0;j<flowList.count()-1;j++)
3604  {
3605  FlowChart *flo=flowList.at(j);
3606  int kind=flo->type;
3607  if ( (kind & IFF) || (flo->type & ELSE_NO))
3608  {
3609  FlowChart *ftemp=flowList.at(j+1);
3610  if (ftemp->type & EMPTY)
3611  {
3612  FlowChart *fNew = new FlowChart(TEXT_NO,"empty ",0);
3613  fNew->stamp=flo->stamp;
3614  flowList.insert(j+1,fNew);
3615  }
3616  }
3617  }
3618 
3619 }// colTextNode
const bool FALSE
Definition: qglobal.h:370
type * at(uint i) const
Definition: qlist.h:94
FlowChart(int typ, const char *t, const char *ex, const char *label=0)
bool insert(uint i, const type *d)
Definition: qlist.h:70
uint count() const
Definition: qlist.h:66
#define IFF
#define EMPTY
QCString text
Definition: vhdldocgen.h:345
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
bool remove(uint i)
Definition: qlist.h:76
unsigned uint
Definition: qglobal.h:351
const bool TRUE
Definition: qglobal.h:371
QCString FlowChart::convertNameToFileName ( )
static

Definition at line 3938 of file vhdldocgen.cpp.

3939 {
3940  static QRegExp exp ("[^][a-z_A-Z0-9]");
3941  QCString temp,qcs;
3943 
3944  // temp.sprintf("%p",md);
3945  qcs=md->name();
3946 
3947  #if 0
3948  if (qcs.find(exp,0)>=0)
3949  {
3950  qcs.prepend("Z");
3951  qcs=qcs.replace(exp,"_");
3952  }
3953  #endif
3954 
3955  //QCString tt= qcs;VhdlDocGen::getRecordNumber();
3956  return qcs;
3957 }
The QRegExp class provides pattern matching using regular expressions or wildcards.
Definition: qregexp.h:46
QCString exp
Definition: vhdldocgen.h:346
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:95
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:41
const QCString & name() const
Definition: definition.h:114
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
QCString & replace(uint index, uint len, const char *s)
Definition: qcstring.cpp:411
void FlowChart::createSVG ( )
static

Definition at line 3988 of file vhdldocgen.cpp.

3989 {
3990  QCString qcs("/");
3991  QCString ov = Config_getString("HTML_OUTPUT");
3992 
3993  qcs+=FlowChart::convertNameToFileName()+".svg";
3994 
3995  //const MemberDef *m=VhdlDocGen::getFlowMember();
3996  //if (m)
3997  // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",VhdlDocGen::trTypeString(m->getMemberSpecifiers()),m->name().data(),m->getFileDef()->name().data());
3998 
3999  QCString dir=" -o "+ov+qcs;
4000  ov+="/flow_design.dot";
4001 
4002  QCString vlargs="-Tsvg "+ov+dir ;
4003 
4004  if (portable_system("dot",vlargs)!=0)
4005  {
4006  err("could not create dot file");
4007  }
4008 }
static QCString convertNameToFileName()
string dir
#define Config_getString(val)
Definition: config.cpp:660
void err(const char *fmt,...)
Definition: message.cpp:226
int portable_system(const char *command, const char *args, bool commandHasConsole)
Definition: portable.cpp:33
void FlowChart::delFlowList ( )
static

Definition at line 3628 of file vhdldocgen.cpp.

3629 {
3630  ifcounter=0;
3631  nodeCounter=0;
3632  uint size=flowList.count();
3633 
3634  for (uint j=0;j <size ;j++)
3635  {
3636  FlowChart *fll=flowList.at(j);
3637  delete fll;
3638  }
3639  flowList.clear();
3640 }
static int nodeCounter
static int ifcounter
type * at(uint i) const
Definition: qlist.h:94
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
uint count() const
Definition: qlist.h:66
void clear()
Definition: qlist.h:82
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
void FlowChart::endDot ( FTextStream t)
static

Definition at line 4018 of file vhdldocgen.cpp.

4019 {
4020  t << " } \n";
4021 }
int FlowChart::findLabel ( int  j,
QCString label 
)
static

Definition at line 4297 of file vhdldocgen.cpp.

4298 {
4299  for (uint j=index;j>0;j--)
4300  {
4301  FlowChart *flo=flowList.at(j);
4302  if ((flo->type & LOOP) && !flo->label.isEmpty() && qstricmp(flo->label,label)==0)
4303  {
4304  return j;
4305  }
4306  }
4307  err("could not find label: ",label.data());
4308  return 0;
4309 }
bool isEmpty() const
Definition: qcstring.h:189
QCString label
Definition: vhdldocgen.h:344
type * at(uint i) const
Definition: qlist.h:94
int qstricmp(const char *str1, const char *str2)
Definition: qcstring.cpp:567
const char * data() const
Definition: qcstring.h:207
void err(const char *fmt,...)
Definition: message.cpp:226
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
#define LOOP
int FlowChart::findNextLoop ( int  j,
int  stamp 
)
static

Definition at line 4257 of file vhdldocgen.cpp.

4258 {
4259  for (uint j=index+1;j<flowList.count();j++)
4260  {
4261  FlowChart *flo=flowList.at(j);
4262  if (flo->stamp==stamp)
4263  {
4264  continue;
4265  }
4266  if (flo->type&END_LOOP)
4267  {
4268  return j;
4269  }
4270  }
4271  return flowList.count()-1;
4272 }
type * at(uint i) const
Definition: qlist.h:94
uint count() const
Definition: qlist.h:66
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
int FlowChart::findNode ( int  index,
int  stamp,
int  type 
)
static

Definition at line 4311 of file vhdldocgen.cpp.

4312 {
4313  for (uint j=index+1;j<flowList.count();j++)
4314  {
4315  FlowChart *flo=flowList.at(j);
4316  if (flo->type==type && flo->stamp==stamp)
4317  {
4318  return j;
4319  }
4320  }
4321  return 0;
4322 }// findNode
type * at(uint i) const
Definition: qlist.h:94
uint count() const
Definition: qlist.h:66
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
static int FlowChart::findNode ( int  index,
int  type 
)
static
int FlowChart::findPrevLoop ( int  j,
int  stamp,
bool  endif = FALSE 
)
static

Definition at line 4274 of file vhdldocgen.cpp.

4275 {
4276  for (uint j=index;j>0;j--)
4277  {
4278  FlowChart *flo=flowList.at(j);
4279  if (flo->type & LOOP)
4280  {
4281  if (flo->stamp==stamp && endif)
4282  {
4283  return j;
4284  }
4285  else
4286  {
4287  if (flo->stamp<stamp)
4288  {
4289  return j;
4290  }
4291  }
4292  }
4293  }
4294  return flowList.count()-1;
4295 }
type * at(uint i) const
Definition: qlist.h:94
uint count() const
Definition: qlist.h:66
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
#define LOOP
int FlowChart::getNextIfLink ( const FlowChart fl,
uint  index 
)
static

Definition at line 4365 of file vhdldocgen.cpp.

4366 {
4367  int stamp=fl->stamp;
4368  uint start = index+1;
4369  int endifNode = findNode(start,stamp,ENDIF_NO);
4370  int elseifNode = findNode(start,stamp,ELSIF_NO);
4371  int elseNode = findNode(start,stamp,ELSE_NO);
4372 
4373  assert(endifNode>-1);
4374 
4375  if (elseifNode>0 && elseifNode<endifNode)
4376  {
4377  return elseifNode;
4378  }
4379 
4380  if (elseNode>0 && elseNode<endifNode)
4381  {
4382  return elseNode+1;
4383  }
4384 
4385  stamp=flowList.at(endifNode)->stamp;
4386  return getNextNode(endifNode,stamp);
4387 }
static int findNode(int index, int stamp, int type)
type * at(uint i) const
Definition: qlist.h:94
static int getNextNode(int, int)
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
int FlowChart::getNextNode ( int  index,
int  stamp 
)
static

Definition at line 4324 of file vhdldocgen.cpp.

4325 {
4326  for (uint j=index+1;j<flowList.count();j++)
4327  {
4328  FlowChart *flo=flowList.at(j);
4329  int kind=flo->type;
4330  int s=flo->stamp;
4331  if (s>stamp)
4332  {
4333  continue;
4334  }
4335  if (kind & ENDIF_NO)
4336  {
4337  if (s<stamp && stamp>0)
4338  {
4339  stamp--;
4340  continue;
4341  }
4342  }
4343  if (kind & (ELSE_NO | ELSIF_NO))
4344  {
4345  if (s<stamp && stamp>0)
4346  {
4347  stamp--;
4348  }
4349  j=findNode(j,stamp,ENDIF_NO);
4350  continue;
4351  }
4352  if (kind & WHEN_NO)
4353  {
4354  if (s<stamp && stamp>0)
4355  {
4356  stamp--;
4357  }
4358  return findNode(j,stamp-1,END_CASE);
4359  }
4360  return j;
4361  }
4362  return FLOWLEN;
4363 }
static int findNode(int index, int stamp, int type)
type * at(uint i) const
Definition: qlist.h:94
#define FLOWLEN
uint count() const
Definition: qlist.h:66
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
static QCString * s
Definition: config.cpp:1042
static int FlowChart::getNextTextLink ( const FlowChart fl,
uint  index 
)
static
QCString FlowChart::getNodeName ( int  n)
static

Definition at line 3621 of file vhdldocgen.cpp.

3622 {
3623  QCString node;
3624  node.setNum(n);
3625  return node.prepend("node");
3626 }
std::void_t< T > n
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
QCString & setNum(short n)
Definition: qcstring.cpp:469
const char * FlowChart::getNodeType ( int  c)
static

Definition at line 3959 of file vhdldocgen.cpp.

3960 {
3961  switch(c)
3962  {
3963  case IF_NO: return "if ";
3964  case ELSIF_NO: return "elsif ";
3965  case ELSE_NO: return "else ";
3966  case CASE_NO: return "case ";
3967  case WHEN_NO: return "when ";
3968  case EXIT_NO: return "exit ";
3969  case END_NO: return "end ";
3970  case TEXT_NO: return "text ";
3971  case START_NO: return "start ";
3972  case ENDIF_NO: return "endif ";
3973  case FOR_NO: return "for ";
3974  case WHILE_NO: return "while ";
3975  case END_LOOP: return "end_loop ";
3976  case END_CASE: return "end_case ";
3977  case VARIABLE_NO: return "variable_decl ";
3978  case RETURN_NO: return "return ";
3979  case LOOP_NO: return "infinite loop ";
3980  case NEXT_NO: return "next ";
3981  case COMMENT_NO: return "comment ";
3982  case EMPTY_NO: return "empty ";
3983  case BEGIN_NO: return "<begin> ";
3984  default: return "--failure--";
3985  }
3986 }
static int FlowChart::getTimeStamp ( )
static
void FlowChart::moveToPrevLevel ( )
static

Definition at line 3849 of file vhdldocgen.cpp.

3850 {
3851  if (!VhdlDocGen::getFlowMember()) return;
3852  ifcounter--;
3853 }
static int ifcounter
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:95
void FlowChart::printFlowTree ( )
static

Definition at line 3565 of file vhdldocgen.cpp.

3566 {
3567  uint size=flowList.count();
3568  for (uint j=0;j<size;j++)
3569  {
3570  printNode(flowList.at(j));
3571  }
3572 }
type * at(uint i) const
Definition: qlist.h:94
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
uint count() const
Definition: qlist.h:66
static void printNode(const FlowChart *n)
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
void FlowChart::printNode ( const FlowChart n)
static

Definition at line 3505 of file vhdldocgen.cpp.

3506 {
3507  if (flo==0) return;
3508  QCString ui="-";
3509  QCString q,t;
3510  QRegExp ep("[\t\n\r]");
3511 
3512  ui.fill('-',255);
3513 
3514  if (flo->type & STARTL)
3515  {
3516  if (flo->stamp>0)
3517  {
3518  q=ui.left(2*flo->stamp);
3519  }
3520  else
3521  {
3522  q=" ";
3523  }
3524  QCString nn=flo->exp.stripWhiteSpace();
3525  printf("\nYES: %s%s[%d,%d]",q.data(),nn.data(),flo->stamp,flo->id);
3526  }
3527  else
3528  {
3529  if (flo->type & COMMENT_NO)
3530  {
3531  t=flo->label;
3532  }
3533  else
3534  {
3535  t=flo->text;
3536  }
3537  t=t.replace(ep,"");
3538  if (t.isEmpty())
3539  {
3540  t=" ";
3541  }
3542  if (flo->stamp>0)
3543  {
3544  q=ui.left(2*flo->stamp);
3545  }
3546  else
3547  {
3548  q=" ";
3549  }
3550  if (flo->type & EMPTNODE)
3551  {
3552  printf("\n NO: %s%s[%d,%d]",q.data(),FlowChart::getNodeType(flo->type),flo->stamp,flo->id);
3553  }
3554  else if (flo->type & COMMENT_NO)
3555  {
3556  printf("\n NO: %s%s[%d,%d]",t.data(),FlowChart::getNodeType(flo->type),flo->stamp,flo->id);
3557  }
3558  else
3559  {
3560  printf("\n NO: %s[%d,%d]",t.data(),flo->stamp,flo->id);
3561  }
3562  }
3563 }
#define EMPTNODE
QCString stripWhiteSpace() const
Definition: qcstring.cpp:295
bool isEmpty() const
Definition: qcstring.h:189
The QRegExp class provides pattern matching using regular expressions or wildcards.
Definition: qregexp.h:46
QCString left(uint len) const
Definition: qcstring.cpp:213
const char * data() const
Definition: qcstring.h:207
static const char * getNodeType(int c)
bool fill(char c, int len=-1)
Definition: qcstring.h:243
QCString & replace(uint index, uint len, const char *s)
Definition: qcstring.cpp:411
#define STARTL
QCString FlowChart::printPlantUmlNode ( const FlowChart flo,
bool  ca,
bool  endL 
)
static

Definition at line 3855 of file vhdldocgen.cpp.

3856 {
3857  QCString t;
3860  switch (flo->type)
3861  {
3862  case START_NO: t=":"+text+"|"; break;
3863  case IF_NO : t="\nif ("+exp+") then (yes)"; break;
3864  case ELSIF_NO: t="\nelseif ("+exp+") then (yes)"; break;
3865  case ELSE_NO: t="\nelse"; break;
3866  case CASE_NO: t="\n:"+exp+";"; break;
3867  case WHEN_NO: t="\n";
3868  if (!ca) t+="else";
3869  t+="if ("+exp+") then (yes)";
3870  break;
3871  case EXIT_NO: break;
3872  case END_NO: if (text.contains(" function")==0) t="\n:"+text+";";
3873  break;
3874  case TEXT_NO: t="\n:"+text+"]"; break;
3875  case ENDIF_NO: t="\nendif"; break;
3876  case FOR_NO: t="\nwhile ("+exp+") is (yes)"; break;
3877  case WHILE_NO: t="\nwhile ("+exp+") is (yes)"; break;
3878  case END_LOOP: t="\nendwhile"; break;
3879  case END_CASE: t="\nendif\n:end case;"; break;
3880  case VARIABLE_NO:t="\n:"+text+";"; break;
3881  case RETURN_NO: t="\n:"+text+";";
3882  if (!endL) t+="\nstop";
3883  break;
3884  case LOOP_NO: t="\nwhile (infinite loop)"; break;
3885  case NEXT_NO: break;
3886  case EMPTY_NO: break;
3887  case COMMENT_NO: t="\n note left \n "+flo->label+"\nend note \n"; break;
3888  case BEGIN_NO: t="\n:begin;"; break;
3889  default: assert(false); break;
3890  }
3891  return t;
3892 }
QCString stripWhiteSpace() const
Definition: qcstring.cpp:295
QCString label
Definition: vhdldocgen.h:344
int contains(char c, bool cs=TRUE) const
Definition: qcstring.cpp:153
QCString exp
Definition: vhdldocgen.h:346
QCString text
Definition: vhdldocgen.h:345
void FlowChart::printUmlTree ( )
static

Definition at line 3894 of file vhdldocgen.cpp.

3895 {
3896  int caseCounter = 0;
3897  int whenCounter = 0;
3898 
3899  QCString qcs;
3900  uint size=flowList.count();
3901  bool endList;
3902  for (uint j=0;j<size;j++)
3903  {
3904  endList=j==FLOWLEN;
3905  FlowChart *flo=flowList.at(j);
3906  if (flo->type==CASE_NO)
3907  {
3908  caseCounter++;
3909  whenCounter=0;
3910  }
3911 
3912  if (flo->type==END_CASE)
3913  {
3914  caseCounter--;
3915  }
3916 
3917  bool ca = (caseCounter>0 && whenCounter==0);
3918 
3919  qcs+=printPlantUmlNode(flo,ca,endList);
3920 
3921  if (flo->type==WHEN_NO)
3922  {
3923  whenCounter++;
3924  }
3925 
3926  }
3927  qcs+="\n";
3928 
3929  QCString & outDir = Config_getString("OUTPUT_DIRECTORY");
3930  QCString & htmlOutDir = Config_getString("HTML_OUTPUT");
3931 
3933  QCString tmp=htmlOutDir;
3934  n=writePlantUMLSource(tmp,n,qcs);
3936 }
static QCString convertNameToFileName()
QCString writePlantUMLSource(const QCString &outDir, const QCString &fileName, const QCString &content)
Definition: plantuml.cpp:25
type * at(uint i) const
Definition: qlist.h:94
static QCString printPlantUmlNode(const FlowChart *flo, bool, bool)
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
#define FLOWLEN
uint count() const
Definition: qlist.h:66
std::void_t< T > n
const char * data() const
Definition: qcstring.h:207
#define Config_getString(val)
Definition: config.cpp:660
string tmp
Definition: languages.py:63
void generatePlantUMLOutput(const char *baseName, const char *outDir, PlantUMLOutputFormat format)
Definition: plantuml.cpp:54
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
void FlowChart::startDot ( FTextStream t)
static

Definition at line 4010 of file vhdldocgen.cpp.

4011 {
4012  t << " digraph G { \n";
4013  t << "rankdir=TB \n";
4014  t << "concentrate=true\n";
4015  t << "stylesheet=\"doxygen.css\"\n";
4016 }
void FlowChart::writeEdge ( FTextStream t,
int  fl_from,
int  fl_to,
int  i,
bool  bFrom = FALSE,
bool  bTo = FALSE 
)
static

Definition at line 4191 of file vhdldocgen.cpp.

4192 {
4193  QCString label,col;
4194 
4195  if (i==0)
4196  {
4197  col=flowCol.yesNodeLink;
4198  label="yes";
4199  }
4200  else if (i==1)
4201  {
4202  col=flowCol.noNodeLink;
4203  label="no";
4204  }
4205  else
4206  {
4207  col=flowCol.textNodeLink;
4208  label="";
4209  }
4210 
4211  t << "edge [color=\""+col+"\",label=\""+label+"\"]\n";
4212  t << getNodeName(fl_from).data();
4213  if (bFrom) t << ":s";
4214  t << "->";
4215  t << getNodeName(fl_to).data();
4216  if (bTo) t << ":n";
4217  t << "\n";
4218 }
QCString label
Definition: vhdldocgen.h:344
static struct @11 flowCol
static QCString getNodeName(int n)
const char * data() const
Definition: qcstring.h:207
void FlowChart::writeEdge ( FTextStream t,
const FlowChart fl_from,
const FlowChart fl_to,
int  i 
)
static

Definition at line 4173 of file vhdldocgen.cpp.

4174 {
4175  bool b=fl_from->type & STARTL;
4176  bool c=fl_to->type & STARTL;
4177 
4178 #ifdef DEBUGFLOW
4179  QCString s1(getNodeName(fl_from->id).data());
4180  QCString s2(getNodeName(fl_to->id).data());
4181  QMap<QCString, int>::Iterator it = keyMap.find(s1);
4182  QMap<QCString, int>::Iterator it1 = keyMap.find(s2);
4183  // checks if the link is connected to a valid node
4184  assert(it.key());
4185  assert(it1.key());
4186 #endif
4187 
4188  writeEdge(t,fl_from->id,fl_to->id,i,b,c);
4189 }
static void writeEdge(FTextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
static QCString getNodeName(int n)
const char * data() const
Definition: qcstring.h:207
const K & key() const
Definition: qmap.h:114
static bool * b
Definition: config.cpp:1043
#define STARTL
void FlowChart::writeFlowChart ( )
static

Definition at line 4023 of file vhdldocgen.cpp.

4024 {
4025  // assert(VhdlDocGen::flowMember);
4026 
4027  QCString ov = Config_getString("HTML_OUTPUT");
4028  QCString fileName = ov+"/flow_design.dot";
4029  QFile f(fileName);
4030  FTextStream t(&f);
4031 
4032  if (!f.open(IO_WriteOnly))
4033  {
4034  err("Cannot open file %s for writing\n",fileName.data());
4035  return;
4036  }
4037 
4038  colTextNodes();
4039  // buildCommentNodes(t);
4040 
4041 #ifdef DEBUGFLOW
4042  printFlowTree();
4043 #endif
4045 
4046  if (p->isStatic())
4047  {
4048  printUmlTree();
4049  delFlowList();
4050  f.close();
4051  return;
4052  }
4053 
4054  startDot(t);
4056  uint size=flowList.count();
4057 
4058  for (uint j=0;j <size ;j++)
4059  {
4060  FlowChart *fll=flowList.at(j);
4061  writeShape(t,fll);
4062  }
4063  writeFlowLinks(t);
4064 
4066  delFlowList();
4067  f.close();
4069 }// writeFlowChart
#define IO_WriteOnly
Definition: qiodevice.h:62
static void buildCommentNodes(FTextStream &t)
static void writeFlowLinks(FTextStream &t)
static void endDot(FTextStream &t)
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:95
type * at(uint i) const
Definition: qlist.h:94
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:11
static void startDot(FTextStream &t)
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
uint count() const
Definition: qlist.h:66
static void createSVG()
fileName
Definition: dumpTree.py:9
static void delFlowList()
p
Definition: test.py:223
const char * data() const
Definition: qcstring.h:207
#define Config_getString(val)
Definition: config.cpp:660
void err(const char *fmt,...)
Definition: message.cpp:226
The QFile class is an I/O device that operates on files.
Definition: qfile.h:50
static void printFlowTree()
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
bool isStatic() const
Definition: memberdef.cpp:4205
unsigned uint
Definition: qglobal.h:351
static void writeShape(FTextStream &t, const FlowChart *fl)
static void printUmlTree()
static void colTextNodes()
void FlowChart::writeFlowLinks ( FTextStream t)
static

Definition at line 4389 of file vhdldocgen.cpp.

4390 {
4391  uint size=flowList.count();
4392  if (size<2) return;
4393 
4394  // write start link
4395  writeEdge(t,flowList.at(0),flowList.at(1),2);
4396 
4397  for (uint j=0;j<size;j++)
4398  {
4399  FlowChart *fll=flowList.at(j);
4400  int kind=fll->type;
4401  int stamp=fll->stamp;
4402  if (kind & EEND)
4403  {
4404  continue;
4405  }
4406 
4407  if (kind & IFF)
4408  {
4409  writeEdge(t,fll,flowList.at(j+1),0);
4410  int z=getNextIfLink(fll,j);
4411  // assert(z>-1);
4412  writeEdge(t,fll,flowList.at(z),1);
4413  }
4414  else if (kind & LOOP_NO)
4415  {
4416  writeEdge(t,fll,flowList.at(j+1),2);
4417  continue;
4418  }
4419  else if (kind & (CASE_NO | FOR_NO | WHILE_NO))
4420  {
4421  if (kind & CASE_NO)
4422  {
4423  writeEdge(t,fll,flowList.at(j+1),2);
4424  continue;
4425  }
4426  else
4427  {
4428  writeEdge(t,fll,flowList.at(j+1),0);
4429  }
4430 
4431  kind=END_LOOP;
4432  int z=findNode(j+1,fll->stamp,kind);
4433  z=getNextNode(z,flowList.at(z)->stamp);
4434 
4435  // assert(z>-1);
4436  writeEdge(t,fll,flowList.at(z),1);
4437  continue;
4438  }
4439  else if (kind & (TEXT_NO | VARIABLE_NO))
4440  {
4441  int z=getNextNode(j,stamp);
4442  writeEdge(t,fll,flowList.at(z),2);
4443  }
4444  else if (kind & WHEN_NO)
4445  {
4446  // default value
4447  if (qstricmp(fll->text.simplifyWhiteSpace().data(),"others")==0)
4448  {
4449  writeEdge(t,fll,flowList.at(j+1),2);
4450  continue;
4451  }
4452 
4453 
4454  writeEdge(t,fll,flowList.at(j+1),0);
4455  int u=findNode(j,stamp,WHEN_NO);
4456  int v=findNode(j,stamp-1,END_CASE);
4457 
4458  if (u>0 && u<v)
4459  {
4460  writeEdge(t,fll,flowList.at(u),1);
4461  }
4462  else
4463  {
4464  writeEdge(t,fll,flowList.at(v),1);
4465  }
4466  }
4467  else if (kind & END_CASE)
4468  {
4469  int z=FlowChart::getNextNode(j,fll->stamp);
4470  writeEdge(t,fll,flowList.at(z),2);
4471  }
4472  else if (kind & END_LOOP)
4473  {
4474  int z=findPrevLoop(j,fll->stamp,true);
4475  writeEdge(t,fll,flowList.at(z),2);
4476  }
4477  else if (kind & RETURN_NO)
4478  {
4479  writeEdge(t,fll,FlowChart::flowList.at(size-1),2);
4480  }
4481  else if (kind & (EXIT_NO | NEXT_NO))
4482  {
4483  int z;
4484  bool b = kind==NEXT_NO;
4485  if (fll->exp)
4486  {
4487  writeEdge(t,fll,flowList.at(j+1),1);
4488  }
4489  if (!fll->label.isEmpty())
4490  {
4491  z=findLabel(j,fll->label);
4492  if (b)
4493  {
4494  writeEdge(t,fll,flowList.at(z),0);
4495  }
4496  else
4497  {
4498  z=findNode(z,flowList.at(z)->stamp,END_LOOP);
4499  z=getNextNode(z,flowList.at(z)->stamp);
4500  writeEdge(t,fll,flowList.at(z),0);
4501  }
4502  continue;
4503  }
4504  else
4505  {
4506  if (b)
4507  {
4508  z=findPrevLoop(j,fll->stamp);
4509  writeEdge(t,fll,flowList.at(z),0);
4510  continue;
4511  }
4512  else
4513  {
4514  z =findNextLoop(j,fll->stamp-1);
4515  }
4516  z=getNextNode(z,flowList.at(z)->stamp);
4517  }
4518  writeEdge(t,fll,flowList.at(z),0);
4519  }
4520  } //for
4521 } //writeFlowLinks
bool isEmpty() const
Definition: qcstring.h:189
QCString label
Definition: vhdldocgen.h:344
static int findNode(int index, int stamp, int type)
static int getNextIfLink(const FlowChart *, uint)
QCString exp
Definition: vhdldocgen.h:346
static void writeEdge(FTextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
type * at(uint i) const
Definition: qlist.h:94
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
uint count() const
Definition: qlist.h:66
int qstricmp(const char *str1, const char *str2)
Definition: qcstring.cpp:567
static int getNextNode(int, int)
static int findNextLoop(int j, int stamp)
const char * data() const
Definition: qcstring.h:207
static int findPrevLoop(int j, int stamp, bool endif=FALSE)
#define IFF
#define EEND
QCString text
Definition: vhdldocgen.h:345
static bool * b
Definition: config.cpp:1043
static int findLabel(int j, QCString &)
static QList< FlowChart > flowList
Definition: vhdldocgen.h:332
unsigned uint
Definition: qglobal.h:351
QCString simplifyWhiteSpace() const
Definition: qcstring.cpp:323
void FlowChart::writeShape ( FTextStream t,
const FlowChart fl 
)
static

Definition at line 4071 of file vhdldocgen.cpp.

4072 {
4073  if (fl->type & EEND) return;
4074  QCString var;
4075  if (fl->type & LOOP)
4076  {
4077  var=" loop";
4078  }
4079  else if (fl->type & IFF)
4080  {
4081  var=" then";
4082  }
4083  else
4084  {
4085  var="";
4086  }
4087 
4088  t<<getNodeName(fl->id).data();
4089 
4090 #ifdef DEBUGFLOW
4091  QCString qq(getNodeName(fl->id).data());
4092  keyMap.insert(qq,fl->id);
4093 #endif
4094 
4095  bool dec=(fl->type & DECLN);
4096  bool exit=(fl->type & EXITNEXT);
4097  if (exit && !fl->exp.isEmpty())
4098  {
4099  dec=TRUE;
4100  }
4101  if (dec)
4102  {
4103  QCString exp=fl->exp;
4104  alignText(exp);
4105 
4106  t << " [shape=diamond,style=filled,color=\"";
4107  t << flowCol.decisionNode;
4108  t << "\",label=\" ";
4109  QCString kl;
4110  if (exit) kl=fl->text+" ";
4111 
4112  if (fl->label)
4113  {
4114  kl+=fl->label+":"+exp+var;
4115  }
4116  else
4117  {
4118  kl+=exp+var;
4119  }
4120 
4122  t << "\"]\n";
4123  }
4124  else if (fl->type & ENDCL)
4125  {
4126  QCString val=fl->text;
4127  t << " [shape=ellipse ,label=\""+val+"\"]\n";
4128  }
4129  else if (fl->type & STARTFIN)
4130  {
4131  QCString val=fl->text;
4132  t << "[shape=box , style=rounded label=<\n";
4133  t << "<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
4134  t << "<TR><TD BGCOLOR=\"";
4135  t<< flowCol.startEndNode;
4136  t<< "\"> ";
4138  t << " </TD></TR></TABLE>>];";
4139  }
4140  else
4141  {
4142  if (fl->text.isEmpty()) return;
4143  bool var=(fl->type & FlowChart::VARIABLE_NO);
4144  QCString q=fl->text;
4145 
4146  if (exit)
4147  {
4148  q+=" "+fl->label;
4149  }
4150 
4151  int z=q.findRev("\n");
4152 
4153  if (z==(int)q.length()-1)
4154  {
4155  q=q.remove(z,2);
4156  }
4157  t << "[shape=none margin=0.1, label=<\n";
4158  t << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
4159  if (var)
4160  {
4161  t << "<TR><TD BGCOLOR=\"" << flowCol.varNode << "\" > ";
4162  }
4163  else
4164  {
4165  t << "<TR><TD BGCOLOR=\"" << flowCol.textNode << "\" > ";
4166  }
4168  t << " </TD></TR></TABLE>>];";
4169  }
4170 }
bool isEmpty() const
Definition: qcstring.h:189
QCString label
Definition: vhdldocgen.h:344
#define DECLN
static void alignCommentNode(FTextStream &t, QCString com)
uint length() const
Definition: qcstring.h:195
void alignText(QCString &q)
static struct @11 flowCol
QCString exp
Definition: vhdldocgen.h:346
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition: qcstring.cpp:95
static QCString getNodeName(int n)
const char * data() const
Definition: qcstring.h:207
QCString & insert(uint index, const char *s)
Definition: qcstring.cpp:355
#define STARTFIN
QTextStream & dec(QTextStream &s)
#define IFF
#define EEND
int var
Definition: 018_def.c:9
#define ENDCL
QCString text
Definition: vhdldocgen.h:345
#define EXITNEXT
QCString & remove(uint index, uint len)
Definition: qcstring.cpp:391
const bool TRUE
Definition: qglobal.h:371
#define LOOP

Member Data Documentation

QCString FlowChart::exp
private

Definition at line 346 of file vhdldocgen.h.

QList< FlowChart > FlowChart::flowList
static

Definition at line 332 of file vhdldocgen.h.

int FlowChart::id
private

Definition at line 338 of file vhdldocgen.h.

QCString FlowChart::label
private

Definition at line 344 of file vhdldocgen.h.

int FlowChart::line
private

Definition at line 342 of file vhdldocgen.h.

int FlowChart::stamp
private

Definition at line 339 of file vhdldocgen.h.

QCString FlowChart::text
private

Definition at line 345 of file vhdldocgen.h.

int FlowChart::type
private

Definition at line 340 of file vhdldocgen.h.


The documentation for this class was generated from the following files: