diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/definition.cpp | 479 | ||||
-rw-r--r-- | src/definition.h | 117 | ||||
-rw-r--r-- | src/namespacedef.cpp | 59 | ||||
-rw-r--r-- | src/namespacedef.h | 2 |
4 files changed, 420 insertions, 237 deletions
diff --git a/src/definition.cpp b/src/definition.cpp index fb2c993..ddb2a41 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -39,6 +39,94 @@ #define pclose _pclose #endif + +class DefinitionImpl +{ + public: + void init(const char *df,int dl, + const char *n,const char *b, + const char *d,bool isSym) + { + defFileName = df; + int lastDot = defFileName.findRev('.'); + if (lastDot!=-1) + { + defFileExt = defFileName.mid(lastDot); + } + defLine = dl; + name=n; + if (name!="<globalScope>") + { + //extractNamespaceName(m_name,m_localName,ns); + localName=stripScope(n); + } + else + { + localName=n; + } + //printf("m_localName=%s\n",m_localName.data()); + + if (b) + { + brief = new DocInfo; + brief->doc = b; + } + else + { + brief = 0; + } + + if (d) + { + details = new DocInfo; + details->doc = d; + } + else + { + details = 0; + } + body = 0; + sourceRefByDict=0; + sourceRefsDict=0; + sectionDict=0, + outerScope=Doxygen::globalScope; + partOfGroups=0; + xrefListItems=0; + isSymbol = isSym; + hidden = FALSE; + } + + SectionDict *sectionDict; // dictionary of all sections + + MemberSDict *sourceRefByDict; + MemberSDict *sourceRefsDict; + + DocInfo *details; + DocInfo *brief; + BodyInfo *body; + + QCString name; // name of the definition + QCString localName; // local (unqualified) name of the definition + // in the future m_name should become m_localName + QCString symbolName; + QCString qualifiedName; + QCString ref; // reference to external documentation + + QList<ListItemInfo> *xrefListItems; + bool isSymbol; + bool hidden; + + Definition *outerScope; + GroupList *partOfGroups; + + // where the item was found + QCString defFileName; + int defLine; + QCString defFileExt; +}; + +//----------------------------------------------------------------------------------------- + static void addToMap(const char *name,Definition *d) { QCString symbolName = name; @@ -121,69 +209,23 @@ Definition::Definition(const char *df,int dl, const char *name,const char *b, const char *d,bool isSymbol) { - //QCString ns; - //printf("Definition(%s) %p\n",name,this); - m_defFileName = df; - int lastDot = m_defFileName.findRev('.'); - if (lastDot!=-1) - { - m_defFileExt = m_defFileName.mid(lastDot); - } - m_defLine = dl; - m_name=name; - if (m_name!="<globalScope>") - { - //extractNamespaceName(m_name,m_localName,ns); - m_localName=stripScope(name); - } - else - { - m_localName=name; - } - //printf("m_localName=%s\n",m_localName.data()); - - if (b) - { - m_brief = new DocInfo; - m_brief->doc = b; - } - else - { - m_brief = 0; - } - - if (d) - { - m_details = new DocInfo; - m_details->doc = d; - } - else - { - m_details = 0; - } - m_body = 0; - m_sourceRefByDict=0; - m_sourceRefsDict=0; - m_sectionDict=0, - m_outerScope=Doxygen::globalScope; - m_partOfGroups=0; - m_xrefListItems=0; - m_isSymbol = isSymbol; - m_hidden = FALSE; - if (m_isSymbol) addToMap(name,this); + m_impl = new DefinitionImpl; + m_impl->init(df,dl,name,b,d,isSymbol); + if (isSymbol) addToMap(name,this); } Definition::~Definition() { - if (m_isSymbol) removeFromMap(this); - delete m_sectionDict; - delete m_sourceRefByDict; - delete m_sourceRefsDict; - delete m_partOfGroups; - delete m_xrefListItems; - delete m_brief; - delete m_details; - delete m_body; + if (m_impl->isSymbol) removeFromMap(this); + delete m_impl->sectionDict; + delete m_impl->sourceRefByDict; + delete m_impl->sourceRefsDict; + delete m_impl->partOfGroups; + delete m_impl->xrefListItems; + delete m_impl->brief; + delete m_impl->details; + delete m_impl->body; + delete m_impl; } void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) @@ -201,13 +243,13 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) gsi = new SectionInfo(*si); Doxygen::sectionDict.insert(si->label,gsi); } - if (m_sectionDict==0) + if (m_impl->sectionDict==0) { - m_sectionDict = new SectionDict(17); + m_impl->sectionDict = new SectionDict(17); } - if (m_sectionDict->find(gsi->label)==0) + if (m_impl->sectionDict->find(gsi->label)==0) { - m_sectionDict->insert(gsi->label,gsi); + m_impl->sectionDict->insert(gsi->label,gsi); gsi->definition = this; } si=anchorList->next(); @@ -216,10 +258,10 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) void Definition::writeDocAnchorsToTagFile() { - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_sectionDict) + if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); - QDictIterator<SectionInfo> sdi(*m_sectionDict); + QDictIterator<SectionInfo> sdi(*m_impl->sectionDict); SectionInfo *si; for (;(si=sdi.current());++sdi) { @@ -272,13 +314,13 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, doc=d; } //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); - if (m_details==0) + if (m_impl->details==0) { - m_details = new DocInfo; + m_impl->details = new DocInfo; } - m_details->doc = doc; - m_details->file = docFile; - m_details->line = docLine; + m_impl->details->doc = doc; + m_impl->details->file = docFile; + m_impl->details->line = docLine; } #define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase) @@ -292,24 +334,24 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri outputLanguage!="Korean"; //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); - if (m_brief==0) + if (m_impl->brief==0) { - m_brief = new DocInfo; + m_impl->brief = new DocInfo; } - m_brief->doc=QCString(b).stripWhiteSpace(); - int bl=m_brief->doc.length(); + m_impl->brief->doc=QCString(b).stripWhiteSpace(); + int bl=m_impl->brief->doc.length(); if (bl>0 && needsDot) // add punctuation if needed { - switch(m_brief->doc.at(bl-1)) + switch(m_impl->brief->doc.at(bl-1)) { case '.': case '!': case '?': break; default: - if (uni_isupper(m_brief->doc.at(0))) m_brief->doc+='.'; + if (uni_isupper(m_impl->brief->doc.at(0))) m_impl->brief->doc+='.'; break; } } - m_brief->file = briefFile; - m_brief->line = briefLine; + m_impl->brief->file = briefFile; + m_impl->brief->line = briefLine; } /*! Reads a fragment of code from file \a fileName starting at @@ -435,7 +477,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.pushGeneratorState(); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); if (Config_getBool("SOURCE_BROWSER") && - m_body && m_body->startLine!=-1 && m_body->fileDef) + m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef) { QCString refText = theTranslator->trDefinedAtLineInSourceFile(); int lineMarkerPos = refText.find("@0"); @@ -443,8 +485,8 @@ void Definition::writeSourceDef(OutputList &ol,const char *) if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. { QCString lineStr,anchorStr; - lineStr.sprintf("%d",m_body->startLine); - anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_body->startLine); + lineStr.sprintf("%d",m_impl->body->startLine); + anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_impl->body->startLine); ol.newParagraph(); if (lineMarkerPos<fileMarkerPos) // line marker before file marker { @@ -452,7 +494,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.parseText(refText.left(lineMarkerPos)); ol.disableAllBut(OutputGenerator::Html); // write line link (HTML only) - ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), + ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), anchorStr,lineStr); ol.enableAll(); ol.disable(OutputGenerator::Html); @@ -466,12 +508,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.disableAllBut(OutputGenerator::Html); // write file link (HTML only) - ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), - 0,m_body->fileDef->name()); + ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), + 0,m_impl->body->fileDef->name()); ol.enableAll(); ol.disable(OutputGenerator::Html); // write normal text (Latex/Man only) - ol.docify(m_body->fileDef->name()); + ol.docify(m_impl->body->fileDef->name()); ol.enableAll(); // write text right from file marker @@ -484,12 +526,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.parseText(refText.left(fileMarkerPos)); ol.disableAllBut(OutputGenerator::Html); // write file link (HTML only) - ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), - 0,m_body->fileDef->name()); + ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), + 0,m_impl->body->fileDef->name()); ol.enableAll(); ol.disable(OutputGenerator::Html); // write normal text (Latex/Man only) - ol.docify(m_body->fileDef->name()); + ol.docify(m_impl->body->fileDef->name()); ol.enableAll(); // write text between markers @@ -498,7 +540,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.disableAllBut(OutputGenerator::Html); // write line link (HTML only) - ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), + ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), anchorStr,lineStr); ol.enableAll(); ol.disable(OutputGenerator::Html); @@ -522,15 +564,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *) void Definition::setBodySegment(int bls,int ble) { //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data()); - if (m_body==0) m_body = new BodyInfo; - m_body->startLine=bls; - m_body->endLine=ble; + if (m_impl->body==0) m_impl->body = new BodyInfo; + m_impl->body->startLine=bls; + m_impl->body->endLine=ble; } void Definition::setBodyDef(FileDef *fd) { - if (m_body==0) m_body = new BodyInfo; - m_body->fileDef=fd; + if (m_impl->body==0) m_impl->body = new BodyInfo; + m_impl->body->fileDef=fd; } /*! Write code of this definition into the documentation */ @@ -540,16 +582,16 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), // m_startBodyLine,m_endBodyLine,m_bodyDef); if (Config_getBool("INLINE_SOURCES") && - m_body && m_body->startLine!=-1 && - m_body->endLine>=m_body->startLine && m_body->fileDef) + m_impl->body && m_impl->body->startLine!=-1 && + m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef) { QCString codeFragment; - int actualStart=m_body->startLine,actualEnd=m_body->endLine; - if (readCodeFragment(m_body->fileDef->absFilePath(), + int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine; + if (readCodeFragment(m_impl->body->fileDef->absFilePath(), actualStart,actualEnd,codeFragment) ) { - ParserInterface *pIntf = Doxygen::parserManager->getParser(m_defFileExt); + ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt); pIntf->resetCodeParserState(); //printf("Read:\n`%s'\n\n",codeFragment.data()); MemberDef *thisMd = 0; @@ -560,7 +602,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) codeFragment, // input FALSE, // isExample 0, // exampleName - m_body->fileDef, // fileDef + m_impl->body->fileDef, // fileDef actualStart, // startLine actualEnd, // endLine TRUE, // inlineFragment @@ -671,7 +713,7 @@ void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName) { if (Config_getBool("REFERENCED_BY_RELATION")) { - writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE); + writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE); } } @@ -679,7 +721,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) { if (Config_getBool("REFERENCES_RELATION")) { - writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE); + writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE); } } @@ -688,19 +730,19 @@ bool Definition::hasDocumentation() const static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); bool hasDocs = - (m_details && !m_details->doc.isEmpty()) || // has detailed docs - (m_brief && !m_brief->doc.isEmpty()) || // has brief description + (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs + (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description extractAll || // extract everything - (sourceBrowser && m_body && - m_body->startLine!=-1 && m_body->fileDef); // link to definition + (sourceBrowser && m_impl->body && + m_impl->body->startLine!=-1 && m_impl->body->fileDef); // link to definition return hasDocs; } bool Definition::hasUserDocumentation() const { bool hasDocs = - (m_details && !m_details->doc.isEmpty()) || - (m_brief && !m_brief->doc.isEmpty()); + (m_impl->details && !m_impl->details->doc.isEmpty()) || + (m_impl->brief && !m_impl->brief->doc.isEmpty()); return hasDocs; } @@ -716,13 +758,13 @@ void Definition::addSourceReferencedBy(MemberDef *md) name.prepend(scope+"::"); } - if (m_sourceRefByDict==0) + if (m_impl->sourceRefByDict==0) { - m_sourceRefByDict = new MemberSDict; + m_impl->sourceRefByDict = new MemberSDict; } - if (m_sourceRefByDict->find(name)==0) + if (m_impl->sourceRefByDict->find(name)==0) { - m_sourceRefByDict->inSort(name,md); + m_impl->sourceRefByDict->inSort(name,md); } } } @@ -739,14 +781,14 @@ void Definition::addSourceReferences(MemberDef *md) name.prepend(scope+"::"); } - if (m_sourceRefsDict==0) + if (m_impl->sourceRefsDict==0) { - m_sourceRefsDict = new MemberSDict; + m_impl->sourceRefsDict = new MemberSDict; } - if (m_sourceRefsDict->find(name)==0) + if (m_impl->sourceRefsDict->find(name)==0) { //printf("Adding reference %s->%s\n",md->name().data(),name.data()); - m_sourceRefsDict->inSort(name,md); + m_impl->sourceRefsDict->inSort(name,md); } } } @@ -763,45 +805,45 @@ void Definition::addInnerCompound(Definition *) QCString Definition::qualifiedName() { - if (!m_qualifiedName.isEmpty()) return m_qualifiedName; + if (!m_impl->qualifiedName.isEmpty()) return m_impl->qualifiedName; //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data()); - if (m_outerScope==0) + if (m_impl->outerScope==0) { - if (m_localName=="<globalScope>") return ""; - else return m_localName; + if (m_impl->localName=="<globalScope>") return ""; + else return m_impl->localName; } - if (m_outerScope->name()=="<globalScope>") + if (m_impl->outerScope->name()=="<globalScope>") { - m_qualifiedName = m_localName.copy(); + m_impl->qualifiedName = m_impl->localName.copy(); } else { - m_qualifiedName = m_outerScope->qualifiedName()+"::"+m_localName; + m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+"::"+m_impl->localName; } //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data()); - return m_qualifiedName; + return m_impl->qualifiedName; }; void Definition::setOuterScope(Definition *d) { - if (m_outerScope!=d) + if (m_impl->outerScope!=d) { - m_qualifiedName.resize(0); // flush cached scope name - m_outerScope = d; + m_impl->qualifiedName.resize(0); // flush cached scope name + m_impl->outerScope = d; } } QCString Definition::localName() const { - return m_localName; + return m_impl->localName; } void Definition::makePartOfGroup(GroupDef *gd) { - if (m_partOfGroups==0) m_partOfGroups = new GroupList; - m_partOfGroups->append(gd); + if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList; + m_impl->partOfGroups->append(gd); } void Definition::setRefItems(const QList<ListItemInfo> *sli) @@ -809,16 +851,16 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli) if (sli) { // deep copy the list - if (m_xrefListItems==0) + if (m_impl->xrefListItems==0) { - m_xrefListItems=new QList<ListItemInfo>; - m_xrefListItems->setAutoDelete(TRUE); + m_impl->xrefListItems=new QList<ListItemInfo>; + m_impl->xrefListItems->setAutoDelete(TRUE); } QListIterator<ListItemInfo> slii(*sli); ListItemInfo *lii; for (slii.toFirst();(lii=slii.current());++slii) { - m_xrefListItems->append(new ListItemInfo(*lii)); + m_impl->xrefListItems->append(new ListItemInfo(*lii)); } } } @@ -828,10 +870,10 @@ void Definition::mergeRefItems(Definition *d) if (d->xrefListItems()) { // deep copy the list - if (m_xrefListItems==0) + if (m_impl->xrefListItems==0) { - m_xrefListItems=new QList<ListItemInfo>; - m_xrefListItems->setAutoDelete(TRUE); + m_impl->xrefListItems=new QList<ListItemInfo>; + m_impl->xrefListItems->setAutoDelete(TRUE); } QListIterator<ListItemInfo> slii(*d->xrefListItems()); ListItemInfo *lii; @@ -839,7 +881,7 @@ void Definition::mergeRefItems(Definition *d) { if (getXRefListId(lii->type)==-1) { - m_xrefListItems->append(new ListItemInfo(*lii)); + m_impl->xrefListItems->append(new ListItemInfo(*lii)); } } } @@ -847,9 +889,9 @@ void Definition::mergeRefItems(Definition *d) int Definition::getXRefListId(const char *listName) const { - if (m_xrefListItems) + if (m_impl->xrefListItems) { - QListIterator<ListItemInfo> slii(*m_xrefListItems); + QListIterator<ListItemInfo> slii(*m_impl->xrefListItems); ListItemInfo *lii; for (slii.toFirst();(lii=slii.current());++slii) { @@ -864,13 +906,13 @@ int Definition::getXRefListId(const char *listName) const const QList<ListItemInfo> *Definition::xrefListItems() const { - return m_xrefListItems; + return m_impl->xrefListItems; } QCString Definition::convertNameToFile(const char *name,bool allowDots) const { - if (!m_ref.isEmpty()) + if (!m_impl->ref.isEmpty()) { return name; } @@ -882,11 +924,11 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const void Definition::writePathFragment(OutputList &ol) const { - if (m_outerScope && m_outerScope!=Doxygen::globalScope) + if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope) { - m_outerScope->writePathFragment(ol); - if (m_outerScope->definitionType()==Definition::TypeClass || - m_outerScope->definitionType()==Definition::TypeNamespace) + m_impl->outerScope->writePathFragment(ol); + if (m_impl->outerScope->definitionType()==Definition::TypeClass || + m_impl->outerScope->definitionType()==Definition::TypeNamespace) { if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) { @@ -916,13 +958,13 @@ void Definition::writePathFragment(OutputList &ol) const } else { - ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_localName); + ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_impl->localName); } } else { ol.startBold(); - ol.docify(m_localName); + ol.docify(m_impl->localName); ol.endBold(); } } @@ -939,3 +981,144 @@ void Definition::writeNavigationPath(OutputList &ol) const ol.popGeneratorState(); } +const QCString& Definition::name() const +{ + return m_impl->name; +} + +QCString Definition::symbolName() const +{ + return m_impl->symbolName; +} + +QCString Definition::documentation() const +{ + return m_impl->details ? m_impl->details->doc : QCString(""); +} + +int Definition::docLine() const +{ + return m_impl->details ? m_impl->details->line : 1; +} + +QCString Definition::docFile() const +{ + return m_impl->details ? m_impl->details->file : QCString("<"+m_impl->name+">"); +} + +QCString Definition::briefDescription() const +{ + return m_impl->brief ? m_impl->brief->doc : QCString(""); +} + +int Definition::briefLine() const +{ + return m_impl->brief ? m_impl->brief->line : 1; +} + +QCString Definition::briefFile() const +{ + return m_impl->brief ? m_impl->brief->file : QCString("<"+m_impl->name+">"); +} + +QCString Definition::getDefFileName() const +{ + return m_impl->defFileName; +} + +QCString Definition::getDefFileExtension() const +{ + return m_impl->defFileExt; +} + +int Definition::getDefLine() const +{ + return m_impl->defLine; +} + +bool Definition::isHidden() const +{ + return m_impl->hidden; +} + +bool Definition::isVisibleInProject() const +{ + return m_impl->hidden || isLinkableInProject(); +} + +bool Definition::isVisible() const +{ + return m_impl->hidden || isLinkable(); +} + +QCString Definition::getReference() const +{ + return m_impl->ref; +} + +bool Definition::isReference() const +{ + return !m_impl->ref.isEmpty(); +} + +int Definition::getStartBodyLine() const +{ + return m_impl->body ? m_impl->body->startLine : -1; +} + +int Definition::getEndBodyLine() const +{ + return m_impl->body ? m_impl->body->endLine : -1; +} + +FileDef *Definition::getBodyDef() +{ + return m_impl->body ? m_impl->body->fileDef : 0; +} + +GroupList *Definition::partOfGroups() const +{ + return m_impl->partOfGroups; +} + +Definition *Definition::getOuterScope() const +{ + return m_impl->outerScope; +} + +MemberSDict *Definition::getReferencesMembers() const +{ + return m_impl->sourceRefsDict; +} + +MemberSDict *Definition::getReferencedByMembers() const +{ + return m_impl->sourceRefByDict; +} + +void Definition::setName(const char *name) +{ + m_impl->name=name; +} + +void Definition::setReference(const char *r) +{ + m_impl->ref=r; +} + +void Definition::setSymbolName(const QCString &name) +{ + m_impl->symbolName=name; +} + +void Definition::setHidden(bool b) +{ + m_impl->hidden = b; +} + +void Definition::setLocalName(const QCString name) +{ + m_impl->localName=name; +} + + diff --git a/src/definition.h b/src/definition.h index 5e342d6..c5cbfae 100644 --- a/src/definition.h +++ b/src/definition.h @@ -32,6 +32,7 @@ class GroupList; struct ListItemInfo; struct SectionInfo; class Definition; +class DefinitionImpl; struct ReachableDefinition { @@ -71,7 +72,10 @@ class DefinitionIntf virtual DefType definitionType() const = 0; }; -/*! The common base class of all entity definitions found in the sources. */ +/*! The common base class of all entity definitions found in the sources. + * This can be a class or a member function, or a file, or a namespace, etc. + * Use definitionType() to find which type of definition this is. + */ class Definition : public DefinitionIntf { public: @@ -90,19 +94,18 @@ class Definition : public DefinitionIntf //----------------------------------------------------------------------------------- /*! Returns the name of the definition */ - const QCString& name() const { return m_name; } + const QCString& name() const; /*! Returns the local name without any scope qualifiers. */ QCString localName() const; - /*! Returns the base name of the output file that contains this - * definition. + /*! Returns the fully qualified name of this definition */ virtual QCString qualifiedName(); /*! Returns the name of this definition as it appears in the symbol map. */ - QCString symbolName() const { return m_symbolName; } + QCString symbolName() const; /*! Returns the base file name (without extension) of this definition. * as it is referenced to/written to disk. @@ -113,35 +116,35 @@ class Definition : public DefinitionIntf virtual QCString getSourceFileBase() const { ASSERT(0); return "NULL"; } /*! Returns the detailed description of this definition */ - QCString documentation() const { return m_details ? m_details->doc : QCString(""); } + QCString documentation() const; /*! Returns the line number at which the detailed documentation was found. */ - int docLine() const { return m_details ? m_details->line : 1; } + int docLine() const; /*! Returns the file in which the detailed documentation block was found. * This can differ from getDefFileName(). */ - QCString docFile() const { return m_details ? m_details->file : QCString("<"+m_name+">"); } + QCString docFile() const; /*! Returns the brief description of this definition */ - QCString briefDescription() const { return m_brief ? m_brief->doc : QCString(""); } + QCString briefDescription() const; /*! Returns the line number at which the brief description was found. */ - int briefLine() const { return m_brief ? m_brief->line : 1; } + int briefLine() const; /*! Returns the file in which the brief description was found. * This can differ from getDefFileName(). */ - QCString briefFile() const { return m_brief ? m_brief->file : QCString("<"+m_name+">"); } + QCString briefFile() const; /*! returns the file in which this definition was found */ - QCString getDefFileName() const { return m_defFileName; } + QCString getDefFileName() const; /*! returns the file in which this definition was found */ - QCString getDefFileExtension() const { return m_defFileExt; } + QCString getDefFileExtension() const; /*! returns the line number at which the definition was found */ - int getDefLine() const { return m_defLine; } + int getDefLine() const; /*! Returns TRUE iff the definition is documented * (which could be generated documentation) @@ -165,45 +168,54 @@ class Definition : public DefinitionIntf /*! Returns TRUE iff the name is part of this project and * may appear in the output */ - virtual bool isVisibleInProject() const - { return m_hidden || isLinkableInProject(); } + virtual bool isVisibleInProject() const; /*! Returns TRUE iff the name may appear in the output */ - virtual bool isVisible() const - { return m_hidden || isLinkable(); } + virtual bool isVisible() const; - bool isHidden() const { return m_hidden; } + bool isHidden() const; /*! If this definition was imported via a tag file, this function * returns the tagfile for the external project. This can be * translated into an external link target via * Doxygen::tagDestinationDict */ - virtual QCString getReference() const { return m_ref; } + virtual QCString getReference() const; /*! Returns TRUE if this definition is imported via a tag file. */ - virtual bool isReference() const { return !m_ref.isEmpty(); } + virtual bool isReference() const; + + /*! Returns the first line of the body of this item (applicable to classes and + * functions). + */ + int getStartBodyLine() const; + + /*! Returns the last line of the body of this item (applicable to classes and + * functions). + */ + int getEndBodyLine() const; - int getStartBodyLine() const { return m_body ? m_body->startLine : -1; } - int getEndBodyLine() const { return m_body ? m_body->endLine : -1; } - FileDef *getBodyDef() { return m_body ? m_body->fileDef : 0; } + /*! Returns the file in which the body of this item is located or 0 if no + * body is available. + */ + FileDef *getBodyDef(); - GroupList *partOfGroups() const { return m_partOfGroups; } + GroupList *partOfGroups() const; const QList<ListItemInfo> *xrefListItems() const; virtual Definition *findInnerCompound(const char *name); - virtual Definition *getOuterScope() const { return m_outerScope; } + virtual Definition *getOuterScope() const; - MemberSDict *getReferencesMembers() const { return m_sourceRefsDict; } - MemberSDict *getReferencedByMembers() const { return m_sourceRefByDict; } + MemberSDict *getReferencesMembers() const; + MemberSDict *getReferencedByMembers() const; //----------------------------------------------------------------------------------- // ---- setters ----- //----------------------------------------------------------------------------------- /*! Sets a new \a name for the definition */ - void setName(const char *name) { m_name=name; } + void setName(const char *name); /*! Sets the documentation of this definition to \a d. */ void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE); @@ -214,11 +226,11 @@ class Definition : public DefinitionIntf void setBriefDescription(const char *b,const char *briefFile,int briefLine); /*! Sets the tag file id via which this definition was imported. */ - void setReference(const char *r) { m_ref=r; } + void setReference(const char *r); /*! Sets the name of this definition as it should appear in the symbol map. */ - void setSymbolName(const QCString &name) { m_symbolName=name; } + void setSymbolName(const QCString &name); /*! Add the list of anchors that mark the sections that are found in the * documentation. @@ -236,7 +248,7 @@ class Definition : public DefinitionIntf virtual void addInnerCompound(Definition *d); virtual void setOuterScope(Definition *d); - void setHidden(bool b) { m_hidden = b; } + void setHidden(bool b); //----------------------------------------------------------------------------------- // --- actions ---- @@ -258,46 +270,21 @@ class Definition : public DefinitionIntf void writeDocAnchorsToTagFile(); protected: - void setLocalName(const QCString name) { m_localName=name; } + void setLocalName(const QCString name); - private: int getXRefListId(const char *listName) const; void writeSourceRefList(OutputList &ol,const char *scopeName, const QCString &text,MemberSDict *members,bool); - //----------------------------------------------------------------------------------- - // --- member variables - //----------------------------------------------------------------------------------- - - SectionDict *m_sectionDict; // dictionary of all sections - - MemberSDict *m_sourceRefByDict; - MemberSDict *m_sourceRefsDict; - - DocInfo *m_details; - DocInfo *m_brief; - BodyInfo *m_body; + virtual void flushToDisk() {} + virtual void loadFromDisk() {} + virtual void makeResident() { if (m_impl==0) loadFromDisk(); } + virtual bool isResident() const { return m_impl!=0; } - /*! The class, namespace in which this class is located - */ - QCString m_name; // name of the definition - QCString m_localName; // local (unqualified) name of the definition - // in the future m_name should become m_localName - QCString m_symbolName; - QCString m_qualifiedName; - QCString m_ref; // reference to external documentation - - QList<ListItemInfo> *m_xrefListItems; - bool m_isSymbol; - bool m_hidden; - - Definition *m_outerScope; - GroupList *m_partOfGroups; + private: + DefinitionImpl *m_impl; // internal structure holding all private data + uint64 m_storagePos; // location where the item is stored in file (if impl==0) - // where the item was found - QCString m_defFileName; - int m_defLine; - QCString m_defFileExt; }; class DefinitionList : public QList<Definition>, public DefinitionIntf diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index baa0115..5918966 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -171,6 +171,12 @@ void NamespaceDef::addMembersToMemberGroup() void NamespaceDef::insertMember(MemberDef *md) { + MemberList *allMemberList = getMemberList(MemberList::allMembersList); + if (allMemberList==0) + { + allMemberList = new MemberList(MemberList::allMembersList); + m_memberLists.append(allMemberList); + } allMemberList->append(md); //static bool sortBriefDocs=Config_getBool("SORT_BRIEF_DOCS"); switch(md->memberType()) @@ -261,7 +267,8 @@ void NamespaceDef::insertMember(MemberDef *md) void NamespaceDef::computeAnchors() { - setAnchors(0,'a',allMemberList); + MemberList *allMemberList = getMemberList(MemberList::allMembersList); + if (allMemberList) setAnchors(0,'a',allMemberList); } void NamespaceDef::writeDetailedDocumentation(OutputList &ol) @@ -420,7 +427,8 @@ void NamespaceDef::writeDocumentation(OutputList &ol) if (Config_getBool("SEPARATE_MEMBER_PAGES")) { - allMemberList->sort(); + MemberList *allMemberList = getMemberList(MemberList::allMembersList); + if (allMemberList) allMemberList->sort(); writeMemberPages(ol); } } @@ -495,31 +503,35 @@ void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) co ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); - MemberListIterator mli(*allMemberList); - MemberDef *md; - for (mli.toFirst();(md=mli.current());++mli) + MemberList *allMemberList = getMemberList(MemberList::allMembersList); + if (allMemberList) { - if (md->getNamespaceDef()==this && md->isLinkable()) + MemberListIterator mli(*allMemberList); + MemberDef *md; + for (mli.toFirst();(md=mli.current());++mli) { - ol.writeString(" <tr><td class=\"navtab\">"); - if (md->isLinkableInProject()) + if (md->getNamespaceDef()==this && md->isLinkable()) { - if (md==currentMd) // selected item => highlight - { - ol.writeString("<a class=\"qindexHL\" "); - } - else + ol.writeString(" <tr><td class=\"navtab\">"); + if (md->isLinkableInProject()) { - ol.writeString("<a class=\"qindex\" "); + if (md==currentMd) // selected item => highlight + { + ol.writeString("<a class=\"qindexHL\" "); + } + else + { + ol.writeString("<a class=\"qindex\" "); + } + ol.writeString("href=\""); + if (createSubDirs) ol.writeString("../../"); + ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor()); + ol.writeString("\">"); + ol.writeString(md->localName()); + ol.writeString("</a>"); } - ol.writeString("href=\""); - if (createSubDirs) ol.writeString("../../"); - ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor()); - ol.writeString("\">"); - ol.writeString(md->localName()); - ol.writeString("</a>"); + ol.writeString("</td></tr>\n"); } - ol.writeString("</td></tr>\n"); } } @@ -529,8 +541,9 @@ void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) co int NamespaceDef::countMembers() { - allMemberList->countDocMembers(); - return allMemberList->numDocMembers()+classSDict->count(); + MemberList *allMemberList = getMemberList(MemberList::allMembersList); + if (allMemberList) allMemberList->countDocMembers(); + return (allMemberList ? allMemberList->numDocMembers() : 0)+classSDict->count(); } void NamespaceDef::addUsingDirective(NamespaceDef *nd) diff --git a/src/namespacedef.h b/src/namespacedef.h index e32f170..a1355d5 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -101,7 +101,7 @@ class NamespaceDef : public Definition SDict<Definition> *usingDeclList; SDict<Definition> *m_innerCompounds; - MemberList *allMemberList; + //MemberList *allMemberList; QList<MemberList> m_memberLists; MemberGroupSDict *memberGroupSDict; ClassSDict *classSDict; |