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

📄 classdef.cpp

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  // only for HTML  ol.pushGeneratorState();  ol.disableAllBut(OutputGenerator::Html);  startFile(ol,m_memListFileName,m_memListFileName,            theTranslator->trMemberList());  startTitle(ol,0);  parseText(ol,name()+" "+theTranslator->trMemberList());  endTitle(ol,0,0);  parseText(ol,theTranslator->trThisIsTheListOfAllMembers());  ol.writeObjectLink(getReference(),getOutputFileBase(),0,name());  parseText(ol,theTranslator->trIncludingInheritedMembers());    //ol.startItemList();  ol.writeString("<table>\n");    //MemberNameInfo *mni=m_allMemberNameInfoList->first();  MemberNameInfoSDict::Iterator mnii(*m_allMemberNameInfoSDict);   MemberNameInfo *mni;  for (mnii.toFirst();(mni=mnii.current());++mnii)  {    MemberInfo *mi=mni->first();    while (mi)    {      MemberDef *md=mi->memberDef;      ClassDef  *cd=md->getClassDef();      Protection prot = mi->prot;            //printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",      //    name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);      Specifier virt=md->virtualness();      MemberDef *rmd=md->reimplements();      while (rmd && virt==Normal)      {        virt = rmd->virtualness()==Normal ? Normal : Virtual;        rmd  = rmd->reimplements();      }      if (cd && !md->name().isEmpty() && md->name()[0]!='@')      {        bool memberWritten=FALSE;        if (cd->isLinkable() && md->isLinkable())           // create a link to the documentation        {          QCString name=mi->ambiguityResolutionScope+md->name();          //ol.writeListItem();          ol.writeString("  <tr bgcolor=\"#f0f0f0\"><td>");          Definition *bd = md->getGroupDef();          if (bd==0) bd=cd;          ol.writeObjectLink(bd->getReference(),bd->getOutputFileBase(),              md->anchor(),name);          if ( md->isFunction() || md->isSignal() || md->isSlot() ||               (md->isFriend() && md->argsString()))             ol.docify(md->argsString());          else if (md->isEnumerate())            parseText(ol," "+theTranslator->trEnumName());          else if (md->isEnumValue())            parseText(ol," "+theTranslator->trEnumValue());          else if (md->isTypedef())            ol.docify(" typedef");          else if (md->isFriend() && !strcmp(md->typeString(),"friend class"))            ol.docify(" class");          //ol.writeString("\n");          ol.writeString("</td>");          memberWritten=TRUE;        }        else if (!Config_getBool("HIDE_UNDOC_MEMBERS")) // no documentation,                                   // generate link to the class instead.        {          //ol.writeListItem();          ol.writeString("  <tr bgcolor=\"#f0f0f0\"><td>");          ol.startBold();          ol.docify(md->name());          ol.endBold();          if ( md->isFunction() || md->isSignal() || md->isSlot() )             ol.docify(md->argsString());          else if (md->isEnumerate())            parseText(ol," "+theTranslator->trEnumName());          else if (md->isEnumValue())            parseText(ol," "+theTranslator->trEnumValue());          else if (md->isTypedef())            ol.docify(" typedef");          ol.writeString(" (");          parseText(ol,theTranslator->trDefinedIn()+" ");          if (cd->isLinkable())          {            ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name());          }          else          {            ol.startBold();            ol.docify(cd->name());            ol.endBold();          }          ol.writeString(")");          ol.writeString("</td>");          memberWritten=TRUE;        }        if (memberWritten)        {          ol.writeString("<td>");          ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),                             0,cd->name());          ol.writeString("</td>");          ol.writeString("<td>");        }        if ((prot!=Public || virt!=Normal ||              md->isFriend() || md->isRelated() || md->isExplicit() ||             md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) ||             md->isSignal() || md->isSlot() ||             md->isStatic()            )            && memberWritten)        {          ol.startTypewriter();          ol.docify(" [");          QStrList sl;          if (md->isFriend()) sl.append("friend");          else if (md->isRelated()) sl.append("related");          else          {            if (Config_getBool("INLINE_INFO") && md->isInline())                                               sl.append("inline");            if (md->isExplicit())      sl.append("explicit");            if (md->isMutable())       sl.append("mutable");            if (prot==Protected)       sl.append("protected");            else if (prot==Private)    sl.append("private");            if (virt==Virtual)         sl.append("virtual");            else if (virt==Pure)       sl.append("pure virtual");            if (md->isStatic())        sl.append("static");            if (md->isSignal())        sl.append("signal");            if (md->isSlot())          sl.append("slot");          }          const char *s=sl.first();          while (s)          {            ol.docify(s);            s=sl.next();            if (s) ol.docify(", ");          }          ol.docify("]");          ol.endTypewriter();        }        if (memberWritten)        {          ol.writeString("</td>");          ol.writeString("</tr>\n");        }      }      mi=mni->next();    }  }  //ol.endItemList();  ol.writeString("</table>");    endFile(ol);  ol.popGeneratorState();}// add a reference to an examplebool ClassDef::addExample(const char *anchor,const char *nameStr,    const char *file){  if (m_exampleSDict && !m_exampleSDict->find(nameStr))  {    Example *e=new Example;    e->anchor=anchor;    e->name=nameStr;    e->file=file;    m_exampleSDict->inSort(nameStr,e);    return TRUE;  }  return FALSE;}// returns TRUE if this class is used in an examplebool ClassDef::hasExamples(){  if (m_exampleSDict==0)     return FALSE;  else    return m_exampleSDict->count()>0;}void ClassDef::setTemplateArguments(ArgumentList *al){  if (al==0) return;  if (!m_tempArgs) delete m_tempArgs; // delete old list if needed  m_tempArgs=new ArgumentList;   m_tempArgs->setAutoDelete(TRUE);  ArgumentListIterator ali(*al);  Argument *a;  for (;(a=ali.current());++ali)  {    m_tempArgs->append(new Argument(*a));  }}/*! Returns \c TRUE iff this class or a class inheriting from this class *  is \e not defined in an external tag file.  */bool ClassDef::hasNonReferenceSuperClass(){  bool found=!isReference();   if (found) return TRUE; // we're done if this class is not a reference  BaseClassListIterator bcli(*m_inheritedBy);  for ( ; bcli.current() && !found ; ++bcli ) // for each super class  {    ClassDef *bcd=bcli.current()->classDef;    // recurse into the super class branch    found = found || bcd->hasNonReferenceSuperClass();     if (!found)    {      // look for template instances that might have non-reference super classes      QDict<ClassDef> *cil = bcd->getTemplateInstances();      if (cil)      {        QDictIterator<ClassDef> tidi(*cil);        for ( ; tidi.current() && !found ; ++tidi) // for each template instance        {          // recurse into the template instance branch          found = found || tidi.current()->hasNonReferenceSuperClass();        }      }    }  }  return found;}/*! called from MemberDef::writeDeclaration() to (recusively) write the  *  definition of an annonymous struct, union or class. */void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup){  //ol.insertMemberAlign();  //printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);  //if (inGroup && md && md->getClassDef()==this) return;  ol.docify(compoundTypeString());  int ri=name().findRev("::");  if (ri==-1) ri=name().length();  QCString cn=name().right(name().length()-ri-2);  if (!cn.isEmpty() && cn.at(0)!='@' && md)  {     ol.docify(" ");    if (isLinkable())    {      ol.writeObjectLink(0,0,md->anchor(),cn);    }    else    {      ol.startBold();      ol.docify(cn);      ol.endBold();    }  }  ol.docify(" {");  ol.endMemberItem(FALSE);   // write user defined member groups  MemberGroupListIterator mgli(*m_memberGroupList);  MemberGroup *mg;  for (;(mg=mgli.current());++mgli)  {    mg->setInGroup(inGroup);    mg->writePlainDeclarations(ol,this,0,0,0);  }  pubTypes.setInGroup(inGroup);  pubTypes.writePlainDeclarations(ol,this,0,0,0);   pubMembers.setInGroup(inGroup);  pubMembers.writePlainDeclarations(ol,this,0,0,0);   pubAttribs.setInGroup(inGroup);  pubAttribs.writePlainDeclarations(ol,this,0,0,0);   pubSlots.setInGroup(inGroup);  pubSlots.writePlainDeclarations(ol,this,0,0,0);   signals.setInGroup(inGroup);  signals.writePlainDeclarations(ol,this,0,0,0);   dcopMethods.setInGroup(inGroup);  dcopMethods.writePlainDeclarations(ol,this,0,0,0);   properties.setInGroup(inGroup);  properties.writePlainDeclarations(ol,this,0,0,0);   pubStaticMembers.setInGroup(inGroup);  pubStaticMembers.writePlainDeclarations(ol,this,0,0,0);   pubStaticAttribs.setInGroup(inGroup);  pubStaticAttribs.writePlainDeclarations(ol,this,0,0,0);   proTypes.setInGroup(inGroup);  proTypes.writePlainDeclarations(ol,this,0,0,0);   proMembers.setInGroup(inGroup);  proMembers.writePlainDeclarations(ol,this,0,0,0);   proAttribs.setInGroup(inGroup);  proAttribs.writePlainDeclarations(ol,this,0,0,0);   proSlots.setInGroup(inGroup);  proSlots.writePlainDeclarations(ol,this,0,0,0);   proStaticMembers.setInGroup(inGroup);  proStaticMembers.writePlainDeclarations(ol,this,0,0,0);   proStaticAttribs.setInGroup(inGroup);  proStaticAttribs.writePlainDeclarations(ol,this,0,0,0);   if (Config_getBool("EXTRACT_PRIVATE"))  {    priTypes.setInGroup(inGroup);    priTypes.writePlainDeclarations(ol,this,0,0,0);     priMembers.setInGroup(inGroup);    priMembers.writePlainDeclarations(ol,this,0,0,0);     priAttribs.setInGroup(inGroup);     priAttribs.writePlainDeclarations(ol,this,0,0,0);     priSlots.setInGroup(inGroup);     priSlots.writePlainDeclarations(ol,this,0,0,0);     priStaticMembers.setInGroup(inGroup);     priStaticMembers.writePlainDeclarations(ol,this,0,0,0);     priStaticAttribs.setInGroup(inGroup);     priStaticAttribs.writePlainDeclarations(ol,this,0,0,0);   }  friends.setInGroup(inGroup);  friends.writePlainDeclarations(ol,this,0,0,0);  related.setInGroup(inGroup);  related.writePlainDeclarations(ol,this,0,0,0); }/*! a link to this class is possible within this project */bool ClassDef::isLinkableInProject() const{   if (m_templateMaster)  {    return m_templateMaster->isLinkableInProject();  }  else  {    return !name().isEmpty() &&    /* no name */      //m_isTemplBaseClass==-1 &&  /* template base class */      !m_artificial &&      name().find('@')==-1 && /* anonymous compound */      (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */      hasDocumentation() &&   /* documented */       !isReference() &&         /* not an external reference */      (!m_isStatic || Config_getBool("EXTRACT_STATIC"));  }}bool ClassDef::isLinkable() const{  if (m_templateMaster)  {    return m_templateMaster->isLinkable();  }  else  {    return isLinkableInProject() || isReference();  }}/*! the class is visible in a class diagram, or class hierarchy */bool ClassDef::isVisibleInHierarchy() {     return // show all classes or a subclass is visible      (Config_getBool("ALLEXTERNALS") || hasNonReferenceSuperClass()) &&      // and not an annonymous compound      name().find('@')==-1 &&      // not an artifically introduced class      !m_artificial &&      // and not privately inherited      (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) &&      // documented or shown anyway or documentation is external       (hasDocumentation() ||        !Config_getBool("HIDE_UNDOC_CLASSES") ||        (m_templateMaster && m_templateMaster->hasDocumentation()) ||        isReference()      ) &&      // is not part of an unnamed namespace or shown anyway      (!m_isStatic || Config_getBool("EXTRACT_STATIC"));}bool ClassDef::hasDocumentation() const{  return Definition::hasDocumentation();}//----------------------------------------------------------------------// recursive function:// returns TRUE iff class definition `bcd' represents an (in)direct base // class of class definition `cd'.bool ClassDef::isBaseClass(ClassDef *bcd){  bool found=FALSE;  //printf("isBaseClass(cd=%s) looking for %s\n",cd->name().data(),bcd->name().data());  BaseClassListIterator bcli(*baseClasses());  for ( ; bcli.current() && !found ; ++bcli)  {    ClassDef *ccd=bcli.current()->classDef;    if (ccd->templateMaster()) ccd=ccd->templateMaster();    //printf("isBaseClass() baseclass %s\n",ccd->name().data());    if (ccd==bcd)       found=TRUE;    else       found=ccd->isBaseClass(bcd);  }  return found;}

⌨️ 快捷键说明

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