summaryrefslogtreecommitdiffstats
path: root/src/doxygen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/doxygen.cpp')
-rw-r--r--src/doxygen.cpp271
1 files changed, 154 insertions, 117 deletions
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 8c72b65..41d7b0a 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -127,16 +127,16 @@ GroupSDict *Doxygen::groupSDict = 0;
PageSDict *Doxygen::pageSDict = 0;
PageSDict *Doxygen::exampleSDict = 0;
StringDict Doxygen::aliasDict(257); // aliases
-std::set<std::string> Doxygen::inputPaths;
+StringSet Doxygen::inputPaths;
FileNameLinkedMap *Doxygen::includeNameLinkedMap = 0; // include names
FileNameLinkedMap *Doxygen::exampleNameLinkedMap = 0; // examples
FileNameLinkedMap *Doxygen::imageNameLinkedMap = 0; // images
FileNameLinkedMap *Doxygen::dotFileNameLinkedMap = 0; // dot files
FileNameLinkedMap *Doxygen::mscFileNameLinkedMap = 0; // msc files
FileNameLinkedMap *Doxygen::diaFileNameLinkedMap = 0; // dia files
-StringMap Doxygen::namespaceAliasMap; // all namespace aliases
+StringUnorderedMap Doxygen::namespaceAliasMap; // all namespace aliases
StringDict Doxygen::tagDestinationDict(257); // all tag locations
-std::unordered_set<std::string> Doxygen::expandAsDefinedSet; // all macros that should be expanded
+StringUnorderedSet Doxygen::expandAsDefinedSet; // all macros that should be expanded
QIntDict<MemberGroupInfo> Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading
PageDef *Doxygen::mainPage = 0;
bool Doxygen::insideMainPage = FALSE; // are we generating docs for the main page?
@@ -168,7 +168,7 @@ Preprocessor *Doxygen::preprocessor = 0;
// locally accessible globals
static std::unordered_map< std::string, const Entry* > g_classEntries;
-static StringList g_inputFiles;
+static StringVector g_inputFiles;
static QDict<void> g_compoundKeywordDict(7); // keywords recognised as compounds
static OutputList *g_outputList = 0; // list of output generating objects
static QDict<FileDef> g_usingDeclarations(1009); // used classes
@@ -865,7 +865,7 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr
std::unique_ptr<ArgumentList> getTemplateArgumentsFromName(
const QCString &name,
- const std::vector<ArgumentList> &tArgLists)
+ const ArgumentLists &tArgLists)
{
// for each scope fragment, check if it is a template and advance through
// the list if so.
@@ -3018,8 +3018,13 @@ static void addMethodToClass(const Entry *root,ClassDef *cd,
else mtype=MemberType_Function;
// strip redundant template specifier for constructors
+ int j = -1;
if ((fd==0 || fd->getLanguage()==SrcLangExt_Cpp) &&
- name.left(9)!="operator " && (i=name.find('<'))!=-1 && name.find('>')!=-1)
+ name.left(9)!="operator " && // not operator
+ (i=name.find('<'))!=-1 && // containing <
+ (j=name.find('>'))!=-1 && // or >
+ (j!=i+2 || name.at(i+1)!='=') // but not the C++20 spaceship operator <=>
+ )
{
name=name.left(i);
}
@@ -4704,7 +4709,7 @@ static void computeClassRelations()
{
findBaseClassesForClass(root,cd,cd,cd,DocumentedOnly,FALSE);
}
- int numMembers = cd ? cd->memberNameInfoLinkedMap().size() : 0;
+ size_t numMembers = cd ? cd->memberNameInfoLinkedMap().size() : 0;
if ((cd==0 || (!cd->hasDocumentation() && !cd->isReference())) && numMembers>0 &&
bName.right(2)!="::")
{
@@ -4874,7 +4879,7 @@ static void addListReferences()
name = pd->getGroupDef()->getOutputFileBase();
}
{
- const std::vector<RefItem*> &xrefItems = pd->xrefListItems();
+ const RefItemVector &xrefItems = pd->xrefListItems();
addRefItem(xrefItems,
name,
theTranslator->trPage(TRUE,TRUE),
@@ -4891,7 +4896,7 @@ static void addListReferences()
//{
// name = dd->getGroupDef()->getOutputFileBase();
//}
- const std::vector<RefItem*> &xrefItems = dd->xrefListItems();
+ const RefItemVector &xrefItems = dd->xrefListItems();
addRefItem(xrefItems,
name,
theTranslator->trDir(TRUE,TRUE),
@@ -5229,8 +5234,8 @@ static bool findGlobalMember(const Entry *root,
}
static bool isSpecialization(
- const std::vector<ArgumentList> &srcTempArgLists,
- const std::vector<ArgumentList> &dstTempArgLists
+ const ArgumentLists &srcTempArgLists,
+ const ArgumentLists &dstTempArgLists
)
{
auto srcIt = srcTempArgLists.begin();
@@ -5256,8 +5261,8 @@ static bool scopeIsTemplate(const Definition *d)
}
static QCString substituteTemplatesInString(
- const std::vector<ArgumentList> &srcTempArgLists,
- const std::vector<ArgumentList> &dstTempArgLists,
+ const ArgumentLists &srcTempArgLists,
+ const ArgumentLists &dstTempArgLists,
const QCString &src
)
{
@@ -5335,8 +5340,8 @@ static QCString substituteTemplatesInString(
}
static void substituteTemplatesInArgList(
- const std::vector<ArgumentList> &srcTempArgLists,
- const std::vector<ArgumentList> &dstTempArgLists,
+ const ArgumentLists &srcTempArgLists,
+ const ArgumentLists &dstTempArgLists,
const ArgumentList &src,
ArgumentList &dst
)
@@ -5484,7 +5489,7 @@ static void addMemberFunction(const Entry *root,
"4. class definition %s found\n",cd->name().data());
// get the template parameter lists found at the member declaration
- std::vector<ArgumentList> declTemplArgs = cd->getTemplateParameterLists();
+ ArgumentLists declTemplArgs = cd->getTemplateParameterLists();
const ArgumentList &templAl = md->templateArguments();
if (!templAl.empty())
{
@@ -5492,7 +5497,7 @@ static void addMemberFunction(const Entry *root,
}
// get the template parameter lists found at the member definition
- const std::vector<ArgumentList> &defTemplArgs = root->tArgLists;
+ const ArgumentLists &defTemplArgs = root->tArgLists;
//printf("defTemplArgs=%p\n",defTemplArgs);
// do we replace the decl argument lists with the def argument lists?
@@ -8435,7 +8440,7 @@ static void checkPageRelations()
static void resolveUserReferences()
{
- for (auto &si : SectionManager::instance())
+ for (const auto &si : SectionManager::instance())
{
//printf("si->label='%s' si->definition=%s si->fileName='%s'\n",
// si->label.data(),si->definition?si->definition->name().data():"<none>",
@@ -8978,8 +8983,10 @@ static void generateDiskNames()
// as the common prefix between the first and last entry
const FileEntry &first = fileEntries[0];
const FileEntry &last = fileEntries[size-1];
+ int first_path_size = static_cast<int>(first.path.size());
+ int last_path_size = static_cast<int>(last.path.size());
int j=0;
- for (size_t i=0;i<first.path.size() && i<last.path.size();i++)
+ for (int i=0;i<first_path_size && i<last_path_size;i++)
{
if (first.path[i]=='/') j=i;
if (first.path[i]!=last.path[i]) break;
@@ -9091,25 +9098,23 @@ static void parseFiles(const std::shared_ptr<Entry> &root)
// create a dictionary with files to process
QDict<void> g_filesToProcess(10007);
- StringListIterator it(g_inputFiles);
- QCString *s;
- for (;(s=it.current());++it)
+ for (const auto &s : g_inputFiles)
{
- g_filesToProcess.insert(*s,(void*)0x8);
+ g_filesToProcess.insert(s.c_str(),(void*)0x8);
}
// process source files (and their include dependencies)
- for (it.toFirst();(s=it.current());++it)
+ for (const auto &s : g_inputFiles)
{
bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,s->data(),ambig);
+ FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,s.c_str(),ambig);
ASSERT(fd!=0);
if (fd->isSource() && !fd->isReference()) // this is a source file
{
QStrList filesInSameTu;
- OutlineParserInterface &parser = getParserForFile(s->data());
- parser.startTranslationUnit(s->data());
- parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
+ OutlineParserInterface &parser = getParserForFile(s.c_str());
+ parser.startTranslationUnit(s.c_str());
+ parseFile(parser,root,fd,s.c_str(),FALSE,filesInSameTu);
//printf(" got %d extra files in tu\n",filesInSameTu.count());
// Now process any include files in the same translation unit
@@ -9117,13 +9122,13 @@ static void parseFiles(const std::shared_ptr<Entry> &root)
char *incFile = filesInSameTu.first();
while (incFile && g_filesToProcess.find(incFile))
{
- if (qstrcmp(incFile,s->data()) && !g_processedFiles.find(incFile))
+ if (qstrcmp(incFile,s.c_str()) && !g_processedFiles.find(incFile))
{
FileDef *ifd=findFileDef(Doxygen::inputNameLinkedMap,incFile,ambig);
if (ifd && !ifd->isReference())
{
QStrList moreFiles;
- //printf(" Processing %s in same translation unit as %s\n",incFile,s->data());
+ //printf(" Processing %s in same translation unit as %s\n",incFile,s->c_str());
parseFile(parser,root,ifd,incFile,TRUE,moreFiles);
g_processedFiles.insert(incFile,(void*)0x8);
}
@@ -9131,40 +9136,38 @@ static void parseFiles(const std::shared_ptr<Entry> &root)
incFile = filesInSameTu.next();
}
parser.finishTranslationUnit();
- g_processedFiles.insert(*s,(void*)0x8);
+ g_processedFiles.insert(s.c_str(),(void*)0x8);
}
}
// process remaining files
- for (it.toFirst();(s=it.current());++it)
+ for (const auto &s : g_inputFiles)
{
- if (!g_processedFiles.find(*s)) // not yet processed
+ if (!g_processedFiles.find(s.c_str())) // not yet processed
{
bool ambig;
QStrList filesInSameTu;
- FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,s->data(),ambig);
+ FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,s.c_str(),ambig);
ASSERT(fd!=0);
- OutlineParserInterface &parser = getParserForFile(s->data());
- parser.startTranslationUnit(s->data());
- parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
+ OutlineParserInterface &parser = getParserForFile(s.c_str());
+ parser.startTranslationUnit(s.c_str());
+ parseFile(parser,root,fd,s.c_str(),FALSE,filesInSameTu);
parser.finishTranslationUnit();
- g_processedFiles.insert(*s,(void*)0x8);
+ g_processedFiles.insert(s.c_str(),(void*)0x8);
}
}
}
else // normal processing
#endif
{
- StringListIterator it(g_inputFiles);
- QCString *s;
- for (;(s=it.current());++it)
+ for (const auto &s : g_inputFiles)
{
bool ambig;
QStrList filesInSameTu;
- FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,s->data(),ambig);
+ FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,s.c_str(),ambig);
ASSERT(fd!=0);
- OutlineParserInterface &parser = getParserForFile(s->data());
- parser.startTranslationUnit(s->data());
- parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
+ OutlineParserInterface &parser = getParserForFile(s.c_str());
+ parser.startTranslationUnit(s.c_str());
+ parseFile(parser,root,fd,s.c_str(),FALSE,filesInSameTu);
}
}
}
@@ -9247,15 +9250,15 @@ static QDict<void> g_pathsVisited(1009);
static int readDir(QFileInfo *fi,
FileNameLinkedMap *fnMap,
- StringDict *exclDict,
+ StringUnorderedSet *exclSet,
QStrList *patList,
QStrList *exclPatList,
- StringList *resultList,
- StringDict *resultDict,
+ StringVector *resultList,
+ StringUnorderedSet *resultSet,
bool errorIfNotExist,
bool recursive,
- std::unordered_set<std::string> *killSet,
- std::set<std::string> *paths
+ StringUnorderedSet *killSet,
+ StringSet *paths
)
{
QCString dirName = fi->absFilePath().utf8();
@@ -9284,7 +9287,7 @@ static int readDir(QFileInfo *fi,
while ((cfi=it.current()))
{
- if (exclDict==0 || exclDict->find(cfi->absFilePath().utf8())==0)
+ if (exclSet==0 || exclSet->find(cfi->absFilePath().utf8().data())==exclSet->end())
{ // file should not be excluded
//printf("killSet->find(%s)\n",cfi->absFilePath().data());
if (!cfi->exists() || !cfi->isReadable())
@@ -9314,13 +9317,8 @@ static int readDir(QFileInfo *fi,
fn->push_back(std::move(fd));
}
}
- QCString *rs=0;
- if (resultList || resultDict)
- {
- rs=new QCString(cfi->absFilePath().utf8());
- }
- if (resultList) resultList->append(rs);
- if (resultDict) resultDict->insert(cfi->absFilePath().utf8(),rs);
+ if (resultList) resultList->push_back(cfi->absFilePath().utf8().data());
+ if (resultSet) resultSet->insert(cfi->absFilePath().utf8().data());
if (killSet) killSet->insert(cfi->absFilePath().utf8().data());
}
else if (recursive &&
@@ -9330,8 +9328,8 @@ static int readDir(QFileInfo *fi,
cfi->fileName().at(0)!='.') // skip "." ".." and ".dir"
{
cfi->setFile(cfi->absFilePath());
- totalSize+=readDir(cfi,fnMap,exclDict,
- patList,exclPatList,resultList,resultDict,errorIfNotExist,
+ totalSize+=readDir(cfi,fnMap,exclSet,
+ patList,exclPatList,resultList,resultSet,errorIfNotExist,
recursive,killSet,paths);
}
}
@@ -9348,15 +9346,15 @@ static int readDir(QFileInfo *fi,
int readFileOrDirectory(const char *s,
FileNameLinkedMap *fnMap,
- StringDict *exclDict,
+ StringUnorderedSet *exclSet,
QStrList *patList,
QStrList *exclPatList,
- StringList *resultList,
- StringDict *resultDict,
+ StringVector *resultList,
+ StringUnorderedSet *resultSet,
bool recursive,
bool errorIfNotExist,
- std::unordered_set<std::string> *killSet,
- std::set<std::string> *paths
+ StringUnorderedSet *killSet,
+ StringSet *paths
)
{
//printf("killSet count=%d\n",killSet ? (int)killSet->size() : -1);
@@ -9370,7 +9368,7 @@ int readFileOrDirectory(const char *s,
//printf("readFileOrDirectory(%s)\n",s);
int totalSize=0;
{
- if (exclDict==0 || exclDict->find(fi.absFilePath().utf8())==0)
+ if (exclSet==0 || exclSet->find(fi.absFilePath().utf8().data())==exclSet->end())
{
if (!fi.exists() || !fi.isReadable())
{
@@ -9405,12 +9403,10 @@ int readFileOrDirectory(const char *s,
fn->push_back(std::move(fd));
}
}
- QCString *rs=0;
- if (resultList || resultDict)
+ if (resultList || resultSet)
{
- rs=new QCString(filePath);
- if (resultList) resultList->append(rs);
- if (resultDict) resultDict->insert(filePath,rs);
+ if (resultList) resultList->push_back(filePath.data());
+ if (resultSet) resultSet->insert(filePath.data());
}
if (killSet) killSet->insert(fi.absFilePath().utf8().data());
@@ -9418,8 +9414,8 @@ int readFileOrDirectory(const char *s,
}
else if (fi.isDir()) // readable dir
{
- totalSize+=readDir(&fi,fnMap,exclDict,patList,
- exclPatList,resultList,resultDict,errorIfNotExist,
+ totalSize+=readDir(&fi,fnMap,exclSet,patList,
+ exclPatList,resultList,resultSet,errorIfNotExist,
recursive,killSet,paths);
}
}
@@ -9799,6 +9795,8 @@ void cleanUpDoxygen()
delete Doxygen::namespaceSDict;
delete Doxygen::directories;
+ DotManager::deleteInstance();
+
//delete Doxygen::symbolMap; <- we cannot do this unless all static lists
// (such as Doxygen::namespaceSDict)
// with objects based on Definition are made
@@ -10473,12 +10471,11 @@ static QCString getQchFileName()
void searchInputFiles()
{
- std::unordered_set<std::string> killSet;
+ StringUnorderedSet killSet;
QStrList &exclPatterns = Config_getList(EXCLUDE_PATTERNS);
bool alwaysRecursive = Config_getBool(RECURSIVE);
- StringDict excludeNameDict(1009);
- excludeNameDict.setAutoDelete(TRUE);
+ StringUnorderedSet excludeNameSet;
// gather names of all files in the include path
g_s.begin("Searching for include files...\n");
@@ -10492,10 +10489,16 @@ void searchInputFiles()
{
pl = Config_getList(FILE_PATTERNS);
}
- readFileOrDirectory(s,Doxygen::includeNameLinkedMap,0,&pl,
- &exclPatterns,0,0,
- alwaysRecursive,
- TRUE,&killSet);
+ readFileOrDirectory(s, // s
+ Doxygen::includeNameLinkedMap, // fnDict
+ 0, // exclSet
+ &pl, // patList
+ &exclPatterns, // exclPatList
+ 0, // resultList
+ 0, // resultSet
+ alwaysRecursive, // recursive
+ TRUE, // errorIfNotExist
+ &killSet); // killSet
s=includePathList.next();
}
g_s.end();
@@ -10506,11 +10509,16 @@ void searchInputFiles()
s=examplePathList.first();
while (s)
{
- readFileOrDirectory(s,Doxygen::exampleNameLinkedMap,0,
- &Config_getList(EXAMPLE_PATTERNS),
- 0,0,0,
- (alwaysRecursive || Config_getBool(EXAMPLE_RECURSIVE)),
- TRUE,&killSet);
+ readFileOrDirectory(s, // s
+ Doxygen::exampleNameLinkedMap, // fnDict
+ 0, // exclSet
+ &Config_getList(EXAMPLE_PATTERNS), // patList
+ 0, // exclPatList
+ 0, // resultList
+ 0, // resultSet
+ (alwaysRecursive || Config_getBool(EXAMPLE_RECURSIVE)), // recursive
+ TRUE, // errorIfNotExist
+ &killSet); // killSet
s=examplePathList.next();
}
g_s.end();
@@ -10521,10 +10529,16 @@ void searchInputFiles()
s=imagePathList.first();
while (s)
{
- readFileOrDirectory(s,Doxygen::imageNameLinkedMap,0,0,
- 0,0,0,
- alwaysRecursive,
- TRUE,&killSet);
+ readFileOrDirectory(s, // s
+ Doxygen::imageNameLinkedMap, // fnDict
+ 0, // exclSet
+ 0, // patList
+ 0, // exclPatList
+ 0, // resultList
+ 0, // resultSet
+ alwaysRecursive, // recursive
+ TRUE, // errorIfNotExist
+ &killSet); // killSet
s=imagePathList.next();
}
g_s.end();
@@ -10535,10 +10549,16 @@ void searchInputFiles()
s=dotFileList.first();
while (s)
{
- readFileOrDirectory(s,Doxygen::dotFileNameLinkedMap,0,0,
- 0,0,0,
- alwaysRecursive,
- TRUE,&killSet);
+ readFileOrDirectory(s, // s
+ Doxygen::dotFileNameLinkedMap, // fnDict
+ 0, // exclSet
+ 0, // patList
+ 0, // exclPatList
+ 0, // resultList
+ 0, // resultSet
+ alwaysRecursive, // recursive
+ TRUE, // errorIfNotExist
+ &killSet); // killSet
s=dotFileList.next();
}
g_s.end();
@@ -10549,10 +10569,16 @@ void searchInputFiles()
s=mscFileList.first();
while (s)
{
- readFileOrDirectory(s,Doxygen::mscFileNameLinkedMap,0,0,
- 0,0,0,
- alwaysRecursive,
- TRUE,&killSet);
+ readFileOrDirectory(s, // s
+ Doxygen::mscFileNameLinkedMap, // fnDict
+ 0, // exclSet
+ 0, // patList
+ 0, // exclPatList
+ 0, // resultList
+ 0, // resultSet
+ alwaysRecursive, // recursive
+ TRUE, // errorIfNotExist
+ &killSet); // killSet
s=mscFileList.next();
}
g_s.end();
@@ -10563,10 +10589,16 @@ void searchInputFiles()
s=diaFileList.first();
while (s)
{
- readFileOrDirectory(s,Doxygen::diaFileNameLinkedMap,0,0,
- 0,0,0,
- alwaysRecursive,
- TRUE,&killSet);
+ readFileOrDirectory(s, // s
+ Doxygen::diaFileNameLinkedMap, // fnDict
+ 0, // exclSet
+ 0, // patList
+ 0, // exclPatList
+ 0, // resultList
+ 0, // resultSet
+ alwaysRecursive, // recursive
+ TRUE, // errorIfNotExist
+ &killSet); // killSet
s=diaFileList.next();
}
g_s.end();
@@ -10576,11 +10608,16 @@ void searchInputFiles()
s=excludeList.first();
while (s)
{
- readFileOrDirectory(s,0,0,&Config_getList(FILE_PATTERNS),
- 0,0,&excludeNameDict,
- alwaysRecursive,
- FALSE);
- s=excludeList.next();
+ readFileOrDirectory(s, // s
+ 0, // fnDict
+ 0, // exclSet
+ &Config_getList(FILE_PATTERNS), // patList
+ 0, // exclPatList
+ 0, // resultList
+ &excludeNameSet, // resultSet
+ alwaysRecursive, // recursive
+ FALSE); // errorIfNotExist
+ s=excludeList.next(); // killSet
}
g_s.end();
@@ -10592,7 +10629,6 @@ void searchInputFiles()
killSet.clear();
Doxygen::inputPaths.clear();
QStrList &inputList=Config_getList(INPUT);
- g_inputFiles.setAutoDelete(TRUE);
s=inputList.first();
while (s)
{
@@ -10604,16 +10640,17 @@ void searchInputFiles()
if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
readFileOrDirectory(
- path,
- Doxygen::inputNameLinkedMap,
- &excludeNameDict,
- &Config_getList(FILE_PATTERNS),
- &exclPatterns,
- &g_inputFiles,0,
- alwaysRecursive,
- TRUE,
- &killSet,
- &Doxygen::inputPaths);
+ path, // s
+ Doxygen::inputNameLinkedMap, // fnDict
+ &excludeNameSet, // exclSet
+ &Config_getList(FILE_PATTERNS), // patList
+ &exclPatterns, // exclPatList
+ &g_inputFiles, // resultList
+ 0, // resultSet
+ alwaysRecursive, // recursive
+ TRUE, // errorIfNotExist
+ &killSet, // killSet
+ &Doxygen::inputPaths); // paths
}
s=inputList.next();
}