Skip to content

Commit 5475bf2

Browse files
author
Dimitri van Heesch
committed
Improved sorting performance for directories and files
1 parent 6782795 commit 5475bf2

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

src/dirdef.cpp

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,23 @@ bool DirDef::isLinkable() const
6767

6868
void DirDef::addSubDir(DirDef *subdir)
6969
{
70-
m_subdirs.inSort(subdir);
70+
m_subdirs.append(subdir);
7171
subdir->setOuterScope(this);
7272
subdir->m_parent=this;
7373
}
7474

7575
void DirDef::addFile(FileDef *fd)
7676
{
77-
m_fileList->inSort(fd);
77+
m_fileList->append(fd);
7878
fd->setDirDef(this);
7979
}
8080

81+
void DirDef::sort()
82+
{
83+
m_subdirs.sort();
84+
m_fileList->sort();
85+
}
86+
8187
static QCString encodeDirName(const QCString &anchor)
8288
{
8389
// convert to md5 hash
@@ -593,11 +599,20 @@ void DirDef::computeDependencies()
593599
//printf(" %d: add dependency %s->%s\n",count++,name().data(),usedDir->name().data());
594600
addUsesDependency(usedDir,fd,ii->fileDef,FALSE);
595601
}
596-
}
602+
}
597603
}
598604
}
599605
}
600606
}
607+
if (m_usedDirs)
608+
{
609+
QDictIterator<UsedDir> udi(*m_usedDirs);
610+
UsedDir *udir;
611+
for (udi.toFirst();(udir=udi.current());++udi)
612+
{
613+
udir->sort();
614+
}
615+
}
601616
}
602617

603618
bool DirDef::isParentOf(DirDef *dir) const
@@ -640,10 +655,15 @@ UsedDir::~UsedDir()
640655

641656
void UsedDir::addFileDep(FileDef *srcFd,FileDef *dstFd)
642657
{
643-
m_filePairs.inSort(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(),
658+
m_filePairs.append(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(),
644659
new FilePair(srcFd,dstFd));
645660
}
646661

662+
void UsedDir::sort()
663+
{
664+
m_filePairs.sort();
665+
}
666+
647667
FilePair *UsedDir::findFilePair(const char *name)
648668
{
649669
QCString n=name;
@@ -659,7 +679,7 @@ DirDef *DirDef::createNewDir(const char *path)
659679
//printf("Adding new dir %s\n",path);
660680
dir = new DirDef(path);
661681
//printf("createNewDir %s short=%s\n",path,dir->shortName().data());
662-
Doxygen::directories->inSort(path,dir);
682+
Doxygen::directories->append(path,dir);
663683
}
664684
return dir;
665685
}
@@ -919,6 +939,11 @@ void buildDirectories()
919939
}
920940
}
921941
}
942+
for (sdi.toFirst();(dir=sdi.current());++sdi)
943+
{
944+
dir->sort();
945+
}
946+
Doxygen::directories->sort();
922947
computeCommonDirPrefix();
923948
}
924949

src/dirdef.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class DirDef : public Definition
7676
static DirDef *mergeDirectoryInTree(const QCString &path);
7777
bool visited;
7878
void setDiskName(const QCString &name) { m_diskName = name; }
79+
void sort();
7980

8081
private:
8182
friend void computeDirDependencies();
@@ -138,6 +139,7 @@ class UsedDir
138139
const FilePairDict &filePairs() const { return m_filePairs; }
139140
const DirDef *dir() const { return m_dir; }
140141
bool inherited() const { return m_inherited; }
142+
void sort();
141143

142144
private:
143145
DirDef *m_dir;

0 commit comments

Comments
 (0)