📄 groupdef.cpp
字号:
/****************************************************************************** * * $Id: groupdef.cpp,v 1.29 2001/03/19 19:27:40 root Exp $ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby * granted. No representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * */#include <ctype.h>#include "qtbc.h"#include "groupdef.h"#include "classdef.h"#include "filedef.h"#include "classlist.h"#include "outputlist.h"#include "doc.h"#include "namespacedef.h"#include "language.h"#include "util.h"#include "memberlist.h"#include "message.h"#include "membergroup.h"#include "doxygen.h"#include "page.h"GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) : Definition(df,dl,na){ fileList = new FileList; classSDict = new ClassSDict(257); groupList = new GroupList; parentGroupList = new GroupList; namespaceList = new NamespaceList; pageDict = new PageSDict(257); exampleDict = new PageSDict(257); allMemberList = new MemberList; allMemberNameInfoSDict = new MemberNameInfoSDict(17); fileName = (QCString)"group_"+na; setGroupTitle( t ); memberGroupList = new MemberGroupList; memberGroupList->setAutoDelete(TRUE); memberGroupDict = new MemberGroupDict(1009); decDefineMembers.setInGroup(TRUE); decProtoMembers.setInGroup(TRUE); decTypedefMembers.setInGroup(TRUE); decEnumMembers.setInGroup(TRUE); decEnumValMembers.setInGroup(TRUE); decFuncMembers.setInGroup(TRUE); decVarMembers.setInGroup(TRUE); docDefineMembers.setInGroup(TRUE); docProtoMembers.setInGroup(TRUE); docTypedefMembers.setInGroup(TRUE); docEnumMembers.setInGroup(TRUE); docFuncMembers.setInGroup(TRUE); docVarMembers.setInGroup(TRUE); visited = 0;}GroupDef::~GroupDef(){ delete fileList; delete classSDict; delete groupList; delete parentGroupList; delete namespaceList; delete pageDict; delete exampleDict; delete allMemberList; delete allMemberNameInfoSDict; delete memberGroupList; delete memberGroupDict;}void GroupDef::setGroupTitle( const char *t ){ if ( t && strlen(t) ) { title = t; titleSet = TRUE; } else { title = name(); title.at(0)=toupper(title.at(0)); titleSet = FALSE; }}void GroupDef::distributeMemberGroupDocumentation(){ MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->distributeMemberGroupDocumentation(); }}void GroupDef::addFile(const FileDef *def){ if (Config_getBool("SORT_MEMBER_DOCS")) fileList->inSort(def); else fileList->append(def);}void GroupDef::addClass(const ClassDef *cd){ if (Config_getBool("SORT_MEMBER_DOCS")) classSDict->inSort(cd->name(),cd); else classSDict->append(cd->name(),cd);}void GroupDef::addNamespace(const NamespaceDef *def){ if (Config_getBool("SORT_MEMBER_DOCS")) namespaceList->inSort(def); else namespaceList->append(def);}void GroupDef::addPage(PageInfo *def){ pageDict->append(def->name,def); def->inGroup = this;}void GroupDef::addExample(const PageInfo *def){ exampleDict->append(def->name,def);}void GroupDef::addMembersToMemberGroup(){ ::addMembersToMemberGroup(&decDefineMembers,memberGroupDict,memberGroupList); ::addMembersToMemberGroup(&decProtoMembers,memberGroupDict,memberGroupList); ::addMembersToMemberGroup(&decTypedefMembers,memberGroupDict,memberGroupList); ::addMembersToMemberGroup(&decEnumMembers,memberGroupDict,memberGroupList); ::addMembersToMemberGroup(&decEnumValMembers,memberGroupDict,memberGroupList); ::addMembersToMemberGroup(&decFuncMembers,memberGroupDict,memberGroupList); ::addMembersToMemberGroup(&decVarMembers,memberGroupDict,memberGroupList); //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count()); MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->setInGroup(TRUE); }}void GroupDef::insertMember(MemberDef *md,bool docOnly){ //fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data()); MemberNameInfo *mni=0; if ((mni=(*allMemberNameInfoSDict)[md->name()])) { // member with this name already found MemberNameInfoIterator srcMnii(*mni); MemberInfo *srcMi; for ( ; (srcMi=srcMnii.current()) ; ++srcMnii ) { MemberDef *srcMd = srcMi->memberDef; if (matchArguments(srcMd->argumentList(),md->argumentList()) && srcMd->getOuterScope()==md->getOuterScope()) { return; // member already added } } mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); } else { mni = new MemberNameInfo(md->name()); mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); allMemberNameInfoSDict->append(mni->memberName(),mni); } allMemberList->append(md); switch(md->memberType()) { case MemberDef::Variable: if (!docOnly) decVarMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) docVarMembers.inSort(md); else docVarMembers.append(md); break; case MemberDef::Function: if (!docOnly) decFuncMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) docFuncMembers.inSort(md); else docFuncMembers.append(md); break; case MemberDef::Typedef: if (!docOnly) decTypedefMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) docTypedefMembers.inSort(md); else docTypedefMembers.append(md); break; case MemberDef::Enumeration: if (!docOnly) decEnumMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) docEnumMembers.inSort(md); else docEnumMembers.append(md); break; case MemberDef::EnumValue: break; case MemberDef::Prototype: if (!docOnly) decProtoMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) docProtoMembers.inSort(md); else docProtoMembers.append(md); break; case MemberDef::Define: if (!docOnly) decDefineMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) docDefineMembers.inSort(md); else docDefineMembers.append(md); break; default: err("GroupDef::insertMembers(): " "member `%s' with class scope `%s' inserted in group scope `%s'!\n", md->name().data(), md->getClassDef() ? md->getClassDef()->name().data() : "", name().data()); } //addMemberToGroup(md,groupId);}void GroupDef::removeMember(MemberDef *md){ // fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data()); MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name()); if (mni) { MemberNameInfoIterator mnii(*mni); while( mnii.current() ) { if( mnii.current()->memberDef == md ) { mni->remove(mnii.current()); break; } ++mnii; } if( mni->isEmpty() ) { allMemberNameInfoSDict->remove(md->name()); delete mni; } allMemberList->remove(md); switch(md->memberType()) { case MemberDef::Variable: decVarMembers.remove(md); docVarMembers.remove(md); break; case MemberDef::Function: decFuncMembers.remove(md); docFuncMembers.remove(md); break; case MemberDef::Typedef: decTypedefMembers.remove(md); docTypedefMembers.remove(md); break; case MemberDef::Enumeration: decEnumMembers.remove(md); docEnumMembers.remove(md); break; case MemberDef::EnumValue: break; case MemberDef::Prototype: decProtoMembers.remove(md); docProtoMembers.remove(md); break; case MemberDef::Define: decDefineMembers.remove(md); docDefineMembers.remove(md); break; default: err("GroupDef::removeMember(): unexpected member remove in file!\n"); } }}bool GroupDef::containsGroup(const GroupDef *def){ return groupList->find(def) >= 0;}void GroupDef::addGroup(const GroupDef *def){ if (Config_getBool("SORT_MEMBER_DOCS")) groupList->inSort(def); else groupList->append(def);}void GroupDef::addParentGroup(const GroupDef *def){ if (Config_getBool("SORT_MEMBER_DOCS")) parentGroupList->inSort(def); else parentGroupList->append(def);}bool GroupDef::isASubGroup() const{ return parentGroupList->count()!=0;}int GroupDef::countMembers() const{ return fileList->count()+ classSDict->count()+ namespaceList->count()+ groupList->count()+ allMemberList->count()+ pageDict->count()+ exampleDict->count();}/*! Compute the HTML anchor names for all members in the class */ void GroupDef::computeAnchors(){ setAnchors('a',allMemberList);}void GroupDef::writeDocumentation(OutputList &ol){ ol.pushGeneratorState(); //ol.disable(OutputGenerator::Man); startFile(ol,getOutputFileBase(),name(),title); startTitle(ol,getOutputFileBase()); ol.docify(title); endTitle(ol,getOutputFileBase(),title); //brief=brief.stripWhiteSpace(); //int bl=brief.length(); OutputList briefOutput(&ol); if (!briefDescription().isEmpty()) { parseDoc(briefOutput,m_defFileName,m_defLine,name(),0,briefDescription()); ol+=briefOutput; ol.writeString(" \n"); ol.pushGeneratorState(); ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::RTF); ol.startTextLink(0,"_details"); parseText(ol,theTranslator->trMore()); ol.endTextLink(); //ol.enable(OutputGenerator::Latex); ol.popGeneratorState(); } if (!Config_getString("GENERATE_TAGFILE").isEmpty()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -