summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2016-01-24 14:03:15 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2016-01-31 15:29:54 (GMT)
commit5475bf2e9a0f1517567186b47595b8dad2b6b3a3 (patch)
tree75524eac9133c0a2165df52f43b198abe1b046c2 /src
parent67827956351f78516a7c48df366dcf521c51c6eb (diff)
downloadDoxygen-5475bf2e9a0f1517567186b47595b8dad2b6b3a3.zip
Doxygen-5475bf2e9a0f1517567186b47595b8dad2b6b3a3.tar.gz
Doxygen-5475bf2e9a0f1517567186b47595b8dad2b6b3a3.tar.bz2
Improved sorting performance for directories and files
Diffstat (limited to 'src')
-rw-r--r--src/dirdef.cpp35
-rw-r--r--src/dirdef.h2
2 files changed, 32 insertions, 5 deletions
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 307d3be..d458777 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -67,17 +67,23 @@ bool DirDef::isLinkable() const
void DirDef::addSubDir(DirDef *subdir)
{
- m_subdirs.inSort(subdir);
+ m_subdirs.append(subdir);
subdir->setOuterScope(this);
subdir->m_parent=this;
}
void DirDef::addFile(FileDef *fd)
{
- m_fileList->inSort(fd);
+ m_fileList->append(fd);
fd->setDirDef(this);
}
+void DirDef::sort()
+{
+ m_subdirs.sort();
+ m_fileList->sort();
+}
+
static QCString encodeDirName(const QCString &anchor)
{
// convert to md5 hash
@@ -593,11 +599,20 @@ void DirDef::computeDependencies()
//printf(" %d: add dependency %s->%s\n",count++,name().data(),usedDir->name().data());
addUsesDependency(usedDir,fd,ii->fileDef,FALSE);
}
- }
+ }
}
}
}
}
+ if (m_usedDirs)
+ {
+ QDictIterator<UsedDir> udi(*m_usedDirs);
+ UsedDir *udir;
+ for (udi.toFirst();(udir=udi.current());++udi)
+ {
+ udir->sort();
+ }
+ }
}
bool DirDef::isParentOf(DirDef *dir) const
@@ -640,10 +655,15 @@ UsedDir::~UsedDir()
void UsedDir::addFileDep(FileDef *srcFd,FileDef *dstFd)
{
- m_filePairs.inSort(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(),
+ m_filePairs.append(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(),
new FilePair(srcFd,dstFd));
}
+void UsedDir::sort()
+{
+ m_filePairs.sort();
+}
+
FilePair *UsedDir::findFilePair(const char *name)
{
QCString n=name;
@@ -659,7 +679,7 @@ DirDef *DirDef::createNewDir(const char *path)
//printf("Adding new dir %s\n",path);
dir = new DirDef(path);
//printf("createNewDir %s short=%s\n",path,dir->shortName().data());
- Doxygen::directories->inSort(path,dir);
+ Doxygen::directories->append(path,dir);
}
return dir;
}
@@ -919,6 +939,11 @@ void buildDirectories()
}
}
}
+ for (sdi.toFirst();(dir=sdi.current());++sdi)
+ {
+ dir->sort();
+ }
+ Doxygen::directories->sort();
computeCommonDirPrefix();
}
diff --git a/src/dirdef.h b/src/dirdef.h
index 611ba3e..2fb04f5 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -76,6 +76,7 @@ class DirDef : public Definition
static DirDef *mergeDirectoryInTree(const QCString &path);
bool visited;
void setDiskName(const QCString &name) { m_diskName = name; }
+ void sort();
private:
friend void computeDirDependencies();
@@ -138,6 +139,7 @@ class UsedDir
const FilePairDict &filePairs() const { return m_filePairs; }
const DirDef *dir() const { return m_dir; }
bool inherited() const { return m_inherited; }
+ void sort();
private:
DirDef *m_dir;