Skip to content

Commit 14a610f

Browse files
committed
Refactoring: modernize used/usedByImplementationClasses & templateTypeConstraints
1 parent 795e99b commit 14a610f

File tree

3 files changed

+58
-128
lines changed

3 files changed

+58
-128
lines changed

src/classdef.cpp

Lines changed: 41 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,9 @@ class ClassDefImpl : public DefinitionMixin<ClassDefMutable>
200200
virtual const ClassDef *templateMaster() const;
201201
virtual bool isTemplate() const;
202202
virtual IncludeInfo *includeInfo() const;
203-
virtual UsesClassDict *usedImplementationClasses() const;
204-
virtual UsesClassDict *usedByImplementationClasses() const;
205-
virtual UsesClassDict *usedInterfaceClasses() const;
206-
virtual ConstraintClassDict *templateTypeConstraints() const;
203+
virtual const UsesClassList &usedImplementationClasses() const;
204+
virtual const UsesClassList &usedByImplementationClasses() const;
205+
virtual const ConstraintClassList &templateTypeConstraints() const;
207206
virtual bool isTemplateArgument() const;
208207
virtual const Definition *findInnerCompound(const char *name) const;
209208
virtual ArgumentLists getTemplateParameterLists() const;
@@ -448,13 +447,11 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef>
448447
{ return getCdAlias()->isTemplate(); }
449448
virtual IncludeInfo *includeInfo() const
450449
{ return getCdAlias()->includeInfo(); }
451-
virtual UsesClassDict *usedImplementationClasses() const
450+
virtual const UsesClassList &usedImplementationClasses() const
452451
{ return getCdAlias()->usedImplementationClasses(); }
453-
virtual UsesClassDict *usedByImplementationClasses() const
452+
virtual const UsesClassList &usedByImplementationClasses() const
454453
{ return getCdAlias()->usedByImplementationClasses(); }
455-
virtual UsesClassDict *usedInterfaceClasses() const
456-
{ return getCdAlias()->usedInterfaceClasses(); }
457-
virtual ConstraintClassDict *templateTypeConstraints() const
454+
virtual const ConstraintClassList &templateTypeConstraints() const
458455
{ return getCdAlias()->templateTypeConstraints(); }
459456
virtual bool isTemplateArgument() const
460457
{ return getCdAlias()->isTemplateArgument(); }
@@ -640,11 +637,10 @@ class ClassDefImpl::IMPL
640637
ClassLinkedRefMap innerClasses;
641638

642639
/* classes for the collaboration diagram */
643-
UsesClassDict *usesImplClassDict = 0;
644-
UsesClassDict *usedByImplClassDict = 0;
645-
UsesClassDict *usesIntfClassDict = 0;
640+
UsesClassList usesImplClassList;
641+
UsesClassList usedByImplClassList;
646642

647-
ConstraintClassDict *constraintClassDict = 0;
643+
ConstraintClassList constraintClassList;
648644

649645
/*! Template instances that exists of this class, the key in the
650646
* dictionary is the template argument list.
@@ -726,10 +722,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
726722
prot=Public;
727723
nspace=0;
728724
fileDef=0;
729-
usesImplClassDict=0;
730-
usedByImplClassDict=0;
731-
usesIntfClassDict=0;
732-
constraintClassDict=0;
733725
subGrouping=Config_getBool(SUBGROUPING);
734726
templateMaster =0;
735727
isAbstract = FALSE;
@@ -765,10 +757,6 @@ ClassDefImpl::IMPL::IMPL()
765757

766758
ClassDefImpl::IMPL::~IMPL()
767759
{
768-
delete usesImplClassDict;
769-
delete usedByImplClassDict;
770-
delete usesIntfClassDict;
771-
delete constraintClassDict;
772760
delete incInfo;
773761
}
774762

@@ -3128,18 +3116,16 @@ void ClassDefImpl::addTypeConstraint(const QCString &typeConstraint,const QCStri
31283116
}
31293117
if (cd)
31303118
{
3131-
if (m_impl->constraintClassDict==0)
3132-
{
3133-
m_impl->constraintClassDict = new ConstraintClassDict(17);
3134-
m_impl->constraintClassDict->setAutoDelete(TRUE);
3135-
}
3136-
ConstraintClassDef *ccd=m_impl->constraintClassDict->find(typeConstraint);
3137-
if (ccd==0)
3119+
auto it = std::find_if(m_impl->constraintClassList.begin(),
3120+
m_impl->constraintClassList.end(),
3121+
[&cd](const auto &ccd) { return ccd.classDef==cd; });
3122+
3123+
if (it==m_impl->constraintClassList.end())
31383124
{
3139-
ccd = new ConstraintClassDef(cd);
3140-
m_impl->constraintClassDict->insert(typeConstraint,ccd);
3125+
m_impl->constraintClassList.emplace_back(cd);
3126+
it = m_impl->constraintClassList.end()-1;
31413127
}
3142-
ccd->addAccessor(type);
3128+
(*it).addAccessor(type);
31433129
//printf("Adding constraint '%s' to class %s on type %s\n",
31443130
// typeConstraint.data(),name().data(),type.data());
31453131
}
@@ -3726,18 +3712,16 @@ void ClassDefImpl::addUsedClass(ClassDef *cd,const char *accessName,
37263712
static bool umlLook = Config_getBool(UML_LOOK);
37273713
if (prot==Private && !extractPrivate) return;
37283714
//printf("%s::addUsedClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
3729-
if (m_impl->usesImplClassDict==0)
3730-
{
3731-
m_impl->usesImplClassDict = new UsesClassDict(17);
3732-
m_impl->usesImplClassDict->setAutoDelete(TRUE);
3733-
}
3734-
UsesClassDef *ucd=m_impl->usesImplClassDict->find(cd->name());
3735-
if (ucd==0)
3715+
3716+
auto it = std::find_if(m_impl->usesImplClassList.begin(),
3717+
m_impl->usesImplClassList.end(),
3718+
[&cd](const auto &ucd) { return ucd.classDef==cd; });
3719+
if (it==m_impl->usesImplClassList.end())
37363720
{
3737-
ucd = new UsesClassDef(cd);
3738-
m_impl->usesImplClassDict->insert(cd->name(),ucd);
3739-
//printf("Adding used class %s to class %s via accessor %s\n",
3740-
// cd->name().data(),name().data(),accessName);
3721+
m_impl->usesImplClassList.emplace_back(cd);
3722+
//printf("Adding used class %s to class %s via accessor %s\n",
3723+
// cd->name().data(),name().data(),accessName);
3724+
it = m_impl->usesImplClassList.end()-1;
37413725
}
37423726
QCString acc = accessName;
37433727
if (umlLook)
@@ -3750,7 +3734,7 @@ void ClassDefImpl::addUsedClass(ClassDef *cd,const char *accessName,
37503734
case Package: acc.prepend("~"); break;
37513735
}
37523736
}
3753-
ucd->addAccessor(acc);
3737+
(*it).addAccessor(acc);
37543738
}
37553739

37563740
void ClassDefImpl::addUsedByClass(ClassDef *cd,const char *accessName,
@@ -3760,18 +3744,16 @@ void ClassDefImpl::addUsedByClass(ClassDef *cd,const char *accessName,
37603744
static bool umlLook = Config_getBool(UML_LOOK);
37613745
if (prot==Private && !extractPrivate) return;
37623746
//printf("%s::addUsedByClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
3763-
if (m_impl->usedByImplClassDict==0)
3747+
//
3748+
auto it = std::find_if(m_impl->usedByImplClassList.begin(),
3749+
m_impl->usedByImplClassList.end(),
3750+
[&cd](const auto &ucd) { return ucd.classDef==cd; });
3751+
if (it==m_impl->usedByImplClassList.end())
37643752
{
3765-
m_impl->usedByImplClassDict = new UsesClassDict(17);
3766-
m_impl->usedByImplClassDict->setAutoDelete(TRUE);
3767-
}
3768-
UsesClassDef *ucd=m_impl->usedByImplClassDict->find(cd->name());
3769-
if (ucd==0)
3770-
{
3771-
ucd = new UsesClassDef(cd);
3772-
m_impl->usedByImplClassDict->insert(cd->name(),ucd);
3753+
m_impl->usedByImplClassList.emplace_back(cd);
37733754
//printf("Adding used by class %s to class %s\n",
37743755
// cd->name().data(),name().data());
3756+
it = m_impl->usedByImplClassList.end()-1;
37753757
}
37763758
QCString acc = accessName;
37773759
if (umlLook)
@@ -3784,7 +3766,7 @@ void ClassDefImpl::addUsedByClass(ClassDef *cd,const char *accessName,
37843766
case Package: acc.prepend("~"); break;
37853767
}
37863768
}
3787-
ucd->addAccessor(acc);
3769+
(*it).addAccessor(acc);
37883770
}
37893771

37903772

@@ -4602,24 +4584,19 @@ IncludeInfo *ClassDefImpl::includeInfo() const
46024584
return m_impl->incInfo;
46034585
}
46044586

4605-
UsesClassDict *ClassDefImpl::usedImplementationClasses() const
4606-
{
4607-
return m_impl->usesImplClassDict;
4608-
}
4609-
4610-
UsesClassDict *ClassDefImpl::usedByImplementationClasses() const
4587+
const UsesClassList &ClassDefImpl::usedImplementationClasses() const
46114588
{
4612-
return m_impl->usedByImplClassDict;
4589+
return m_impl->usesImplClassList;
46134590
}
46144591

4615-
UsesClassDict *ClassDefImpl::usedInterfaceClasses() const
4592+
const UsesClassList &ClassDefImpl::usedByImplementationClasses() const
46164593
{
4617-
return m_impl->usesIntfClassDict;
4594+
return m_impl->usedByImplClassList;
46184595
}
46194596

4620-
ConstraintClassDict *ClassDefImpl::templateTypeConstraints() const
4597+
const ConstraintClassList &ClassDefImpl::templateTypeConstraints() const
46214598
{
4622-
return m_impl->constraintClassDict;
4599+
return m_impl->constraintClassList;
46234600
}
46244601

46254602
bool ClassDefImpl::isTemplateArgument() const

src/classdef.h

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,6 @@ class NamespaceDef;
4343
class MemberDef;
4444
class ExampleList;
4545
class MemberNameInfoLinkedMap;
46-
class UsesClassDict;
47-
class ConstraintClassDict;
48-
class QTextStream;
4946
class PackageDef;
5047
class GroupDef;
5148
class StringDict;
@@ -54,6 +51,8 @@ class ClassDefImpl;
5451
class FTextStream;
5552
class ClassDef;
5653
class ClassDefMutable;
54+
class UsesClassList;
55+
class ConstraintClassList;
5756

5857
/** Class that contains information about an inheritance relation.
5958
*/
@@ -257,13 +256,11 @@ class ClassDef : public Definition
257256

258257
virtual IncludeInfo *includeInfo() const = 0;
259258

260-
virtual UsesClassDict *usedImplementationClasses() const = 0;
259+
virtual const UsesClassList &usedImplementationClasses() const = 0;
261260

262-
virtual UsesClassDict *usedByImplementationClasses() const = 0;
261+
virtual const UsesClassList &usedByImplementationClasses() const = 0;
263262

264-
virtual UsesClassDict *usedInterfaceClasses() const = 0;
265-
266-
virtual ConstraintClassDict *templateTypeConstraints() const = 0;
263+
virtual const ConstraintClassList &templateTypeConstraints() const = 0;
267264

268265
virtual bool isTemplateArgument() const = 0;
269266

@@ -518,28 +515,12 @@ struct UsesClassDef
518515
bool containment = true;
519516
};
520517

521-
/** Dictionary of usage relations.
522-
*/
523-
class UsesClassDict : public QDict<UsesClassDef>
524-
{
525-
public:
526-
UsesClassDict(uint size) : QDict<UsesClassDef>(size) {}
527-
~UsesClassDict() {}
528-
};
529-
530-
/** Iterator class to iterate over a dictionary of usage relations.
531-
*/
532-
class UsesClassDictIterator : public QDictIterator<UsesClassDef>
518+
class UsesClassList : public std::vector<UsesClassDef>
533519
{
534-
public:
535-
UsesClassDictIterator(const QDict<UsesClassDef> &d)
536-
: QDictIterator<UsesClassDef>(d) {}
537-
~UsesClassDictIterator() {}
538520
};
539521

540522
//------------------------------------------------------------------------
541523

542-
543524
/** Class that contains information about a type constraint relations.
544525
*/
545526
struct ConstraintClassDef
@@ -566,23 +547,8 @@ struct ConstraintClassDef
566547
StringSet accessors;
567548
};
568549

569-
/** Dictionary of constraint relations.
570-
*/
571-
class ConstraintClassDict : public QDict<ConstraintClassDef>
572-
{
573-
public:
574-
ConstraintClassDict(uint size) : QDict<ConstraintClassDef>(size) {}
575-
~ConstraintClassDict() {}
576-
};
577-
578-
/** Iterator class to iterate over a dictionary of constraint relations.
579-
*/
580-
class ConstraintClassDictIterator : public QDictIterator<ConstraintClassDef>
550+
class ConstraintClassList : public std::vector<ConstraintClassDef>
581551
{
582-
public:
583-
ConstraintClassDictIterator(const QDict<ConstraintClassDef> &d)
584-
: QDictIterator<ConstraintClassDef>(d) {}
585-
~ConstraintClassDictIterator() {}
586552
};
587553

588554
//------------------------------------------------------------------------

src/dotclassgraph.cpp

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -259,35 +259,22 @@ void DotClassGraph::buildGraph(const ClassDef *cd,DotNode *n,bool base,int dista
259259
{
260260
// ---- Add usage relations
261261

262-
UsesClassDict *dict =
263-
base ? cd->usedImplementationClasses() :
264-
cd->usedByImplementationClasses()
265-
;
266-
if (dict)
262+
const UsesClassList &list = base ? cd->usedImplementationClasses() :
263+
cd->usedByImplementationClasses() ;
264+
for (const auto &ucd : list)
267265
{
268-
UsesClassDictIterator ucdi(*dict);
269-
UsesClassDef *ucd;
270-
for (;(ucd=ucdi.current());++ucdi)
271-
{
272-
//printf("addClass: %s templSpec=%s\n",ucd->classDef->name().data(),ucd->templSpecifiers.data());
273-
addClass(ucd->classDef,n,EdgeInfo::Purple,joinLabels(ucd->accessors),0,
274-
ucd->templSpecifiers,base,distance);
275-
}
266+
//printf("addClass: %s templSpec=%s\n",ucd.classDef->name().data(),ucd.templSpecifiers.data());
267+
addClass(ucd.classDef,n,EdgeInfo::Purple,joinLabels(ucd.accessors),0,
268+
ucd.templSpecifiers,base,distance);
276269
}
277270
}
278271
if (Config_getBool(TEMPLATE_RELATIONS) && base)
279272
{
280-
ConstraintClassDict *dict = cd->templateTypeConstraints();
281-
if (dict)
273+
for (const auto &ccd : cd->templateTypeConstraints())
282274
{
283-
ConstraintClassDictIterator ccdi(*dict);
284-
ConstraintClassDef *ccd;
285-
for (;(ccd=ccdi.current());++ccdi)
286-
{
287-
//printf("addClass: %s templSpec=%s\n",ucd->classDef->name().data(),ucd->templSpecifiers.data());
288-
addClass(ccd->classDef,n,EdgeInfo::Orange2,joinLabels(ccd->accessors),0,
289-
0,TRUE,distance);
290-
}
275+
//printf("addClass: %s\n",ccd.classDef->name().data());
276+
addClass(ccd.classDef,n,EdgeInfo::Orange2,joinLabels(ccd.accessors),0,
277+
0,TRUE,distance);
291278
}
292279
}
293280

0 commit comments

Comments
 (0)