From 8ef8e3cdd322994a262a937b4b52a3fb6e6774dd Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sat, 2 May 2020 18:24:21 +0200 Subject: Replace QList with std::deque in DirList. https://stackoverflow.com/a/4110482/5534993 https://www.copperspice.com/docs/cs_api_1.5/containers-c.html --- src/dirdef.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/dirdef.h b/src/dirdef.h index 692cd90..deba35d 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -21,7 +21,9 @@ #include "sortdict.h" #include "definition.h" -#include +#include +#include +#include class FileList; class ClassSDict; @@ -34,11 +36,7 @@ class FTextStream; class DirDef; /** A list of directories. */ -class DirList : public QList -{ - public: - int compareValues(const DirDef *item1,const DirDef *item2) const; -}; +typedef std::deque DirList; /** A model of a directory symbol. */ class DirDef : virtual public Definition -- cgit v0.12 From 534cf6a4f2098e96b15bb49f41d93d6e991bd3f9 Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sun, 26 Apr 2020 12:05:38 +0200 Subject: For loops on QListIterator by range loops. (cherry picked from commit 3a90e663f701e7f414d31d54264ce66d62c17976) --- src/context.cpp | 13 +++---------- src/dirdef.cpp | 10 +++------- src/dotdirdeps.cpp | 8 +++----- src/dotgroupcollaboration.cpp | 4 +--- src/groupdef.cpp | 8 ++------ src/index.cpp | 12 +++--------- src/xmlgen.cpp | 4 +--- 7 files changed, 16 insertions(+), 43 deletions(-) diff --git a/src/context.cpp b/src/context.cpp index 53b63f9..55d6c6c 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -3532,10 +3532,7 @@ class DirContext::Private : public DefinitionContext if (!cache.dirs) { cache.dirs.reset(TemplateList::alloc()); - const DirList &subDirs = m_dirDef->subDirs(); - QListIterator it(subDirs); - const DirDef *dd; - for (it.toFirst();(dd=it.current());++it) + for(const auto dd : m_dirDef->subDirs()) { DirContext *dc = new DirContext(dd); cache.dirs->append(dc); @@ -5465,9 +5462,7 @@ class ModuleContext::Private : public DefinitionContext TemplateList *dirList = TemplateList::alloc(); if (m_groupDef->getDirs()) { - QListIterator it(*m_groupDef->getDirs()); - const DirDef *dd; - for (it.toFirst();(dd=it.current());++it) + for(const auto dd : *(m_groupDef->getDirs())) { dirList->append(DirContext::alloc(dd)); } @@ -6599,9 +6594,7 @@ class NestingContext::Private : public GenericNodeListContext } void addDirs(const DirList &dirList) { - QListIterator li(dirList); - const DirDef *dd; - for (li.toFirst();(dd=li.current());++li) + for(const auto dd : dirList) { append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE,FALSE,FALSE)); m_index++; diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 70ca3c0..3a13b0a 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -307,9 +307,7 @@ void DirDefImpl::writeDirectoryGraph(OutputList &ol) void DirDefImpl::writeSubDirList(OutputList &ol) { int numSubdirs = 0; - QListIterator it(m_subdirs); - DirDef *dd; - for (it.toFirst();(dd=it.current());++it) + for(const auto dd : m_subdirs) { if (dd->hasDocumentation() || dd->getFiles()->count()>0) { @@ -324,7 +322,7 @@ void DirDefImpl::writeSubDirList(OutputList &ol) ol.parseText(theTranslator->trDir(TRUE,FALSE)); ol.endMemberHeader(); ol.startMemberList(); - for (it.toFirst();(dd=it.current());++it) + for(const auto dd : m_subdirs) { if (dd->hasDocumentation() || dd->getFiles()->count()==0) { @@ -462,9 +460,7 @@ void DirDefImpl::writeTagFile(FTextStream &tagFile) { if (m_subdirs.count()>0) { - DirDef *dd; - QListIterator it(m_subdirs); - for (;(dd=it.current());++it) + for(const auto dd : m_subdirs) { tagFile << " " << convertToXML(dd->displayName()) << "" << endl; } diff --git a/src/dotdirdeps.cpp b/src/dotdirdeps.cpp index 66a68df..c0e4712 100644 --- a/src/dotdirdeps.cpp +++ b/src/dotdirdeps.cpp @@ -55,11 +55,9 @@ void writeDotDirDepGraph(FTextStream &t,const DirDef *dd,bool linkRelations) << dd->shortName() << "\"];\n"; // add nodes for sub directories - QListIterator sdi(dd->subDirs()); - const DirDef *sdir; - for (sdi.toFirst();(sdir=sdi.current());++sdi) + for(const auto sdir : dd->subDirs()) { - t << " " << sdir->getOutputFileBase() << " [shape=box label=\"" + t << " " << sdir->getOutputFileBase() << " [shape=box label=\"" << sdir->shortName() << "\""; if (sdir->isCluster()) { @@ -70,7 +68,7 @@ void writeDotDirDepGraph(FTextStream &t,const DirDef *dd,bool linkRelations) t << " color=\"black\""; } t << " fillcolor=\"white\" style=\"filled\""; - t << " URL=\"" << sdir->getOutputFileBase() + t << " URL=\"" << sdir->getOutputFileBase() << Doxygen::htmlFileExtension << "\""; t << "];\n"; dirsInGraph.insert(sdir->getOutputFileBase(),sdir); diff --git a/src/dotgroupcollaboration.cpp b/src/dotgroupcollaboration.cpp index 0a56460..ef04e8f 100644 --- a/src/dotgroupcollaboration.cpp +++ b/src/dotgroupcollaboration.cpp @@ -165,9 +165,7 @@ void DotGroupCollaboration::buildGraph(const GroupDef* gd) // Add directories if ( gd->getDirs() && gd->getDirs()->count() ) { - QListIterator defli(*gd->getDirs()); - const DirDef *def; - for (;(def=defli.current());++defli) + for(const auto def : *(gd->getDirs())) { tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension; addCollaborationMember( def, tmp_url, DotGroupCollaboration::tdir ); diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 90de94b..3e95afc 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -782,9 +782,7 @@ void GroupDefImpl::writeTagFile(FTextStream &tagFile) { if (m_dirList) { - QListIterator it(*m_dirList); - DirDef *dd; - for (;(dd=it.current());++it) + for(const auto dd : *m_dirList) { if (dd->isLinkableInProject()) { @@ -1055,9 +1053,7 @@ void GroupDefImpl::writeDirs(OutputList &ol,const QCString &title) ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); - QListIterator it(*m_dirList); - DirDef *dd; - for (;(dd=it.current());++it) + for(const auto dd : *m_dirList) { if (!dd->hasDocumentation()) continue; ol.startMemberDeclaration(); diff --git a/src/index.cpp b/src/index.cpp index fd61a45..698470d 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -587,9 +587,7 @@ static bool dirHasVisibleChildren(DirDef *dd) } } - QListIterator dli(dd->subDirs()); - DirDef *subdd; - for (dli.toFirst();(subdd=dli.current());++dli) + for(const auto subdd : dd->subDirs()) { if (dirHasVisibleChildren(subdd)) { @@ -649,9 +647,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv if (dd->subDirs().count()>0) { startIndexHierarchy(ol,level+1); - QListIterator dli(dd->subDirs()); - DirDef *subdd = 0; - for (dli.toFirst();(subdd=dli.current());++dli) + for(const auto subdd : dd->subDirs()) { writeDirTreeNode(ol,subdd,level+1,ftv,addToIndex); } @@ -4125,9 +4121,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* } else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex) { - QListIterator it(*gd->getDirs()); - DirDef *dd; - for (;(dd=it.current());++it) + for(const auto dd : *(gd->getDirs())) { if (dd->isVisible()) { diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 445916f..b8d645a 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1214,9 +1214,7 @@ static void writeInnerDirs(const DirList *dl,FTextStream &t) { if (dl) { - QListIterator subdirs(*dl); - DirDef *subdir; - for (subdirs.toFirst();(subdir=subdirs.current());++subdirs) + for(const auto subdir : *dl) { t << " getOutputFileBase() << "\">" << convertToXML(subdir->displayName()) << "" << endl; -- cgit v0.12 From 0c28706a1e82a4ad6021ce016bc5937698cbbd3c Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sun, 26 Apr 2020 12:08:40 +0200 Subject: Replaced DirList::count() by DirList::size(). (cherry picked from commit 38d38b225f1e8698e5813e16356e8929fcec1e81) --- src/dirdef.cpp | 4 ++-- src/dotgroupcollaboration.cpp | 2 +- src/groupdef.cpp | 4 ++-- src/index.cpp | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 3a13b0a..d165b6e 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -35,7 +35,7 @@ class DirDefImpl : public DefinitionImpl, public DirDef virtual FileList * getFiles() const { return m_fileList; } virtual void addFile(FileDef *fd); virtual const DirList &subDirs() const { return m_subdirs; } - virtual bool isCluster() const { return m_subdirs.count()>0; } + virtual bool isCluster() const { return m_subdirs.size()>0; } virtual int level() const { return m_level; } virtual DirDef *parent() const { return m_parent; } virtual int dirCount() const { return m_dirCount; } @@ -458,7 +458,7 @@ void DirDefImpl::writeTagFile(FTextStream &tagFile) { case LayoutDocEntry::DirSubDirs: { - if (m_subdirs.count()>0) + if (m_subdirs.size()>0) { for(const auto dd : m_subdirs) { diff --git a/src/dotgroupcollaboration.cpp b/src/dotgroupcollaboration.cpp index ef04e8f..5c1f9e1 100644 --- a/src/dotgroupcollaboration.cpp +++ b/src/dotgroupcollaboration.cpp @@ -163,7 +163,7 @@ void DotGroupCollaboration::buildGraph(const GroupDef* gd) } // Add directories - if ( gd->getDirs() && gd->getDirs()->count() ) + if ( gd->getDirs() && gd->getDirs()->size() ) { for(const auto def : *(gd->getDirs())) { diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 3e95afc..bff97e0 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -1047,7 +1047,7 @@ void GroupDefImpl::writeNestedGroups(OutputList &ol,const QCString &title) void GroupDefImpl::writeDirs(OutputList &ol,const QCString &title) { // write list of directories - if (m_dirList->count()>0) + if (m_dirList->size()>0) { ol.startMemberHeader("dirs"); ol.parseText(title); @@ -1183,7 +1183,7 @@ void GroupDefImpl::writeSummaryLinks(OutputList &ol) const (lde->kind()==LayoutDocEntry::GroupNamespaces && m_namespaceSDict->declVisible()) || (lde->kind()==LayoutDocEntry::GroupFiles && m_fileList->count()>0) || (lde->kind()==LayoutDocEntry::GroupNestedGroups && m_groupList->count()>0) || - (lde->kind()==LayoutDocEntry::GroupDirs && m_dirList->count()>0) + (lde->kind()==LayoutDocEntry::GroupDirs && m_dirList->size()>0) ) { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; diff --git a/src/index.cpp b/src/index.cpp index 698470d..07dda3e 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -615,7 +615,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv } static bool tocExpand = TRUE; //Config_getBool(TOC_EXPAND); - bool isDir = dd->subDirs().count()>0 || // there are subdirs + bool isDir = dd->subDirs().size()>0 || // there are subdirs (tocExpand && // or toc expand and dd->getFiles() && dd->getFiles()->count()>0 // there are files ); @@ -644,7 +644,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv } // write sub directories - if (dd->subDirs().count()>0) + if (dd->subDirs().size()>0) { startIndexHierarchy(ol,level+1); for(const auto subdd : dd->subDirs()) @@ -3988,7 +3988,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* numSubItems += gd->getNamespaces()->count(); numSubItems += gd->getClasses()->count(); numSubItems += gd->getFiles()->count(); - numSubItems += gd->getDirs()->count(); + numSubItems += gd->getDirs()->size(); numSubItems += gd->getPages()->count(); } -- cgit v0.12 From 750e68e797b6b2500da3b9d770eafbb31b9d23fa Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sat, 2 May 2020 19:43:59 +0200 Subject: Create compareDirDefs for sorting. --- src/dirdef.cpp | 7 ++++++- src/dirdef.h | 8 +++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/dirdef.cpp b/src/dirdef.cpp index d165b6e..b41dc01 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -15,6 +15,7 @@ #include "docparser.h" #include "definitionimpl.h" #include "filedef.h" +#include //---------------------------------------------------------------------- @@ -159,7 +160,7 @@ void DirDefImpl::addFile(FileDef *fd) void DirDefImpl::sort() { - m_subdirs.sort(); + std::sort(m_subdirs.begin(), m_subdirs.end(), &compareDirDefs); m_fileList->sort(); } @@ -1092,3 +1093,7 @@ void generateDirDocs(OutputList &ol) } } +bool compareDirDefs(const DirDef *item1, const DirDef *item2) +{ + return qstricmp(item1->shortName(),item2->shortName()) < 0; +} diff --git a/src/dirdef.h b/src/dirdef.h index deba35d..52af2d8 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -38,6 +38,9 @@ class DirDef; /** A list of directories. */ typedef std::deque DirList; +/** Compare referenced objects. */ +bool compareDirDefs(const DirDef *item1,const DirDef *item2); + /** A model of a directory symbol. */ class DirDef : virtual public Definition { @@ -136,11 +139,6 @@ class DirRelation UsedDir *m_dst; }; -inline int DirList::compareValues(const DirDef *item1,const DirDef *item2) const -{ - return qstricmp(item1->shortName(),item2->shortName()); -} - /** A sorted dictionary of DirDef objects. */ class DirSDict : public SDict { -- cgit v0.12 From 53373a57b8d548c9c99a46cb723219c62a69b813 Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sat, 2 May 2020 19:44:34 +0200 Subject: Include dirdef.h instead of forward declaration. Forward declaration is not possible for an alias. --- src/context.h | 2 +- src/groupdef.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/context.h b/src/context.h index 8af74f8..80e19f0 100644 --- a/src/context.h +++ b/src/context.h @@ -20,6 +20,7 @@ #include "template.h" #include #include +#include "dirdef.h" class Definition; class ClassDef; @@ -34,7 +35,6 @@ class FileDef; class FileList; class FileNameLinkedMap; class DirSDict; -class DirList; class DirDef; class PageSDict; class GroupSDict; diff --git a/src/groupdef.h b/src/groupdef.h index 8a84a98..9b37d0f 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -22,6 +22,7 @@ #include "sortdict.h" #include "definition.h" +#include "dirdef.h" class MemberList; class FileList; @@ -37,7 +38,6 @@ class MemberNameInfoSDict; class PageSDict; class PageDef; class DirDef; -class DirList; class FTVHelp; class Entry; class MemberDef; -- cgit v0.12 From b5a2d0b03fe7de2570a9b6d326be7062b774c506 Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sun, 26 Apr 2020 12:16:05 +0200 Subject: Replaced calls to DirDef::append() to DirDef::push_back(). There is no inSort() in current QList or std container. Thus it was replaced by the sequence of adding an item and sorting the list afterwards. (cherry picked from commit 91370bf84ac299fcb773e1b9d81e8f5c56da0725) --- src/dirdef.cpp | 2 +- src/groupdef.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dirdef.cpp b/src/dirdef.cpp index b41dc01..a89a9e6 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -142,7 +142,7 @@ bool DirDefImpl::isLinkable() const void DirDefImpl::addSubDir(DirDef *subdir) { - m_subdirs.append(subdir); + m_subdirs.push_back(subdir); subdir->setOuterScope(this); subdir->setParent(this); } diff --git a/src/groupdef.cpp b/src/groupdef.cpp index bff97e0..5af1cbd 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -331,9 +331,12 @@ void GroupDefImpl::addDir(const DirDef *def) { if (def->isHidden()) return; if (Config_getBool(SORT_BRIEF_DOCS)) - m_dirList->inSort(def); + { + m_dirList->push_back(def); + m_dirList->sort(); + } else - m_dirList->append(def); + m_dirList->push_back(def); } void GroupDefImpl::addPage(PageDef *def) -- cgit v0.12 From a0755075b7ce190c3eb2a48c9238f34240ea8c8d Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sat, 2 May 2020 20:05:28 +0200 Subject: Copied implementation of `QGList::inSort()` to sortInDirList. --- src/dirdef.cpp | 10 ++++++++++ src/dirdef.h | 7 +++++++ src/groupdef.cpp | 3 +-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/dirdef.cpp b/src/dirdef.cpp index a89a9e6..597875f 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -1097,3 +1097,13 @@ bool compareDirDefs(const DirDef *item1, const DirDef *item2) { return qstricmp(item1->shortName(),item2->shortName()) < 0; } + +void sortInDirList(DirList& list, DirDef *const newItem) +{ + auto potentialSuccessor = list.begin(); + while (potentialSuccessor != list.cend() && compareDirDefs(*potentialSuccessor, newItem)) + { + potentialSuccessor++; + } + list.insert(potentialSuccessor, newItem); +} diff --git a/src/dirdef.h b/src/dirdef.h index 52af2d8..0d73dd3 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -41,6 +41,13 @@ typedef std::deque DirList; /** Compare referenced objects. */ bool compareDirDefs(const DirDef *item1,const DirDef *item2); +/** + * Sorts the list by the result of the compareDirDefs() function. + * @param list in which item to be inserted + * @param newItem to be inserted + */ +void sortInDirList(DirList &list, DirDef *const newItem); + /** A model of a directory symbol. */ class DirDef : virtual public Definition { diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 5af1cbd..e2d5b12 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -332,8 +332,7 @@ void GroupDefImpl::addDir(const DirDef *def) if (def->isHidden()) return; if (Config_getBool(SORT_BRIEF_DOCS)) { - m_dirList->push_back(def); - m_dirList->sort(); + sortInDirList(*m_dirList, def); } else m_dirList->push_back(def); -- cgit v0.12 From 8b2d00106d564068ad58d2f51bef155a4d0e982e Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Sun, 26 Apr 2020 12:13:45 +0200 Subject: Replaced addDir(const DirDef *dd) by addDir(DirDef *const dd) in GroupDef and GropuDefImpl. Required as the list type the directories are added to has pointers to non-const DirDef as value type. (cherry picked from commit be6f0726eff5371a656a0831d50676cd30116170) --- src/groupdef.cpp | 4 ++-- src/groupdef.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/groupdef.cpp b/src/groupdef.cpp index e2d5b12..4a119df 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -64,7 +64,7 @@ class GroupDefImpl : public DefinitionImpl, public GroupDef virtual void addGroup(const GroupDef *def); virtual void addPage(PageDef *def); virtual void addExample(const PageDef *def); - virtual void addDir(const DirDef *dd); + virtual void addDir(DirDef *const dd); virtual bool insertMember(MemberDef *def,bool docOnly=FALSE); virtual void removeMember(MemberDef *md); virtual bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group @@ -327,7 +327,7 @@ bool GroupDefImpl::addNamespace(const NamespaceDef *def) return FALSE; } -void GroupDefImpl::addDir(const DirDef *def) +void GroupDefImpl::addDir(DirDef *const def) { if (def->isHidden()) return; if (Config_getBool(SORT_BRIEF_DOCS)) diff --git a/src/groupdef.h b/src/groupdef.h index 9b37d0f..b2b8b29 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -62,7 +62,7 @@ class GroupDef : virtual public Definition virtual void addGroup(const GroupDef *def) = 0; virtual void addPage(PageDef *def) = 0; virtual void addExample(const PageDef *def) = 0; - virtual void addDir(const DirDef *dd) = 0; + virtual void addDir(DirDef *const dd) = 0; virtual bool insertMember(MemberDef *def,bool docOnly=FALSE) = 0; virtual void removeMember(MemberDef *md) = 0; virtual bool findGroup(const GroupDef *def) const = 0; -- cgit v0.12