summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/definition.cpp479
-rw-r--r--src/definition.h117
-rw-r--r--src/namespacedef.cpp59
-rw-r--r--src/namespacedef.h2
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;