summaryrefslogtreecommitdiffstats
path: root/src/index.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.cpp')
-rw-r--r--src/index.cpp83
1 files changed, 76 insertions, 7 deletions
diff --git a/src/index.cpp b/src/index.cpp
index 1d3a7d1..cd93d8c 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -317,8 +317,21 @@ void endFile(OutputList &ol,bool)
static bool classHasVisibleChildren(ClassDef *cd)
{
- if (cd->subClasses()==0) return FALSE;
- BaseClassList *bcl=cd->subClasses();
+ bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+
+ BaseClassList *bcl;
+
+ if (vhdl) // reverse baseClass/subClass relation
+ {
+ if (cd->baseClasses()==0) return FALSE;
+ bcl=cd->baseClasses();
+ }
+ else
+ {
+ if (cd->subClasses()==0) return FALSE;
+ bcl=cd->subClasses();
+ }
+
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current() ; ++bcli)
{
@@ -332,13 +345,25 @@ static bool classHasVisibleChildren(ClassDef *cd)
void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv)
{
+ static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+
if (bcl==0) return;
BaseClassListIterator bcli(*bcl);
bool started=FALSE;
for ( ; bcli.current() ; ++bcli)
{
ClassDef *cd=bcli.current()->classDef;
- if (cd->isVisibleInHierarchy() && hasVisibleRoot(cd->baseClasses()))
+ bool b;
+ if (vhdl)
+ {
+ b=hasVisibleRoot(cd->subClasses());
+ }
+ else
+ {
+ b=hasVisibleRoot(cd->baseClasses());
+ }
+
+ if (cd->isVisibleInHierarchy() && b) // hasVisibleRoot(cd->baseClasses()))
{
if (!started)
{
@@ -382,7 +407,14 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,F
//printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
bool wasVisited=cd->visited;
cd->visited=TRUE;
- writeClassTree(ol,cd->subClasses(),wasVisited,level+1,ftv);
+ if (vhdl)
+ {
+ writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv);
+ }
+ else
+ {
+ writeClassTree(ol,cd->subClasses(),wasVisited,level+1,ftv);
+ }
}
ol.endIndexListItem();
}
@@ -441,6 +473,8 @@ void writeClassTree(BaseClassList *cl,int level)
void writeClassTreeNode(ClassDef *cd,bool &started,int level)
{
//printf("writeClassTreeNode(%s) visited=%d\n",cd->name().data(),cd->visited);
+ static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+
if (cd->isVisibleInHierarchy() && !cd->visited)
{
if (!started)
@@ -455,7 +489,14 @@ void writeClassTreeNode(ClassDef *cd,bool &started,int level)
}
if (hasChildren)
{
- writeClassTree(cd->subClasses(),level+1);
+ if (vhdl)
+ {
+ writeClassTree(cd->baseClasses(),level+1);
+ }
+ else
+ {
+ writeClassTree(cd->subClasses(),level+1);
+ }
}
cd->visited=TRUE;
}
@@ -495,6 +536,7 @@ void writeClassTree(ClassSDict *d,int level)
static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv)
{
+ static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
ClassSDict::Iterator cli(*cl);
for (;cli.current(); ++cli)
{
@@ -504,7 +546,22 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
// hasVisibleRoot(cd->baseClasses()),
// cd->isVisibleInHierarchy()
// );
- if (!hasVisibleRoot(cd->baseClasses())) // filter on root classes
+ bool b;
+ if (vhdl)
+ {
+ if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKAGECLASS ||
+ (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
+ {
+ continue;
+ }
+ b=!hasVisibleRoot(cd->subClasses());
+ }
+ else
+ {
+ b=!hasVisibleRoot(cd->baseClasses());
+ }
+
+ if (b) //filter on root classes
{
if (cd->isVisibleInHierarchy()) // should it be visible
{
@@ -543,7 +600,12 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
if (ftv)
ftv->addContentsItem(hasChildren,cd->displayName(),0,0,0);
}
- if (hasChildren)
+ if (vhdl && hasChildren)
+ {
+ writeClassTree(ol,cd->baseClasses(),cd->visited,1,ftv);
+ cd->visited=TRUE;
+ }
+ else if (hasChildren)
{
writeClassTree(ol,cd->subClasses(),cd->visited,1,ftv);
cd->visited=TRUE;
@@ -1073,6 +1135,13 @@ void writeAnnotatedClassList(OutputList &ol)
{
QCString type=cd->compoundTypeString();
ol.startIndexKey();
+ static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ if (vhdl)
+ {
+ QCString prot= VhdlDocGen::getProtectionName((VhdlDocGen::VhdlClasses)cd->protection());
+ ol.docify(prot.data());
+ ol.insertMemberAlign();
+ }
ol.writeObjectLink(0,cd->getOutputFileBase(),0,cd->displayName());
ol.endIndexKey();
bool hasBrief = !cd->briefDescription().isEmpty();