summaryrefslogtreecommitdiffstats
path: root/src/classdef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/classdef.cpp')
-rw-r--r--src/classdef.cpp130
1 files changed, 52 insertions, 78 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 9586731..f0d84ee 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -177,7 +177,7 @@ class ClassDefImpl : public DefinitionMixin<ClassDefMutable>
virtual QCString getReference() const;
virtual bool isReference() const;
virtual bool isLocal() const;
- virtual ClassSDict *getClassSDict() const;
+ virtual ClassLinkedRefMap getClasses() const;
virtual bool hasDocumentation() const;
virtual bool hasDetailedDescription() const;
virtual QCString collaborationGraphFileName() const;
@@ -237,11 +237,10 @@ class ClassDefImpl : public DefinitionMixin<ClassDefMutable>
virtual bool isEmbeddedInOuterScope() const;
virtual bool isSimple() const;
virtual const ClassList *taggedInnerClasses() const;
- virtual ClassDef *tagLessReference() const;
+ virtual const ClassDef *tagLessReference() const;
virtual MemberDef *isSmartPointer() const;
virtual bool isJavaEnum() const;
virtual bool isGeneric() const;
- virtual const ClassSDict *innerClasses() const;
virtual QCString title() const;
virtual QCString generatedFromFiles() const;
virtual const FileList &usedFiles() const;
@@ -283,7 +282,7 @@ class ClassDefImpl : public DefinitionMixin<ClassDefMutable>
virtual void setCategoryOf(ClassDef *cd);
virtual void setUsedOnly(bool b);
virtual void addTaggedInnerClass(ClassDef *cd);
- virtual void setTagLessReference(ClassDef *cd);
+ virtual void setTagLessReference(const ClassDef *cd);
virtual void setName(const char *name);
virtual void setMetaData(const char *md);
virtual void findSectionsInDocumentation();
@@ -406,8 +405,8 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef>
{ return getCdAlias()->isReference(); }
virtual bool isLocal() const
{ return getCdAlias()->isLocal(); }
- virtual ClassSDict *getClassSDict() const
- { return getCdAlias()->getClassSDict(); }
+ virtual ClassLinkedRefMap getClasses() const
+ { return getCdAlias()->getClasses(); }
virtual bool hasDocumentation() const
{ return getCdAlias()->hasDocumentation(); }
virtual bool hasDetailedDescription() const
@@ -521,7 +520,7 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef>
{ return getCdAlias()->isSimple(); }
virtual const ClassList *taggedInnerClasses() const
{ return getCdAlias()->taggedInnerClasses(); }
- virtual ClassDef *tagLessReference() const
+ virtual const ClassDef *tagLessReference() const
{ return getCdAlias()->tagLessReference(); }
virtual MemberDef *isSmartPointer() const
{ return getCdAlias()->isSmartPointer(); }
@@ -529,8 +528,6 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef>
{ return getCdAlias()->isJavaEnum(); }
virtual bool isGeneric() const
{ return getCdAlias()->isGeneric(); }
- virtual const ClassSDict *innerClasses() const
- { return getCdAlias()->innerClasses(); }
virtual QCString title() const
{ return getCdAlias()->title(); }
virtual QCString generatedFromFiles() const
@@ -657,7 +654,7 @@ class ClassDefImpl::IMPL
/*! The inner classes contained in this class. Will be 0 if there are
* no inner classes.
*/
- ClassSDict *innerClasses = 0;
+ ClassLinkedRefMap innerClasses;
/* classes for the collaboration diagram */
UsesClassDict *usesImplClassDict = 0;
@@ -728,7 +725,7 @@ class ClassDefImpl::IMPL
MemberDef *arrowOperator = 0;
ClassList *taggedInnerClasses = 0;
- ClassDef *tagLessRef = 0;
+ const ClassDef *tagLessRef = 0;
/** Does this class represent a Java style enum? */
bool isJavaEnum = false;
@@ -761,7 +758,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
usesIntfClassDict=0;
constraintClassDict=0;
memberGroupSDict = 0;
- innerClasses = 0;
subGrouping=Config_getBool(SUBGROUPING);
templateInstances = 0;
variableInstances = 0;
@@ -810,7 +806,6 @@ ClassDefImpl::IMPL::~IMPL()
delete constraintClassDict;
delete incInfo;
delete memberGroupSDict;
- delete innerClasses;
delete templateInstances;
delete variableInstances;
delete templBaseClassNames;
@@ -2051,18 +2046,12 @@ void ClassDefImpl::writeMemberGroups(OutputList &ol,bool showInline) const
void ClassDefImpl::writeNestedClasses(OutputList &ol,const QCString &title) const
{
// nested classes
- if (m_impl->innerClasses)
- {
- m_impl->innerClasses->writeDeclaration(ol,0,title,TRUE);
- }
+ m_impl->innerClasses.writeDeclaration(ol,0,title,TRUE);
}
void ClassDefImpl::writeInlineClasses(OutputList &ol) const
{
- if (m_impl->innerClasses)
- {
- m_impl->innerClasses->writeDocumentation(ol,this);
- }
+ m_impl->innerClasses.writeDocumentation(ol,this);
}
void ClassDefImpl::startMemberDocumentation(OutputList &ol) const
@@ -2133,8 +2122,7 @@ void ClassDefImpl::writeSummaryLinks(OutputList &ol) const
for (eli.toFirst();(lde=eli.current());++eli)
{
if (lde->kind()==LayoutDocEntry::ClassNestedClasses &&
- m_impl->innerClasses &&
- m_impl->innerClasses->declVisible()
+ m_impl->innerClasses.declVisible()
)
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
@@ -2236,20 +2224,15 @@ void ClassDefImpl::writeTagFile(FTextStream &tagFile)
{
case LayoutDocEntry::ClassNestedClasses:
{
- if (m_impl->innerClasses)
+ for (const auto &innerCd : m_impl->innerClasses)
{
- ClassSDict::Iterator cli(*m_impl->innerClasses);
- ClassDef *innerCd;
- for (cli.toFirst();(innerCd=cli.current());++cli)
+ if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
+ protectionLevelVisible(innerCd->protection()) &&
+ !innerCd->isEmbeddedInOuterScope()
+ )
{
- if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
- protectionLevelVisible(innerCd->protection()) &&
- !innerCd->isEmbeddedInOuterScope()
- )
- {
- tagFile << " <class kind=\"" << innerCd->compoundTypeString() <<
- "\">" << convertToXML(innerCd->name()) << "</class>" << endl;
- }
+ tagFile << " <class kind=\"" << innerCd->compoundTypeString() <<
+ "\">" << convertToXML(innerCd->name()) << "</class>" << endl;
}
}
}
@@ -2906,27 +2889,22 @@ void ClassDefImpl::writeDocumentationForInnerClasses(OutputList &ol) const
{
// write inner classes after the parent, so the tag files contain
// the definition in proper order!
- if (m_impl->innerClasses)
+ for (const auto &innerCd : m_impl->innerClasses)
{
- ClassSDict::Iterator cli(*m_impl->innerClasses);
- ClassDef *innerCd;
- for (cli.toFirst();(innerCd=cli.current());++cli)
+ ClassDefMutable *innerCdm = toClassDefMutable(innerCd);
+ if (innerCdm)
{
- ClassDefMutable *innerCdm = toClassDefMutable(innerCd);
- if (innerCdm)
+ if (
+ innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
+ protectionLevelVisible(innerCd->protection()) &&
+ !innerCd->isEmbeddedInOuterScope()
+ )
{
- if (
- innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
- protectionLevelVisible(innerCd->protection()) &&
- !innerCd->isEmbeddedInOuterScope()
- )
- {
- msg("Generating docs for nested compound %s...\n",qPrint(innerCd->name()));
- innerCdm->writeDocumentation(ol);
- innerCdm->writeMemberList(ol);
- }
- innerCdm->writeDocumentationForInnerClasses(ol);
+ msg("Generating docs for nested compound %s...\n",qPrint(innerCd->name()));
+ innerCdm->writeDocumentation(ol);
+ innerCdm->writeMemberList(ol);
}
+ innerCdm->writeDocumentationForInnerClasses(ol);
}
}
}
@@ -3251,10 +3229,17 @@ void ClassDefImpl::addTypeConstraint(const QCString &typeConstraint,const QCStri
ClassDefMutable *cd = resolver.resolveClassMutable(this,typeConstraint);
if (cd==0 && !hideUndocRelation)
{
- cd = new ClassDefImpl(getDefFileName(),getDefLine(),getDefColumn(),typeConstraint,ClassDef::Class);
+ cd = toClassDefMutable(
+ Doxygen::hiddenClassLinkedMap->add(typeConstraint,
+ std::unique_ptr<ClassDef>(
+ new ClassDefImpl(
+ getDefFileName(),getDefLine(),
+ getDefColumn(),
+ typeConstraint,
+ ClassDef::Class))));
+
cd->setUsedOnly(TRUE);
cd->setLanguage(getLanguage());
- Doxygen::hiddenClasses->append(typeConstraint,cd);
//printf("Adding undocumented constraint '%s' to class %s on type %s\n",
// typeConstraint.data(),name().data(),type.data());
}
@@ -4046,23 +4031,13 @@ void ClassDefImpl::addInnerCompound(const Definition *d)
if (d->definitionType()==Definition::TypeClass) // only classes can be
// nested in classes.
{
- if (m_impl->innerClasses==0)
- {
- m_impl->innerClasses = new ClassSDict(17);
- }
- m_impl->innerClasses->inSort(d->localName(),toClassDef(d));
+ m_impl->innerClasses.add(d->localName(),toClassDef(d));
}
}
const Definition *ClassDefImpl::findInnerCompound(const char *name) const
{
- const Definition *result=0;
- if (name==0) return 0;
- if (m_impl->innerClasses)
- {
- result = m_impl->innerClasses->find(name);
- }
- return result;
+ return m_impl->innerClasses.find(name);
}
ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName,
@@ -4354,10 +4329,14 @@ void ClassDefImpl::sortMemberLists()
{
if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
}
- if (m_impl->innerClasses)
- {
- m_impl->innerClasses->sort();
- }
+ std::sort(m_impl->innerClasses.begin(),
+ m_impl->innerClasses.end(),
+ [](const auto &c1,const auto &c2)
+ {
+ return Config_getBool(SORT_BY_SCOPE_NAME) ?
+ qstricmp(c1->name(), c2->name() )<0 :
+ qstricmp(c1->className(), c2->className())<0 ;
+ });
}
int ClassDefImpl::countMemberDeclarations(MemberListType lt,const ClassDef *inheritedFrom,
@@ -4728,7 +4707,7 @@ bool ClassDefImpl::isLocal() const
return m_impl->isLocal;
}
-ClassSDict *ClassDefImpl::getClassSDict() const
+ClassLinkedRefMap ClassDefImpl::getClasses() const
{
return m_impl->innerClasses;
}
@@ -5037,12 +5016,12 @@ void ClassDefImpl::addTaggedInnerClass(ClassDef *cd)
m_impl->taggedInnerClasses->append(cd);
}
-ClassDef *ClassDefImpl::tagLessReference() const
+const ClassDef *ClassDefImpl::tagLessReference() const
{
return m_impl->tagLessRef;
}
-void ClassDefImpl::setTagLessReference(ClassDef *cd)
+void ClassDefImpl::setTagLessReference(const ClassDef *cd)
{
m_impl->tagLessRef = cd;
}
@@ -5081,11 +5060,6 @@ bool ClassDefImpl::isExtension() const
return b;
}
-const ClassSDict *ClassDefImpl::innerClasses() const
-{
- return m_impl->innerClasses;
-}
-
const FileList &ClassDefImpl::usedFiles() const
{
return m_impl->files;