@@ -196,7 +196,7 @@ class ClassDefImpl : public DefinitionMixin<ClassDefMutable>
196
196
virtual bool isBaseClass (const ClassDef *bcd,bool followInstances,int level=0 ) const ;
197
197
virtual bool isSubClass (ClassDef *bcd,int level=0 ) const ;
198
198
virtual bool isAccessibleMember (const MemberDef *md) const ;
199
- virtual QDict<ClassDef> * getTemplateInstances () const ;
199
+ virtual const TemplateInstanceList & getTemplateInstances () const ;
200
200
virtual const ClassDef *templateMaster () const ;
201
201
virtual bool isTemplate () const ;
202
202
virtual IncludeInfo *includeInfo () const ;
@@ -441,7 +441,7 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef>
441
441
{ return getCdAlias ()->isSubClass (bcd,level); }
442
442
virtual bool isAccessibleMember (const MemberDef *md) const
443
443
{ return getCdAlias ()->isAccessibleMember (md); }
444
- virtual QDict<ClassDef> * getTemplateInstances () const
444
+ virtual const TemplateInstanceList & getTemplateInstances () const
445
445
{ return getCdAlias ()->getTemplateInstances (); }
446
446
virtual const ClassDef *templateMaster () const
447
447
{ return getCdAlias ()->templateMaster (); }
@@ -652,7 +652,7 @@ class ClassDefImpl::IMPL
652
652
/* ! Template instances that exists of this class, the key in the
653
653
* dictionary is the template argument list.
654
654
*/
655
- mutable QDict<ClassDef> * templateInstances = 0 ;
655
+ TemplateInstanceList templateInstances;
656
656
657
657
/* ! Template instances that exists of this class, as defined by variables.
658
658
* We do NOT want to document these individually. The key in the
@@ -740,7 +740,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
740
740
usesIntfClassDict=0 ;
741
741
constraintClassDict=0 ;
742
742
subGrouping=Config_getBool (SUBGROUPING);
743
- templateInstances = 0 ;
744
743
variableInstances = 0 ;
745
744
templateMaster =0 ;
746
745
templBaseClassNames = 0 ;
@@ -782,7 +781,6 @@ ClassDefImpl::IMPL::~IMPL()
782
781
delete usesIntfClassDict;
783
782
delete constraintClassDict;
784
783
delete incInfo;
785
- delete templateInstances;
786
784
delete variableInstances;
787
785
delete templBaseClassNames;
788
786
}
@@ -1209,17 +1207,12 @@ void ClassDefImpl::insertUsedFile(FileDef *fd)
1209
1207
{
1210
1208
if (fd==0 ) return ;
1211
1209
if (m_impl->files .find (fd)==-1 ) m_impl->files .append (fd);
1212
- if ( m_impl->templateInstances )
1210
+ for ( const auto &ti : m_impl->templateInstances )
1213
1211
{
1214
- QDictIterator<ClassDef> qdi (*m_impl->templateInstances );
1215
- ClassDef *cd;
1216
- for (qdi.toFirst ();(cd=qdi.current ());++qdi)
1212
+ ClassDefMutable *cdm = toClassDefMutable (ti.classDef );
1213
+ if (cdm)
1217
1214
{
1218
- ClassDefMutable *cdm = toClassDefMutable (cd);
1219
- if (cdm)
1220
- {
1221
- cdm->insertUsedFile (fd);
1222
- }
1215
+ cdm->insertUsedFile (fd);
1223
1216
}
1224
1217
}
1225
1218
}
@@ -3215,15 +3208,11 @@ bool ClassDefImpl::hasNonReferenceSuperClass() const
3215
3208
if (!found)
3216
3209
{
3217
3210
// look for template instances that might have non-reference super classes
3218
- QDict<ClassDef> *cil = bcd->getTemplateInstances ();
3219
- if (cil)
3211
+ for (const auto &cil : bcd->getTemplateInstances ())
3220
3212
{
3221
- QDictIterator<ClassDef> tidi (*cil);
3222
- for ( ; tidi.current () && !found ; ++tidi) // for each template instance
3223
- {
3224
- // recurse into the template instance branch
3225
- found = found || tidi.current ()->hasNonReferenceSuperClass ();
3226
- }
3213
+ // recurse into the template instance branch
3214
+ found = cil.classDef ->hasNonReferenceSuperClass ();
3215
+ if (found) break ;
3227
3216
}
3228
3217
}
3229
3218
else
@@ -3939,11 +3928,14 @@ ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName,
3939
3928
int startLine, int startColumn, const QCString &templSpec,bool &freshInstance) const
3940
3929
{
3941
3930
freshInstance = FALSE ;
3942
- if (m_impl->templateInstances ==0 )
3931
+ auto it = std::find_if (m_impl->templateInstances .begin (),
3932
+ m_impl->templateInstances .end (),
3933
+ [&templSpec](const auto &ti) { return templSpec==ti.templSpec ; });
3934
+ ClassDefMutable *templateClass=0 ;
3935
+ if (it!=m_impl->templateInstances .end ())
3943
3936
{
3944
- m_impl-> templateInstances = new QDict<ClassDef>( 17 );
3937
+ templateClass = toClassDefMutable ((*it). classDef );
3945
3938
}
3946
- ClassDefMutable *templateClass=toClassDefMutable (m_impl->templateInstances ->find (templSpec));
3947
3939
if (templateClass==0 )
3948
3940
{
3949
3941
QCString tcname = removeRedundantWhiteSpace (localName ()+templSpec);
@@ -3965,7 +3957,7 @@ ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName,
3965
3957
templateClass->setOuterScope (getOuterScope ());
3966
3958
templateClass->setHidden (isHidden ());
3967
3959
templateClass->setArtificial (isArtificial ());
3968
- m_impl->templateInstances -> insert ( templSpec,templateClass);
3960
+ m_impl->templateInstances . push_back ( TemplateInstanceDef ( templSpec,templateClass) );
3969
3961
3970
3962
// also add nested classes
3971
3963
for (const auto &innerCd : m_impl->innerClasses )
@@ -4638,7 +4630,7 @@ FileDef *ClassDefImpl::getFileDef() const
4638
4630
return m_impl->fileDef ;
4639
4631
}
4640
4632
4641
- QDict<ClassDef> * ClassDefImpl::getTemplateInstances () const
4633
+ const TemplateInstanceList & ClassDefImpl::getTemplateInstances () const
4642
4634
{
4643
4635
return m_impl->templateInstances ;
4644
4636
}
0 commit comments