Fix for UBSan build
[platform/upstream/doxygen.git] / src / doxygen.h
1 /******************************************************************************
2  *
3  * $Id: doxygen.h,v 1.39 2001/03/19 19:27:40 root Exp $
4  *
5  *
6  * Copyright (C) 1997-2012 by Dimitri van Heesch.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation under the terms of the GNU General Public License is hereby 
10  * granted. No representations are made about the suitability of this software 
11  * for any purpose. It is provided "as is" without express or implied warranty.
12  * See the GNU General Public License for more details.
13  *
14  * Documents produced by Doxygen are derivative works derived from the
15  * input used in their production; they are not affected by this license.
16  *
17  */
18
19 #ifndef DOXYGEN_H
20 #define DOXYGEN_H
21
22 #include "qtbc.h"
23 #include <qdatetime.h>
24 #include <qcache.h>
25 #include "ftextstream.h"
26 #include "groupdef.h"
27 #include "filedef.h"
28 #include "classdef.h"
29 #include "memberdef.h"
30 #include "classlist.h"
31 #include "membername.h"
32 #include "filename.h"
33 #include "namespacedef.h"
34 #include "formula.h"
35 #include "section.h"
36 #include "membergroup.h"
37 #include "reflist.h"
38 #include "dirdef.h"
39 #include "index.h"
40 #include "docsets.h"
41
42 class PageSList;
43 class PageSDict;
44 class PageDef;
45 class SearchIndexIntf;
46 class ParserManager;
47 class ObjCache;
48 class Store;
49 class QFileInfo;
50 class BufStr;
51 class CiteDict;
52
53 typedef QList<QCString>    StringList;
54 typedef QDict<FileDef>     FileDict;
55 typedef QDict<GroupDef>    GroupDict;
56
57 class StringDict : public QDict<QCString>
58 {
59   public: 
60     StringDict(uint size=17) : QDict<QCString>(size) {}
61     virtual ~StringDict() {}
62 };
63
64 struct LookupInfo
65 {
66   LookupInfo() : classDef(0), typeDef(0) {}
67   LookupInfo(ClassDef *cd,MemberDef *td,QCString ts,QCString rt) 
68     : classDef(cd), typeDef(td), templSpec(ts),resolvedType(rt) {}
69   ClassDef  *classDef;
70   MemberDef *typeDef;
71   QCString   templSpec;
72   QCString   resolvedType;
73 };
74
75 extern QCString g_spaces;
76
77 /*! \brief This class serves as a namespace for global variables used by doxygen.
78  *
79  *  All fields in this class are public and static, so they can be used directly.
80  */
81 class Doxygen
82 {
83   public:
84     static ClassSDict               *classSDict;
85     static ClassSDict               *hiddenClasses;
86     static PageSDict                *exampleSDict;
87     static PageSDict                *pageSDict;
88     static PageDef                  *mainPage;
89     static bool                      insideMainPage;
90     static FileNameDict             *includeNameDict;
91     static FileNameDict             *exampleNameDict;
92     static FileNameDict             *inputNameDict;
93     static FileNameList             *inputNameList;
94     static FileNameDict             *imageNameDict;
95     static FileNameDict             *dotFileNameDict;
96     static FileNameDict             *mscFileNameDict;
97     static QStrList                  tagfileList;
98     static MemberNameSDict          *memberNameSDict;
99     static MemberNameSDict          *functionNameSDict;
100     static FTextStream               tagFile;
101     static SectionDict               sectionDict;
102     static StringDict                namespaceAliasDict;
103     static GroupSDict               *groupSDict;
104     static NamespaceSDict           *namespaceSDict;
105     static FormulaList               formulaList;
106     static FormulaDict               formulaDict;
107     static FormulaDict               formulaNameDict;
108     static StringDict                tagDestinationDict; 
109     static StringDict                aliasDict; 
110     static QIntDict<MemberGroupInfo> memGrpInfoDict;
111     static QDict<void>               expandAsDefinedDict;
112     static NamespaceDef             *globalScope;
113     static QDict<RefList>           *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
114     static QCString                  htmlFileExtension;
115     static bool                      parseSourcesNeeded;
116     static QTime                     runningTime;
117     static SearchIndexIntf          *searchIndex;
118     static QDict<DefinitionIntf>    *symbolMap;
119     static bool                      outputToWizard;
120     static QDict<int>               *htmlDirMap;
121     static QCache<LookupInfo>       *lookupCache;
122     static DirSDict                 *directories;
123     static SDict<DirRelation>        dirRelations;
124     static ParserManager            *parserManager;
125     static bool                      suppressDocWarnings;
126     static ObjCache                 *symbolCache;
127     static Store                    *symbolStorage;
128     static QCString                  objDBFileName;
129     static QCString                  entryDBFileName;
130     static CiteDict                 *citeDict;
131     static bool                      gatherDefines;
132     static bool                      userComments;
133     static IndexList                 indexList;
134     static int                       subpageNestingLevel;
135     static QCString                  spaces;
136     static bool                      generatingXmlOutput;
137     static bool                      markdownSupport;
138     static GenericsSDict             genericsDict;
139 };
140
141 void initDoxygen();
142 void readConfiguration(int argc, char **argv);
143 void checkConfiguration();
144 void adjustConfiguration();
145 void searchInputFiles(StringList &inputFiles);
146 void parseInput();
147 void generateOutput();
148 void readAliases();
149 void readFormulaRepository();
150 int readFileOrDirectory(const char *s,
151                         FileNameList *fnList,
152                         FileNameDict *fnDict,
153                         StringDict *exclDict,
154                         QStrList *patList,
155                         QStrList *exclPatList,
156                         StringList *resultList,
157                         StringDict *resultDict,
158                         bool recursive,
159                         bool errorIfNotExist=TRUE,
160                         QDict<void> *killDict = 0
161                        );
162 int readDir(QFileInfo *fi,
163             FileNameList *fnList,
164             FileNameDict *fnDict,
165             StringDict  *exclDict,
166             QStrList *patList,
167             QStrList *exclPatList,
168             StringList *resultList,
169             StringDict *resultDict,
170             bool errorIfNotExist,
171             bool recursive,
172             QDict<void> *killDict
173            );
174 void copyAndFilterFile(const char *fileName,BufStr &dest);
175
176 #define NEWMATCH
177
178 #endif