⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classdef.cpp

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                  enumMembers.inSort(md);                else                  enumMembers.append(md);                break;              case MemberDef::EnumValue:                if (Config_getBool("SORT_MEMBER_DOCS"))                  enumValMembers.inSort(md);                else                  enumValMembers.append(md);                break;              case MemberDef::Function:                if (md->name()==localName() ||         // constructor                    (md->name().find('~')!=-1 &&  // hack to detect destructor                     md->name().find("operator")==-1                    )                   )                {                  constructors.append(md);                }                else                {                  if (Config_getBool("SORT_MEMBER_DOCS"))                    functionMembers.inSort(md);                  else                    functionMembers.append(md);                }                break;              case MemberDef::Variable:                if (Config_getBool("SORT_MEMBER_DOCS"))                  variableMembers.inSort(md);                else                  variableMembers.append(md);                break;              default:                err("Unexpected member type %d found!\n",md->memberType());            }          }          break;       }    }    /*************************************************/    /* insert member in the appropriate member group */    /*************************************************/    // Note: this must be done AFTER inserting the member in the     // regular groups    //addMemberToGroup(md,groupId);      }  if (md->virtualness()==Pure)  {    m_isAbstract=TRUE;  }  MemberInfo *mi = new MemberInfo((MemberDef *)md,                       md->protection(),md->virtualness(),FALSE);  MemberNameInfo *mni=0;  if ((mni=m_allMemberNameInfoSDict->find(md->name())))  {    mni->append(mi);  }  else  {    mni = new MemberNameInfo(md->name());    mni->append(mi);    m_allMemberNameInfoSDict->inSort(mni->memberName(),mni);  }}//void ClassDef::computeMemberGroups()//{//  MemberNameInfoListIterator mnili(*m_allMemberNameInfoList);//  MemberNameInfo *mni;//  for (;(mni=mnili.current());++mnili)//  {//   MemberNameInfoIterator mnii(*mni);//    MemberInfo *mi;//    for (mnii.toFirst();(mi=mnii.current());++mnii)//    {//      MemberDef *md=mi->memberDef;//      MemberGroup *mg = md->getMemberGroup();//      if (mg && m_memberGroupDict->find(mg->groupId())==0)//      {//        m_memberGroupDict->insert(mg->groupId(),mg);//        m_memberGroupList->append(mg);//      }//    }//  }//}// compute the anchors for all membersvoid ClassDef::computeAnchors(){  setAnchors('a',&pubMembers);  setAnchors('b',&proMembers);  setAnchors('c',&priMembers);  setAnchors('d',&pubStaticMembers);  setAnchors('e',&proStaticMembers);  setAnchors('f',&priStaticMembers);  setAnchors('g',&pubSlots);  setAnchors('h',&proSlots);  setAnchors('i',&priSlots);  setAnchors('j',&signals);  setAnchors('k',&related);  setAnchors('l',&friends);  setAnchors('m',&pubAttribs);  setAnchors('n',&proAttribs);  setAnchors('o',&priAttribs);  setAnchors('p',&pubStaticAttribs);  setAnchors('q',&proStaticAttribs);  setAnchors('r',&priStaticAttribs);  setAnchors('s',&pubTypes);  setAnchors('t',&proTypes);  setAnchors('u',&priTypes);  setAnchors('v',&dcopMethods);  setAnchors('w',&properties);}void ClassDef::distributeMemberGroupDocumentation(){  MemberGroupListIterator mgli(*m_memberGroupList);  MemberGroup *mg;  for (;(mg=mgli.current());++mgli)  {    mg->distributeMemberGroupDocumentation();  }}// add a file name to the used files setvoid ClassDef::insertUsedFile(const char *f){  if (m_files.find(f)==-1) m_files.append(f);  if (m_templateInstances)  {    QDictIterator<ClassDef> qdi(*m_templateInstances);    ClassDef *cd;    for (qdi.toFirst();(cd=qdi.current());++qdi)    {      cd->insertUsedFile(f);    }  }}static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd){  if (bcd->prot!=Public || bcd->virt!=Normal)  {    ol.startTypewriter();    ol.docify(" [");    QStrList sl;    if (bcd->prot==Protected)    sl.append("protected");    else if (bcd->prot==Private) sl.append("private");    if (bcd->virt==Virtual)      sl.append("virtual");    const char *s=sl.first();    while (s)    {      ol.docify(s);      s=sl.next();      if (s) ol.docify(", ");    }    ol.docify("]");    ol.endTypewriter();  }}void ClassDef::setIncludeFile(FileDef *fd,const char *includeName,bool local){  //printf("ClassDef::setInclude(%p,%s,%d)\n",fd,includeName,local);  if (!m_incInfo) m_incInfo=new IncludeInfo;  if ((includeName && m_incInfo->includeName.isEmpty()) ||      (fd!=0 && m_incInfo->fileDef==0)     )  {    //printf("Setting file info\n");    m_incInfo->fileDef     = fd;    m_incInfo->includeName = includeName;    m_incInfo->local       = local;  }}// TODO: fix this: a nested template class can have multiple outer templatesArgumentList *ClassDef::outerTemplateArguments() const{  int ti;  ClassDef *pcd=0;  int pi=0;  if (m_tempArgs) return m_tempArgs;  // find the outer most class scope  while ((ti=name().find("::",pi))!=-1 &&       (pcd=getClass(name().left(ti)))==0        ) pi=ti+2;  if (pcd)  {    return pcd->templateArguments();  }  return 0;}static void searchTemplateSpecs(/*in*/  Definition *d,                                /*out*/ QList<ArgumentList> &result,                                /*out*/ QCString &name){  if (d->definitionType()==Definition::TypeClass)  {    if (d->getOuterScope())    {      searchTemplateSpecs(d->getOuterScope(),result,name);    }    ClassDef *cd=(ClassDef *)d;    if (!name.isEmpty()) name+="::";    name+=d->localName();    bool isSpecialization = d->localName().find('<')!=-1;    if (cd->templateArguments())     {      result.append(cd->templateArguments());      if (!isSpecialization)      {        name+=tempArgListToString(cd->templateArguments());      }    }  }  else  {    name+=d->qualifiedName();  }}static void writeTemplateSpec(OutputList &ol,Definition *d,            const QCString &type){  QList<ArgumentList> specs;  QCString name;  searchTemplateSpecs(d,specs,name);  if (specs.count()>0) // class has template scope specifiers  {    ol.startSubsubsection();     QListIterator<ArgumentList> spi(specs);    ArgumentList *al;    for (spi.toFirst();(al=spi.current());++spi)    {      ol.docify("template<");      Argument *a=al->first();      while (a)      {        ol.docify(a->type);        if (!a->name.isEmpty())        {          ol.docify(" ");          ol.docify(a->name);        }        if (a->defval.length()!=0)        {          ol.docify(" = ");          ol.docify(a->defval);        }         a=al->next();        if (a) ol.docify(", ");      }      ol.docify(">");      ol.pushGeneratorState();      ol.disableAllBut(OutputGenerator::Html);      ol.lineBreak();      ol.popGeneratorState();    }    ol.docify(type.lower()+" "+name);    ol.endSubsubsection();    ol.writeString("\n");  }}    // write all documentation for this classvoid ClassDef::writeDocumentation(OutputList &ol){  // write title  QCString pageTitle=name().copy();  QCString pageType;  ArgumentList *outerTempArgList = outerTemplateArguments();  QCString cType=compoundTypeString();  toupper(cType.at(0));  pageType+=" ";  pageType+=cType;  pageTitle+=pageType+" Reference";  if (outerTempArgList) pageTitle.prepend(" Template");  startFile(ol,getOutputFileBase(),name(),pageTitle);  startTitle(ol,getOutputFileBase());  parseText(ol,theTranslator->trCompoundReference(name(),m_compType,outerTempArgList!=0));  endTitle(ol,getOutputFileBase(),name());  ol.startTextBlock();    //printf("Class %s brief=`%s' doc=`%s'\n",name().data(),briefDescription().data(),documentation().data());    bool exampleFlag=hasExamples();  // write brief description  OutputList briefOutput(&ol);   if (!briefDescription().isEmpty())  {    parseDoc(briefOutput,m_defFileName,m_defLine,name(),0,briefDescription());    ol+=briefOutput;    ol.writeString(" \n");    ol.pushGeneratorState();    ol.disableAllBut(OutputGenerator::Html);    ol.startTextLink(0,"_details");        if (Config_getBool("REPEAT_BRIEF") ||         !documentation().isEmpty() ||         exampleFlag       )    {      parseText(ol,theTranslator->trMore());    }    ol.endTextLink();    ol.popGeneratorState();    ol.disable(OutputGenerator::Man);    ol.newParagraph();    ol.enable(OutputGenerator::Man);  }  ol.writeSynopsis();    if (m_incInfo)  {    QCString nm=m_incInfo->includeName.isEmpty() ?       (m_incInfo->fileDef ?       m_incInfo->fileDef->docName().data() : ""       ) :      m_incInfo->includeName.data();    if (!nm.isEmpty())    {      ol.startTypewriter();      ol.docify("#include ");      if (m_incInfo->local)        ol.docify("\"");      else        ol.docify("<");      ol.pushGeneratorState();      ol.disable(OutputGenerator::Html);      ol.docify(nm);      ol.disableAllBut(OutputGenerator::Html);      ol.enable(OutputGenerator::Html);      if (m_incInfo->fileDef)      {        ol.writeObjectLink(0,m_incInfo->fileDef->includeName(),0,nm);      }      else      {        ol.docify(nm);      }      ol.popGeneratorState();      if (m_incInfo->local)        ol.docify("\"");      else        ol.docify(">");      ol.endTypewriter();      ol.newParagraph();    }  }  if (!Config_getString("GENERATE_TAGFILE").isEmpty())   {    Doxygen::tagFile << "  <compound kind=\"" << compoundTypeString();    Doxygen::tagFile << "\">" << endl;    Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << ".html</filename>" << endl;    if (m_tempArgs)    {      ArgumentListIterator ali(*m_tempArgs);      Argument *a;      for (;(a=ali.current());++ali)      {        Doxygen::tagFile << "    <templarg>" << convertToXML(a->name) << "</templarg>" << endl;      }    }  }    if (Config_getBool("CLASS_DIAGRAMS")) ol.disableAllBut(OutputGenerator::Man);    // write super classes  int count;  if ((count=m_inherits->count())>0)  {    //parseText(ol,theTranslator->trInherits()+" ");    QCString inheritLine = theTranslator->trInheritsList(m_inherits->count());    QRegExp marker("@[0-9]+");    int index=0,newIndex,matchLen;    // now replace all markers in inheritLine with links to the classes    while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)    {      parseText(ol,inheritLine.mid(index,newIndex-index));      bool ok;      uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);      BaseClassDef *bcd=m_inherits->at(entryIndex);      if (ok && bcd)      {        ClassDef *cd=bcd->classDef;        if (cd->isLinkable())        {          if (!Config_getString("GENERATE_TAGFILE").isEmpty())           {            Doxygen::tagFile << "    <base";            if (bcd->prot==Protected)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -