From 47c7998549ac037df473a423186c301e556ceb74 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Tue, 5 Jan 2021 20:19:20 +0100 Subject: Refactoring: replace FilePairDict by FilePairLinkedMap --- src/dirdef.cpp | 43 +++++++++++++++++++++---------------------- src/dirdef.h | 15 +++++---------- src/dotdirdeps.cpp | 2 +- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 6f23251..b13b757 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -657,8 +657,7 @@ void DirDefImpl::addUsesDependency(DirDef *dir,FileDef *srcFd, UsedDir *usedDir = m_usedDirs.find(dir->getOutputFileBase()); if (usedDir) // dir dependency already present { - const FilePair *usedPair = usedDir->findFilePair( - srcFd->getOutputFileBase()+dstFd->getOutputFileBase()); + const FilePair *usedPair = usedDir->findFilePair(FilePair::key(srcFd,dstFd)); if (usedPair==0) // new file dependency { //printf(" => new file\n"); @@ -756,44 +755,39 @@ bool DirDefImpl::depGraphIsTrivial() const return m_usedDirs.empty(); } -//---------------------------------------------------------------------- - -int FilePairDict::compareValues(const FilePair *left,const FilePair *right) const -{ - int orderHi = qstricmp(left->source()->name(),right->source()->name()); - if (orderHi!=0) return orderHi; - int orderLo = qstricmp(left->destination()->name(),right->destination()->name()); - return orderLo; -} //---------------------------------------------------------------------- UsedDir::UsedDir(const DirDef *dir,bool inherited) : - m_dir(dir), m_filePairs(7), m_inherited(inherited) + m_dir(dir), m_inherited(inherited) { - m_filePairs.setAutoDelete(TRUE); } UsedDir::~UsedDir() { } - void UsedDir::addFileDep(FileDef *srcFd,FileDef *dstFd) { - m_filePairs.append(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(), - new FilePair(srcFd,dstFd)); + m_filePairs.add(FilePair::key(srcFd,dstFd),std::make_unique(srcFd,dstFd)); } void UsedDir::sort() { - m_filePairs.sort(); + std::sort(m_filePairs.begin(), + m_filePairs.end(), + [](const auto &left,const auto &right) + { + int orderHi = qstricmp(left->source()->name(),right->source()->name()); + if (orderHi!=0) return orderHi<0; + int orderLo = qstricmp(left->destination()->name(),right->destination()->name()); + return orderLo<0; + }); } FilePair *UsedDir::findFilePair(const char *name) { - QCString n=name; - return n.isEmpty() ? 0 : m_filePairs.find(n); + return m_filePairs.find(name); } DirDef *DirDefImpl::createNewDir(const char *path) @@ -846,6 +840,13 @@ DirDef *DirDefImpl::mergeDirectoryInTree(const QCString &path) //---------------------------------------------------------------------- +QCString FilePair::key(const FileDef *srcFd,const FileDef *dstFd) +{ + return srcFd->getOutputFileBase()+";"+dstFd->getOutputFileBase(); +} + +//---------------------------------------------------------------------- + static void writePartialDirPath(OutputList &ol,const DirDef *root,const DirDef *target) { if (target->parent()!=root) @@ -909,9 +910,7 @@ void DirRelation::writeDocumentation(OutputList &ol) ol.writeString(""); ol.writeString(""); - SDict::Iterator fpi(m_dst->filePairs()); - FilePair *fp; - for (fpi.toFirst();(fp=fpi.current());++fpi) + for (const auto &fp : m_dst->filePairs()) { ol.writeString(""); ol.writeString(""); diff --git a/src/dirdef.h b/src/dirdef.h index b3f2a30..78b7929 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -17,7 +17,6 @@ #define DIRDEF_H #include "linkedmap.h" -#include "sortdict.h" #include "definition.h" #include @@ -25,7 +24,6 @@ #include #include - class FileList; class QStrList; class FileDef; @@ -48,6 +46,7 @@ class FilePair FilePair(FileDef *src,FileDef *dst) : m_src(src), m_dst(dst) {} const FileDef *source() const { return m_src; } const FileDef *destination() const { return m_dst; } + static QCString key(const FileDef *srcFd,const FileDef *dstFd); private: FileDef *m_src; FileDef *m_dst; @@ -55,13 +54,9 @@ class FilePair // ------------------ -/** A sorted dictionary of FilePair objects. */ -class FilePairDict : public SDict +/** A linked map of file pairs */ +class FilePairLinkedMap : public LinkedMap { - public: - FilePairDict(uint size) : SDict(size) {} - private: - int compareValues(const FilePair *item1,const FilePair *item2) const; }; // ------------------ @@ -74,14 +69,14 @@ class UsedDir virtual ~UsedDir(); void addFileDep(FileDef *srcFd,FileDef *dstFd); FilePair *findFilePair(const char *name); - const FilePairDict &filePairs() const { return m_filePairs; } + const FilePairLinkedMap &filePairs() const { return m_filePairs; } const DirDef *dir() const { return m_dir; } bool inherited() const { return m_inherited; } void sort(); private: const DirDef *m_dir; - FilePairDict m_filePairs; + FilePairLinkedMap m_filePairs; bool m_inherited; }; diff --git a/src/dotdirdeps.cpp b/src/dotdirdeps.cpp index da6364f..8ec3a6e 100644 --- a/src/dotdirdeps.cpp +++ b/src/dotdirdeps.cpp @@ -165,7 +165,7 @@ void writeDotDirDepGraph(FTextStream &t,const DirDef *dd,bool linkRelations) Doxygen::dirRelations.add(relationName, std::make_unique( relationName,dir,udir.get())); - int nrefs = udir->filePairs().count(); + size_t nrefs = udir->filePairs().size(); t << " " << dir->getOutputFileBase() << "->" << usedDir->getOutputFileBase(); t << " [headlabel=\"" << nrefs << "\", labeldistance=1.5"; -- cgit v0.12