summaryrefslogtreecommitdiffstats
path: root/src/groupdef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/groupdef.cpp')
-rw-r--r--src/groupdef.cpp337
1 files changed, 241 insertions, 96 deletions
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 7aee5c0..993b213 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -45,7 +45,6 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
pageDict = new PageSDict(17);
exampleDict = new PageSDict(17);
dirList = new DirList;
- allMemberList = new MemberList;
allMemberNameInfoSDict = new MemberNameInfoSDict(17);
if (refFileName)
{
@@ -59,6 +58,9 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE);
+ allMemberList = new MemberList(MemberList::allMembersList);
+#if 0
+
decDefineMembers.setInGroup(TRUE);
decProtoMembers.setInGroup(TRUE);
decTypedefMembers.setInGroup(TRUE);
@@ -74,6 +76,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
docEnumValMembers.setInGroup(TRUE);
docFuncMembers.setInGroup(TRUE);
docVarMembers.setInGroup(TRUE);
+#endif
visited = 0;
groupScope = 0;
@@ -128,12 +131,24 @@ void GroupDef::findSectionsInDocumentation()
{
mg->findSectionsInDocumentation();
}
+
+ QListIterator<MemberList> mli(m_memberLists);
+ MemberList *ml;
+ for (mli.toFirst();(ml=mli.current());++mli)
+ {
+ if (ml->listType()&MemberList::declarationLists)
+ {
+ ml->findSectionsInDocumentation();
+ }
+ }
+#if 0
decDefineMembers.findSectionsInDocumentation();
decProtoMembers.findSectionsInDocumentation();
decTypedefMembers.findSectionsInDocumentation();
decEnumMembers.findSectionsInDocumentation();
decFuncMembers.findSectionsInDocumentation();
decVarMembers.findSectionsInDocumentation();
+#endif
}
void GroupDef::addFile(const FileDef *def)
@@ -183,6 +198,16 @@ void GroupDef::addExample(const PageDef *def)
void GroupDef::addMembersToMemberGroup()
{
+ QListIterator<MemberList> mli(m_memberLists);
+ MemberList *ml;
+ for (mli.toFirst();(ml=mli.current());++mli)
+ {
+ if (ml->listType()&MemberList::declarationLists)
+ {
+ ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
+ }
+ }
+#if 0
::addMembersToMemberGroup(&decDefineMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decProtoMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decTypedefMembers,&memberGroupSDict,this);
@@ -190,6 +215,7 @@ void GroupDef::addMembersToMemberGroup()
::addMembersToMemberGroup(&decEnumValMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decFuncMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decVarMembers,&memberGroupSDict,this);
+#endif
//printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -253,94 +279,108 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
case MemberDef::Variable:
if (!docOnly)
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decVarMembers.inSort(md);
- else
- decVarMembers.append(md);
+ addMemberToList(MemberList::decVarMembers,md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decVarMembers.inSort(md);
+ //else
+ // decVarMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docVarMembers.inSort(md);
- else
- docVarMembers.append(md);
+ addMemberToList(MemberList::docVarMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docVarMembers.inSort(md);
+ //else
+ // docVarMembers.append(md);
break;
case MemberDef::Function:
if (!docOnly)
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decFuncMembers.inSort(md);
- else
- decFuncMembers.append(md);
+ addMemberToList(MemberList::decFuncMembers,md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decFuncMembers.inSort(md);
+ //else
+ // decFuncMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docFuncMembers.inSort(md);
- else
- docFuncMembers.append(md);
+ addMemberToList(MemberList::docFuncMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docFuncMembers.inSort(md);
+ //else
+ // docFuncMembers.append(md);
break;
case MemberDef::Typedef:
if (!docOnly)
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decTypedefMembers.inSort(md);
- else
- decTypedefMembers.append(md);
+ addMemberToList(MemberList::decTypedefMembers,md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decTypedefMembers.inSort(md);
+ //else
+ // decTypedefMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docTypedefMembers.inSort(md);
- else
- docTypedefMembers.append(md);
+ addMemberToList(MemberList::docTypedefMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docTypedefMembers.inSort(md);
+ //else
+ // docTypedefMembers.append(md);
break;
case MemberDef::Enumeration:
if (!docOnly)
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decEnumMembers.inSort(md);
- else
- decEnumMembers.append(md);
+ addMemberToList(MemberList::decEnumMembers,md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decEnumMembers.inSort(md);
+ //else
+ // decEnumMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docEnumMembers.inSort(md);
- else
- docEnumMembers.append(md);
+ addMemberToList(MemberList::docEnumMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docEnumMembers.inSort(md);
+ //else
+ // docEnumMembers.append(md);
break;
case MemberDef::EnumValue:
if (!docOnly)
{
+ addMemberToList(MemberList::decEnumValMembers,md);
//printf("enum value %s!\n",md->name().data());
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decEnumValMembers.inSort(md);
- else
- decEnumValMembers.append(md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decEnumValMembers.inSort(md);
+ //else
+ // decEnumValMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docEnumValMembers.inSort(md);
- else
- docEnumValMembers.append(md);
+ addMemberToList(MemberList::docEnumValMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docEnumValMembers.inSort(md);
+ //else
+ // docEnumValMembers.append(md);
break;
case MemberDef::Prototype:
if (!docOnly)
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decProtoMembers.inSort(md);
- else
- decProtoMembers.append(md);
+ addMemberToList(MemberList::decProtoMembers,md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decProtoMembers.inSort(md);
+ //else
+ // decProtoMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docProtoMembers.inSort(md);
- else
- docProtoMembers.append(md);
+ addMemberToList(MemberList::docProtoMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docProtoMembers.inSort(md);
+ //else
+ // docProtoMembers.append(md);
break;
case MemberDef::Define:
if (!docOnly)
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
- decDefineMembers.inSort(md);
- else
- decDefineMembers.append(md);
+ addMemberToList(MemberList::decDefineMembers,md);
+ //if (Config_getBool("SORT_BRIEF_DOCS"))
+ // decDefineMembers.inSort(md);
+ //else
+ // decDefineMembers.append(md);
}
- if (Config_getBool("SORT_MEMBER_DOCS"))
- docDefineMembers.inSort(md);
- else
- docDefineMembers.append(md);
+ addMemberToList(MemberList::docDefineMembers,md);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // docDefineMembers.inSort(md);
+ //else
+ // docDefineMembers.append(md);
break;
default:
err("GroupDef::insertMembers(): "
@@ -374,36 +414,36 @@ void GroupDef::removeMember(MemberDef *md)
delete mni;
}
- allMemberList->remove(md);
+ removeMemberFromList(MemberList::allMembersList,md);
switch(md->memberType())
{
case MemberDef::Variable:
- decVarMembers.remove(md);
- docVarMembers.remove(md);
+ removeMemberFromList(MemberList::decVarMembers,md);
+ removeMemberFromList(MemberList::docVarMembers,md);
break;
case MemberDef::Function:
- decFuncMembers.remove(md);
- docFuncMembers.remove(md);
+ removeMemberFromList(MemberList::decFuncMembers,md);
+ removeMemberFromList(MemberList::docFuncMembers,md);
break;
case MemberDef::Typedef:
- decTypedefMembers.remove(md);
- docTypedefMembers.remove(md);
+ removeMemberFromList(MemberList::decTypedefMembers,md);
+ removeMemberFromList(MemberList::docTypedefMembers,md);
break;
case MemberDef::Enumeration:
- decEnumMembers.remove(md);
- docEnumMembers.remove(md);
+ removeMemberFromList(MemberList::decEnumMembers,md);
+ removeMemberFromList(MemberList::docEnumMembers,md);
break;
case MemberDef::EnumValue:
- decEnumValMembers.remove(md);
- docEnumValMembers.remove(md);
+ removeMemberFromList(MemberList::decEnumValMembers,md);
+ removeMemberFromList(MemberList::docEnumValMembers,md);
break;
case MemberDef::Prototype:
- decProtoMembers.remove(md);
- docProtoMembers.remove(md);
+ removeMemberFromList(MemberList::decProtoMembers,md);
+ removeMemberFromList(MemberList::docProtoMembers,md);
break;
case MemberDef::Define:
- decDefineMembers.remove(md);
- docDefineMembers.remove(md);
+ removeMemberFromList(MemberList::decDefineMembers,md);
+ removeMemberFromList(MemberList::docDefineMembers,md);
break;
default:
err("GroupDef::removeMember(): unexpected member remove in file!\n");
@@ -418,7 +458,7 @@ bool GroupDef::containsGroup(const GroupDef *def)
void GroupDef::addGroup(const GroupDef *def)
{
- printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
+ //printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
//if (Config_getBool("SORT_MEMBER_DOCS"))
// groupList->inSort(def);
//else
@@ -665,13 +705,20 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
//allMemberList->writeDeclarations(ol,0,0,0,this,0,0);
- decDefineMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trDefines(),0);
- decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0);
- decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0);
- decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0);
- decEnumValMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerationValues(),0,TRUE);
- decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0);
- decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0);
+ writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines());
+ //decDefineMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trDefines(),0);
+ writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos());
+ //decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0);
+ writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs());
+ //decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0);
+ writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations());
+ //decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0);
+ writeMemberDeclarations(ol,MemberList::decEnumValMembers,theTranslator->trEnumerationValues());
+ //decEnumValMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerationValues(),0,TRUE);
+ writeMemberDeclarations(ol,MemberList::decFuncMembers,theTranslator->trFunctions());
+ //decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0);
+ writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables());
+ //decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0);
}
ol.endMemberSections();
@@ -733,26 +780,33 @@ void GroupDef::writeMemberDocumentation(OutputList &ol)
ol.disable(OutputGenerator::Html);
}
- docDefineMembers.writeDocumentation(ol,name(),this,
- theTranslator->trDefineDocumentation());
+ writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation());
+ //docDefineMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trDefineDocumentation());
- docProtoMembers.writeDocumentation(ol,name(),this,
- theTranslator->trFunctionPrototypeDocumentation());
+ writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation());
+ //docProtoMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trFunctionPrototypeDocumentation());
- docTypedefMembers.writeDocumentation(ol,name(),this,
- theTranslator->trTypedefDocumentation());
+ writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation());
+ //docTypedefMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trTypedefDocumentation());
- docEnumMembers.writeDocumentation(ol,name(),this,
- theTranslator->trEnumerationTypeDocumentation());
+ writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
+ //docEnumMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trEnumerationTypeDocumentation());
- docEnumValMembers.writeDocumentation(ol,name(),this,
- theTranslator->trEnumerationValueDocumentation(),TRUE);
+ writeMemberDocumentation(ol,MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation());
+ //docEnumValMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trEnumerationValueDocumentation(),TRUE);
- docFuncMembers.writeDocumentation(ol,name(),this,
- theTranslator->trFunctionDocumentation());
+ writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation());
+ //docFuncMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trFunctionDocumentation());
- docVarMembers.writeDocumentation(ol,name(),this,
- theTranslator->trVariableDocumentation());
+ writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation());
+ //docVarMembers.writeDocumentation(ol,name(),this,
+ // theTranslator->trVariableDocumentation());
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
@@ -765,12 +819,23 @@ void GroupDef::writeMemberPages(OutputList &ol)
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
+ QListIterator<MemberList> mli(m_memberLists);
+ MemberList *ml;
+ for (mli.toFirst();(ml=mli.current());++mli)
+ {
+ if (ml->listType()&MemberList::documentationLists)
+ {
+ ml->writeDocumentationPage(ol,name(),this);
+ }
+ }
+#if 0
docDefineMembers.writeDocumentationPage(ol,name(),this);
docProtoMembers.writeDocumentationPage(ol,name(),this);
docTypedefMembers.writeDocumentationPage(ol,name(),this);
docEnumMembers.writeDocumentationPage(ol,name(),this);
docFuncMembers.writeDocumentationPage(ol,name(),this);
docVarMembers.writeDocumentationPage(ol,name(),this);
+#endif
ol.popGeneratorState();
}
@@ -872,8 +937,8 @@ void addDirToGroups(Entry *root,DirDef *dd)
void addGroupToGroups(Entry *root,GroupDef *subGroup)
{
- printf("addGroupToGroups for %s groups=%d\n",root->name.data(),
- root->groups?root->groups->count():-1);
+ //printf("addGroupToGroups for %s groups=%d\n",root->name.data(),
+ // root->groups?root->groups->count():-1);
QListIterator<Grouping> gli(*root->groups);
Grouping *g;
for (;(g=gli.current());++gli)
@@ -885,6 +950,11 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
gd->addGroup(subGroup);
subGroup->makePartOfGroup(gd);
}
+ else if (gd==subGroup)
+ {
+ warn(root->fileName,root->startLine,"Trying to add group %s to itself!",
+ gd->name().data());
+ }
}
}
@@ -1030,12 +1100,87 @@ void GroupDef::addListReferences()
{
mg->addListReferences(this);
}
+ QListIterator<MemberList> mli(m_memberLists);
+ MemberList *ml;
+ for (mli.toFirst();(ml=mli.current());++mli)
+ {
+ if (ml->listType()&MemberList::documentationLists)
+ {
+ ml->addListReferences(this);
+ }
+ }
+#if 0
docDefineMembers.addListReferences(this);
docProtoMembers.addListReferences(this);
docTypedefMembers.addListReferences(this);
docEnumMembers.addListReferences(this);
docFuncMembers.addListReferences(this);
docVarMembers.addListReferences(this);
+#endif
+}
+
+MemberList *GroupDef::createMemberList(MemberList::ListType lt)
+{
+ m_memberLists.setAutoDelete(TRUE);
+ QListIterator<MemberList> mli(m_memberLists);
+ MemberList *ml;
+ for (mli.toFirst();(ml=mli.current());++mli)
+ {
+ if (ml->listType()==lt)
+ {
+ return ml;
+ }
+ }
+ // not found, create a new member list
+ ml = new MemberList(lt);
+ m_memberLists.append(ml);
+ ml->setInGroup(TRUE);
+ return ml;
+}
+
+void GroupDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
+{
+ static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
+ static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
+ MemberList *ml = createMemberList(lt);
+ if (((ml->listType()&MemberList::declarationLists) && sortBriefDocs) ||
+ ((ml->listType()&MemberList::documentationLists) && sortMemberDocs)
+ )
+ ml->inSort(md);
+ else
+ ml->append(md);
}
+MemberList *GroupDef::getMemberList(MemberList::ListType lt) const
+{
+ GroupDef *that = (GroupDef*)this;
+ MemberList *ml = that->m_memberLists.first();
+ while (ml)
+ {
+ if (ml->listType()==lt)
+ {
+ return ml;
+ }
+ ml = that->m_memberLists.next();
+ }
+ return 0;
+}
+
+void GroupDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title)
+{
+ MemberList * ml = getMemberList(lt);
+ if (ml) ml->writeDeclarations(ol,0,0,0,this,title,0);
+}
+
+void GroupDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title)
+{
+ MemberList * ml = getMemberList(lt);
+ if (ml) ml->writeDocumentation(ol,name(),this,title);
+}
+
+void GroupDef::removeMemberFromList(MemberList::ListType lt,MemberDef *md)
+{
+ MemberList *ml = getMemberList(lt);
+ if (ml) ml->remove(md);
+}