Skip to content

Commit 54d9399

Browse files
committed
Refactoring: replace Doxygen::directories by Doxygen::dirLinkedMap
1 parent 7f79d52 commit 54d9399

File tree

13 files changed

+100
-123
lines changed

13 files changed

+100
-123
lines changed

src/context.cpp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6517,15 +6517,13 @@ class NestingContext::Private : public GenericNodeListContext
65176517
addClass(cd.get(),rootOnly,visitedClasses);
65186518
}
65196519
}
6520-
void addDirs(const DirSDict &dirDict,ClassDefSet &visitedClasses)
6520+
void addDirs(const DirLinkedMap &dirLinkedMap,ClassDefSet &visitedClasses)
65216521
{
6522-
SDict<DirDef>::Iterator dli(dirDict);
6523-
const DirDef *dd;
6524-
for (dli.toFirst();(dd=dli.current());++dli)
6522+
for (const auto &dd : dirLinkedMap)
65256523
{
65266524
if (dd->getOuterScope()==Doxygen::globalScope)
65276525
{
6528-
append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE,FALSE,FALSE,visitedClasses));
6526+
append(NestingNodeContext::alloc(m_parent,dd.get(),m_index,m_level,FALSE,FALSE,FALSE,visitedClasses));
65296527
m_index++;
65306528
}
65316529
}
@@ -6721,7 +6719,7 @@ void NestingContext::addNamespaces(const NamespaceLinkedRefMap &nsLinkedRefMap,b
67216719
p->addNamespaces(nsLinkedRefMap,rootOnly,addClasses,visitedClasses);
67226720
}
67236721

6724-
void NestingContext::addDirs(const DirSDict &dirs,ClassDefSet &visitedClasses)
6722+
void NestingContext::addDirs(const DirLinkedMap &dirs,ClassDefSet &visitedClasses)
67256723
{
67266724
p->addDirs(dirs,visitedClasses);
67276725
}
@@ -7117,11 +7115,9 @@ class DirListContext::Private : public GenericNodeListContext
71177115
public:
71187116
Private()
71197117
{
7120-
const DirDef *dir;
7121-
DirSDict::Iterator sdi(*Doxygen::directories);
7122-
for (sdi.toFirst();(dir=sdi.current());++sdi)
7118+
for (const auto &dir : *Doxygen::dirLinkedMap)
71237119
{
7124-
append(DirContext::alloc(dir));
7120+
append(DirContext::alloc(dir.get()));
71257121
}
71267122
}
71277123
};
@@ -7217,10 +7213,7 @@ class FileTreeContext::Private
72177213
// Add dirs tree
72187214
m_dirFileTree.reset(NestingContext::alloc(0,0));
72197215
ClassDefSet visitedClasses;
7220-
if (Doxygen::directories)
7221-
{
7222-
m_dirFileTree->addDirs(*Doxygen::directories,visitedClasses);
7223-
}
7216+
m_dirFileTree->addDirs(*Doxygen::dirLinkedMap,visitedClasses);
72247217
if (Doxygen::inputNameLinkedMap)
72257218
{
72267219
m_dirFileTree->addFiles(*Doxygen::inputNameLinkedMap,visitedClasses);

src/context.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "template.h"
2121
#include <qlist.h>
2222
#include <stdio.h>
23-
#include "dirdef.h"
2423
#include "classdef.h"
2524
#include "searchindex.h"
2625
#include "membergroup.h"
@@ -43,10 +42,12 @@ class FileNameLinkedMap;
4342
class ClassLinkedMap;
4443
class MemberNameInfoLinkedMap;
4544

45+
class DirDef;
46+
class DirLinkedMap;
47+
class DirList;
48+
4649
class FileDef;
4750
class FileList;
48-
class DirSDict;
49-
class DirDef;
5051
struct IncludeInfo;
5152
class MemberList;
5253
class MemberSDict;
@@ -550,7 +551,7 @@ class NestingContext : public RefCountedContext, public TemplateListIntf
550551
void addNamespaces(const NamespaceLinkedRefMap &nsLinkedMap,bool rootOnly,bool addClasses,ClassDefSet &visitedClasses);
551552
void addClasses(const ClassLinkedMap &clLinkedMap,bool rootOnly,ClassDefSet &visitedClasses);
552553
void addClasses(const ClassLinkedRefMap &clLinkedMap,bool rootOnly,ClassDefSet &visitedClasses);
553-
void addDirs(const DirSDict &,ClassDefSet &visitedClasses);
554+
void addDirs(const DirLinkedMap &,ClassDefSet &visitedClasses);
554555
void addDirs(const DirList &,ClassDefSet &visitedClasses);
555556
void addFiles(const FileNameLinkedMap &,ClassDefSet &visitedClasses);
556557
void addFiles(const FileList &,ClassDefSet &visitedClasses);

src/dirdef.cpp

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -799,13 +799,14 @@ FilePair *UsedDir::findFilePair(const char *name)
799799
DirDef *DirDefImpl::createNewDir(const char *path)
800800
{
801801
ASSERT(path!=0);
802-
DirDef *dir = Doxygen::directories->find(path);
802+
DirDef *dir = Doxygen::dirLinkedMap->find(path);
803803
if (dir==0) // new dir
804804
{
805+
dir = Doxygen::dirLinkedMap->add(path,
806+
std::unique_ptr<DirDef>(
807+
createDirDef(path)));
805808
//printf("Adding new dir %s\n",path);
806-
dir = createDirDef(path);
807809
//printf("createNewDir %s short=%s\n",path,dir->shortName().data());
808-
Doxygen::directories->append(path,dir);
809810
}
810811
return dir;
811812
}
@@ -939,14 +940,11 @@ void DirRelation::writeDocumentation(OutputList &ol)
939940
static void computeCommonDirPrefix()
940941
{
941942
QCString path;
942-
DirDef *dir;
943-
DirSDict::Iterator sdi(*Doxygen::directories);
944-
if (Doxygen::directories->count()>0) // we have at least one dir
943+
auto it = Doxygen::dirLinkedMap->begin();
944+
if (!Doxygen::dirLinkedMap->empty()) // we have at least one dir
945945
{
946946
// start will full path of first dir
947-
sdi.toFirst();
948-
dir=sdi.current();
949-
path=dir->name();
947+
path=(*it)->name();
950948
int i=path.findRev('/',(int)path.length()-2);
951949
path=path.left(i+1);
952950
bool done=FALSE;
@@ -959,8 +957,8 @@ static void computeCommonDirPrefix()
959957
while (!done)
960958
{
961959
uint l = path.length();
962-
uint count=0;
963-
for (sdi.toFirst();(dir=sdi.current());++sdi)
960+
size_t count=0;
961+
for (const auto &dir : *Doxygen::dirLinkedMap)
964962
{
965963
QCString dirName = dir->name();
966964
if (dirName.length()>path.length())
@@ -998,15 +996,15 @@ static void computeCommonDirPrefix()
998996
}
999997
count++;
1000998
}
1001-
if (count==Doxygen::directories->count())
999+
if (count==Doxygen::dirLinkedMap->size())
10021000
// path matches for all directories -> found the common prefix
10031001
{
10041002
done=TRUE;
10051003
}
10061004
}
10071005
}
10081006
}
1009-
for (sdi.toFirst();(dir=sdi.current());++sdi)
1007+
for (const auto &dir : *Doxygen::dirLinkedMap)
10101008
{
10111009
QCString diskName = dir->name().right(dir->name().length()-path.length());
10121010
dir->setDiskName(diskName);
@@ -1025,7 +1023,7 @@ void buildDirectories()
10251023
if (fd->getReference().isEmpty())
10261024
{
10271025
DirDef *dir;
1028-
if ((dir=Doxygen::directories->find(fd->getPath()))==0) // new directory
1026+
if ((dir=Doxygen::dirLinkedMap->find(fd->getPath()))==0) // new directory
10291027
{
10301028
dir = DirDefImpl::mergeDirectoryInTree(fd->getPath());
10311029
}
@@ -1038,45 +1036,48 @@ void buildDirectories()
10381036
}
10391037
}
10401038

1041-
//DirDef *root = new DirDef("root:");
10421039
// compute relations between directories => introduce container dirs.
1043-
DirDef *dir;
1044-
DirSDict::Iterator sdi(*Doxygen::directories);
1045-
for (sdi.toFirst();(dir=sdi.current());++sdi)
1040+
for (const auto &dir : *Doxygen::dirLinkedMap)
10461041
{
10471042
QCString name = dir->name();
10481043
int i=name.findRev('/',(int)name.length()-2);
10491044
if (i>0)
10501045
{
1051-
DirDef *parent = Doxygen::directories->find(name.left(i+1));
1046+
DirDef *parent = Doxygen::dirLinkedMap->find(name.left(i+1));
10521047
//if (parent==0) parent=root;
10531048
if (parent)
10541049
{
1055-
parent->addSubDir(dir);
1050+
parent->addSubDir(dir.get());
10561051
//printf("DirDefImpl::addSubdir(): Adding subdir\n%s to\n%s\n",
10571052
// dir->displayName().data(), parent->displayName().data());
10581053
}
10591054
}
10601055
}
1061-
for (sdi.toFirst();(dir=sdi.current());++sdi)
1056+
1057+
// sort the directory contents
1058+
for (const auto &dir : *Doxygen::dirLinkedMap)
10621059
{
10631060
dir->sort();
10641061
}
1065-
Doxygen::directories->sort();
1062+
1063+
// short the directories themselves
1064+
std::sort(Doxygen::dirLinkedMap->begin(),
1065+
Doxygen::dirLinkedMap->end(),
1066+
[](const auto &d1,const auto &d2)
1067+
{ return qstricmp(d1->shortName(),d2->shortName()) < 0; });
1068+
10661069
computeCommonDirPrefix();
10671070
}
10681071

10691072
void computeDirDependencies()
10701073
{
1071-
DirDef *dir;
1072-
DirSDict::Iterator sdi(*Doxygen::directories);
10731074
// compute nesting level for each directory
1074-
for (sdi.toFirst();(dir=sdi.current());++sdi)
1075+
for (const auto &dir : *Doxygen::dirLinkedMap)
10751076
{
10761077
dir->setLevel();
10771078
}
10781079
// compute uses dependencies between directories
1079-
for (sdi.toFirst();(dir=sdi.current());++sdi)
1080+
for (const auto &dir : *Doxygen::dirLinkedMap)
10801081
{
10811082
//printf("computeDependencies for %s: #dirs=%d\n",dir->name().data(),Doxygen::directories.count());
10821083
dir->computeDependencies();
@@ -1086,9 +1087,7 @@ void computeDirDependencies()
10861087

10871088
void generateDirDocs(OutputList &ol)
10881089
{
1089-
DirDef *dir;
1090-
DirSDict::Iterator sdi(*Doxygen::directories);
1091-
for (sdi.toFirst();(dir=sdi.current());++sdi)
1090+
for (const auto &dir : *Doxygen::dirLinkedMap)
10921091
{
10931092
ol.pushGeneratorState();
10941093
if (!dir->hasDocumentation())

src/dirdef.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <qglobal.h>
2626
#include <qcstring.h>
2727

28+
2829
class FileList;
2930
class QStrList;
3031
class FileDef;
@@ -34,9 +35,7 @@ class FTextStream;
3435
class FilePair;
3536
class FilePairDict;
3637
class DirDef;
37-
38-
/** A list of directories. */
39-
typedef std::vector<DirDef*> DirList;
38+
class DirList;
4039

4140
bool compareDirDefs(const DirDef *item1, const DirDef *item2);
4241

@@ -153,6 +152,7 @@ class DirRelation
153152
UsedDir *m_dst;
154153
};
155154

155+
#if 0
156156
/** A sorted dictionary of DirDef objects. */
157157
class DirSDict : public SDict<DirDef>
158158
{
@@ -163,6 +163,18 @@ class DirSDict : public SDict<DirDef>
163163
return qstricmp(item1->shortName(),item2->shortName());
164164
}
165165
};
166+
#endif
167+
168+
/** A linked map of directories */
169+
class DirLinkedMap : public LinkedMap<DirDef>
170+
{
171+
};
172+
173+
/** A list of directories. */
174+
class DirList : public std::vector<const DirDef*>
175+
{
176+
};
177+
166178

167179
// ------------------
168180

src/docbookgen.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -497,22 +497,11 @@ DB_GEN_C2("IndexSections " << is)
497497
case isDirDocumentation:
498498
{
499499
t << "</title>" << endl;
500-
SDict<DirDef>::Iterator dli(*Doxygen::directories);
501-
DirDef *dd;
502-
bool found=FALSE;
503-
for (dli.toFirst();(dd=dli.current()) && !found;++dli)
500+
for (const auto &dd : *Doxygen::dirLinkedMap)
504501
{
505502
if (dd->isLinkableInProject())
506503
{
507504
t << "< xi:include href=\"" << dd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
508-
found=TRUE;
509-
}
510-
}
511-
for (;(dd=dli.current());++dli)
512-
{
513-
if (dd->isLinkableInProject())
514-
{
515-
t << " <xi:include href=\"" << dd->getOutputFileBase() << ".xml\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
516505
}
517506
}
518507
}

src/doxygen.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ QDict<Definition> *Doxygen::clangUsrMap = 0;
148148
bool Doxygen::outputToWizard=FALSE;
149149
QDict<int> * Doxygen::htmlDirMap = 0;
150150
Cache<std::string,LookupInfo> *Doxygen::lookupCache;
151-
DirSDict *Doxygen::directories;
151+
DirLinkedMap *Doxygen::dirLinkedMap;
152152
SDict<DirRelation> Doxygen::dirRelations(257);
153153
ParserManager *Doxygen::parserManager = 0;
154154
QCString Doxygen::htmlFileExtension;
@@ -4956,9 +4956,7 @@ static void addListReferences()
49564956
}
49574957
}
49584958

4959-
DirSDict::Iterator ddi(*Doxygen::directories);
4960-
DirDef *dd = 0;
4961-
for (ddi.toFirst();(dd=ddi.current());++ddi)
4959+
for (const auto &dd : *Doxygen::dirLinkedMap)
49624960
{
49634961
QCString name = dd->getOutputFileBase();
49644962
//if (dd->getGroupDef())
@@ -8573,9 +8571,8 @@ static void findDirDocumentation(const Entry *root)
85738571
{
85748572
normalizedName+='/';
85758573
}
8576-
DirDef *dir,*matchingDir=0;
8577-
SDict<DirDef>::Iterator sdi(*Doxygen::directories);
8578-
for (sdi.toFirst();(dir=sdi.current());++sdi)
8574+
DirDef *matchingDir=0;
8575+
for (const auto &dir : *Doxygen::dirLinkedMap)
85798576
{
85808577
//printf("Dir: %s<->%s\n",dir->name().data(),normalizedName.data());
85818578
if (dir->name().right(normalizedName.length())==normalizedName)
@@ -8591,7 +8588,7 @@ static void findDirDocumentation(const Entry *root)
85918588
}
85928589
else
85938590
{
8594-
matchingDir=dir;
8591+
matchingDir=dir.get();
85958592
}
85968593
}
85978594
}
@@ -10153,8 +10150,7 @@ void initDoxygen()
1015310150
Doxygen::namespaceLinkedMap = new NamespaceLinkedMap;
1015410151
Doxygen::classLinkedMap = new ClassLinkedMap;
1015510152
Doxygen::hiddenClassLinkedMap = new ClassLinkedMap;
10156-
Doxygen::directories = new DirSDict(17);
10157-
Doxygen::directories->setAutoDelete(TRUE);
10153+
Doxygen::dirLinkedMap = new DirLinkedMap;
1015810154
Doxygen::pageLinkedMap = new PageLinkedMap; // all doc pages
1015910155
Doxygen::exampleLinkedMap = new PageLinkedMap; // all examples
1016010156
Doxygen::tagDestinationDict.setAutoDelete(TRUE);
@@ -10211,7 +10207,7 @@ void cleanUpDoxygen()
1021110207
delete Doxygen::functionNameLinkedMap;
1021210208
delete Doxygen::groupLinkedMap;
1021310209
delete Doxygen::namespaceLinkedMap;
10214-
delete Doxygen::directories;
10210+
delete Doxygen::dirLinkedMap;
1021510211

1021610212
DotManager::deleteInstance();
1021710213
}

src/doxygen.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class Doxygen
128128
static bool outputToWizard;
129129
static QDict<int> *htmlDirMap;
130130
static Cache<std::string,LookupInfo> *lookupCache;
131-
static DirSDict *directories;
131+
static DirLinkedMap *dirLinkedMap;
132132
static SDict<DirRelation> dirRelations;
133133
static ParserManager *parserManager;
134134
static bool suppressDocWarnings;

0 commit comments

Comments
 (0)