doxygen
entry.h
1 /******************************************************************************
2  *
3  *
4  *
5  * Copyright (C) 1997-2015 by Dimitri van Heesch.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation under the terms of the GNU General Public License is hereby
9  * granted. No representations are made about the suitability of this software
10  * for any purpose. It is provided "as is" without express or implied warranty.
11  * See the GNU General Public License for more details.
12  *
13  * Documents produced by Doxygen are derivative works derived from the
14  * input used in their production; they are not affected by this license.
15  *
16  */
17 
18 #ifndef ENTRY_H
19 #define ENTRY_H
20 
21 #include <vector>
22 #include <memory>
23 #include <sstream>
24 
25 #include "types.h"
26 #include "arguments.h"
27 #include "reflist.h"
28 #include "textstream.h"
29 
30 class SectionInfo;
31 class FileDef;
32 
35 struct BaseInfo
36 {
39  name(n),prot(p),virt(v) {}
43 };
44 
48 struct TagInfo
49 {
50  QCString tagName;
51  QCString fileName;
52  QCString anchor;
53 };
54 
61 class Entry
62 {
63  public:
64 
66  enum Sections {
67  CLASS_SEC = 0x00000001,
68  NAMESPACE_SEC = 0x00000010,
69  CONCEPT_SEC = 0x00000020,
70  COMPOUND_MASK = CLASS_SEC,
71  SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
72 
73  CLASSDOC_SEC = 0x00000800,
74  STRUCTDOC_SEC = 0x00001000,
75  UNIONDOC_SEC = 0x00002000,
76  EXCEPTIONDOC_SEC = 0x00004000,
77  NAMESPACEDOC_SEC = 0x00008000,
78  INTERFACEDOC_SEC = 0x00010000,
79  PROTOCOLDOC_SEC = 0x00020000,
80  CATEGORYDOC_SEC = 0x00040000,
81  SERVICEDOC_SEC = 0x00080000,
82  SINGLETONDOC_SEC = 0x00100000,
83  CONCEPTDOC_SEC = 0x00200000,
84  COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
85  INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC |
86  CATEGORYDOC_SEC | SERVICEDOC_SEC | SINGLETONDOC_SEC,
87 
88  SOURCE_SEC = 0x00400000,
89  HEADER_SEC = 0x00800000,
90  FILE_MASK = SOURCE_SEC | HEADER_SEC,
91 
92  ENUMDOC_SEC = 0x01000000,
93  ENUM_SEC = 0x02000000,
94  EMPTY_SEC = 0x03000000,
95  PAGEDOC_SEC = 0x04000000,
96  VARIABLE_SEC = 0x05000000,
97  FUNCTION_SEC = 0x06000000,
98  TYPEDEF_SEC = 0x07000000,
99  MEMBERDOC_SEC = 0x08000000,
100  OVERLOADDOC_SEC = 0x09000000,
101  EXAMPLE_SEC = 0x0a000000,
102  VARIABLEDOC_SEC = 0x0b000000,
103  FILEDOC_SEC = 0x0c000000,
104  DEFINEDOC_SEC = 0x0d000000,
105  INCLUDE_SEC = 0x0e000000,
106  DEFINE_SEC = 0x0f000000,
107  GROUPDOC_SEC = 0x10000000,
108  USINGDIR_SEC = 0x11000000,
109  MAINPAGEDOC_SEC = 0x12000000,
110  MEMBERGRP_SEC = 0x13000000,
111  USINGDECL_SEC = 0x14000000,
112  PACKAGE_SEC = 0x15000000,
113  PACKAGEDOC_SEC = 0x16000000,
114  OBJCIMPL_SEC = 0x17000000,
115  DIRDOC_SEC = 0x18000000,
116  EXPORTED_INTERFACE_SEC = 0x19000000,
117  INCLUDED_SERVICE_SEC = 0x1A000000,
118  EXAMPLE_LINENO_SEC = 0x1B000000,
119  };
120 
121  // class specifiers (add new items to the end)
122  static const uint64 Template = (1ULL<<0);
123  static const uint64 Generic = (1ULL<<1);
124  static const uint64 Ref = (1ULL<<2);
125  static const uint64 Value = (1ULL<<3);
126  static const uint64 Interface = (1ULL<<4);
127  static const uint64 Struct = (1ULL<<5);
128  static const uint64 Union = (1ULL<<6);
129  static const uint64 Exception = (1ULL<<7);
130  static const uint64 Protocol = (1ULL<<8);
131  static const uint64 Category = (1ULL<<9);
132  static const uint64 SealedClass = (1ULL<<10);
133  static const uint64 AbstractClass = (1ULL<<11);
134  static const uint64 Enum = (1ULL<<12); // for Java-style enums
135  static const uint64 Service = (1ULL<<13); // UNO IDL
136  static const uint64 Singleton = (1ULL<<14); // UNO IDL
137  static const uint64 ForwardDecl = (1ULL<<15); // forward declared template classes
138  static const uint64 Local = (1ULL<<16); // for Slice types
139 
140  // member specifiers (add new items to the beginning)
141  static const uint64 EnumStruct = (1ULL<<18);
142  static const uint64 ConstExpr = (1ULL<<19); // C++11 constexpr
143  static const uint64 PrivateGettable = (1ULL<<20); // C# private getter
144  static const uint64 ProtectedGettable = (1ULL<<21); // C# protected getter
145  static const uint64 PrivateSettable = (1ULL<<22); // C# private setter
146  static const uint64 ProtectedSettable = (1ULL<<23); // C# protected setter
147  static const uint64 Inline = (1ULL<<24);
148  static const uint64 Explicit = (1ULL<<25);
149  static const uint64 Mutable = (1ULL<<26);
150  static const uint64 Settable = (1ULL<<27);
151  static const uint64 Gettable = (1ULL<<28);
152  static const uint64 Readable = (1ULL<<29);
153  static const uint64 Writable = (1ULL<<30);
154  static const uint64 Final = (1ULL<<31);
155  static const uint64 Abstract = (1ULL<<32);
156  static const uint64 Addable = (1ULL<<33);
157  static const uint64 Removable = (1ULL<<34);
158  static const uint64 Raisable = (1ULL<<35);
159  static const uint64 Override = (1ULL<<36);
160  static const uint64 New = (1ULL<<37);
161  static const uint64 Sealed = (1ULL<<38);
162  static const uint64 Initonly = (1ULL<<39);
163  static const uint64 Optional = (1ULL<<40);
164  static const uint64 Required = (1ULL<<41);
165  static const uint64 NonAtomic = (1ULL<<42);
166  static const uint64 Copy = (1ULL<<43);
167  static const uint64 Retain = (1ULL<<44);
168  static const uint64 Assign = (1ULL<<45);
169  static const uint64 Strong = (1ULL<<46);
170  static const uint64 Weak = (1ULL<<47);
171  static const uint64 Unretained = (1ULL<<48);
172  static const uint64 Alias = (1ULL<<49);
173  static const uint64 ConstExp = (1ULL<<50);
174  static const uint64 Default = (1ULL<<51);
175  static const uint64 Delete = (1ULL<<52);
176  static const uint64 NoExcept = (1ULL<<53);
177  static const uint64 Attribute = (1ULL<<54); // UNO IDL attribute
178  static const uint64 Property = (1ULL<<55); // UNO IDL property
179  static const uint64 Readonly = (1ULL<<56); // on UNO IDL attribute or property
180  static const uint64 Bound = (1ULL<<57); // on UNO IDL attribute or property
181  static const uint64 Constrained = (1ULL<<58); // on UNO IDL property
182  static const uint64 Transient = (1ULL<<59); // on UNO IDL property
183  static const uint64 MaybeVoid = (1ULL<<60); // on UNO IDL property
184  static const uint64 MaybeDefault = (1ULL<<61); // on UNO IDL property
185  static const uint64 MaybeAmbiguous = (1ULL<<62); // on UNO IDL property
186  static const uint64 Published = (1ULL<<63); // UNO IDL keyword
187 
189  {
192  GROUPDOC_WEAK
193  };
194 
195  Entry();
196  Entry(const Entry &);
197  ~Entry();
198 
200  Entry *parent() const { return m_parent; }
201 
205  const std::vector< std::shared_ptr<Entry> > &children() const { return m_sublist; }
206 
211  void moveToSubEntryAndKeep(Entry* e);
212  void moveToSubEntryAndKeep(std::shared_ptr<Entry> e);
216  void moveToSubEntryAndRefresh(Entry* &e);
217  void moveToSubEntryAndRefresh(std::shared_ptr<Entry> &e);
218 
220  void copyToSubEntry (Entry* e);
221  void copyToSubEntry (const std::shared_ptr<Entry> &e);
222 
226  void removeSubEntry(const Entry *e);
227 
231  void reset();
232 
233  void markAsProcessed() const { (const_cast<Entry*>(this))->section = Entry::EMPTY_SEC; }
234  void setFileDef(FileDef *fd);
235  FileDef *fileDef() const { return m_fileDef; }
236 
237  // identification
238  int section;
241  bool hasTagInfo;
243  const TagInfo *tagInfo() const { return hasTagInfo ? &tagInfoData : 0; }
244 
245  // content
248  uint64 spec;
249  int initLines;
250  bool stat;
252  bool proto;
253  bool subGrouping;
254  bool callGraph;
255  bool callerGraph;
262  ArgumentLists tArgLists;
268  int docLine;
271  int briefLine;
283  int bodyLine;
286  int mGrpId;
287  std::vector<BaseInfo> extends;
288  std::vector<Grouping> groups;
289  std::vector<const SectionInfo*> anchors;
291  int startLine;
293  RefItemVector sli;
295  bool hidden;
296  bool artificial;
297  GroupDocType groupDocType;
299  LocalToc localToc;
302 
304  const char *groupDocCmd() const
305  {
306  switch( groupDocType )
307  {
308  case GROUPDOC_NORMAL: return "\\defgroup";
309  case GROUPDOC_ADD: return "\\addtogroup";
310  case GROUPDOC_WEAK: return "\\weakgroup";
311  default: return "unknown group command";
312  }
313  }
314  Grouping::GroupPri_t groupingPri() const
315  {
316  if( section != GROUPDOC_SEC )
317  {
318  return Grouping::GROUPING_LOWEST;
319  }
320  switch( groupDocType )
321  {
322  case GROUPDOC_NORMAL: return Grouping::GROUPING_AUTO_DEF;
323  case GROUPDOC_ADD: return Grouping::GROUPING_AUTO_ADD;
324  case GROUPDOC_WEAK: return Grouping::GROUPING_AUTO_WEAK;
325  default: return Grouping::GROUPING_LOWEST;
326  }
327  }
328 
329  private:
330  Entry *m_parent;
331  std::vector< std::shared_ptr<Entry> > m_sublist;
332  Entry &operator=(const Entry &);
333  FileDef *m_fileDef;
334 };
335 
336 typedef std::vector< std::shared_ptr<Entry> > EntryList;
337 
338 #endif
bool callGraph
do we need to draw the call graph?
Definition: entry.h:254
QCString includeName
include name (3 arg of \class)
Definition: entry.h:266
This class represents an function or template argument list.
Definition: arguments.h:59
This file contains a number of basic enums and types.
bool proto
prototype ?
Definition: entry.h:252
uint64 spec
class/member specifiers
Definition: entry.h:248
Abstract interface for a template.
Definition: template.h:486
bool stat
static ?
Definition: entry.h:250
membership in group was defined via @weakgroup
Definition: types.h:70
Sections
Definition: entry.h:66
bool referencedByRelation
do we need to show the referenced by relation?
Definition: entry.h:256
Represents an unstructured piece of information, about an entity found in the sources.
Definition: entry.h:61
QCString read
property read accessor
Definition: entry.h:278
membership in group was defined via @defgroup
Definition: types.h:72
int briefLine
line number at which the brief desc. was found
Definition: entry.h:271
int docLine
line number at which the documentation was found
Definition: entry.h:268
Text streaming class that buffers data.
Definition: textstream.h:34
QCString name
member name
Definition: entry.h:240
A model of a file symbol.
Definition: filedef.h:73
int initLines
define/variable initializer lines to show
Definition: entry.h:249
GroupPri_t
Grouping priority.
Definition: types.h:67
This struct is used to capture the tag file information for an Entry.
Definition: entry.h:48
Entry * parent() const
Definition: entry.h:200
TextStream program
the program text
Definition: entry.h:263
bool referencesRelation
do we need to show the references relation?
Definition: entry.h:257
QCString id
libclang id
Definition: entry.h:298
SrcLangExt
Language as given by extension.
Definition: types.h:41
bool hidden
does this represent an entity that is hidden from the output
Definition: entry.h:295
int mGrpId
member group id
Definition: entry.h:286
int startColumn
start column of entry in the source
Definition: entry.h:292
QCString req
C++20 requires clause.
Definition: entry.h:301
Definition: types.h:303
QCString includeFile
include file (2 arg of \class, must be unique)
Definition: entry.h:265
bool subGrouping
automatically group class members?
Definition: entry.h:253
bool callerGraph
do we need to draw the caller graph?
Definition: entry.h:255
QCString inbodyFile
file in which the body doc was found
Definition: entry.h:275
QCString brief
brief description (doc block)
Definition: entry.h:270
int endBodyLine
line number where the definition ends
Definition: entry.h:285
const std::vector< std::shared_ptr< Entry > > & children() const
Definition: entry.h:205
std::vector< BaseInfo > extends
list of base classes
Definition: entry.h:287
addtogroup
Definition: entry.h:191
ArgumentList typeConstr
where clause (C#) for type constraints
Definition: entry.h:282
QCString name
the name of the base class
Definition: entry.h:40
Specifier virt
virtualness
Definition: entry.h:42
Specifier
Virtualness of a member.
Definition: types.h:29
QCString exception
throw specification
Definition: entry.h:281
int startLine
start line of entry in the source
Definition: entry.h:291
QCString args
member argument string
Definition: entry.h:259
QCString write
property write accessor
Definition: entry.h:279
Protection protection
class protection
Definition: entry.h:246
QCString metaData
Slice metadata.
Definition: entry.h:300
int bodyColumn
column of the body in the source
Definition: entry.h:284
class that provide information about a section.
Definition: section.h:49
BaseInfo(const QCString &n, Protection p, Specifier v)
Definition: entry.h:38
Protection prot
inheritance type
Definition: entry.h:41
std::vector< Grouping > groups
list of groups this entry belongs to
Definition: entry.h:288
const char * groupDocCmd() const
return the command name used to define GROUPDOC_SEC
Definition: entry.h:304
RelatesType relatesType
how relates is handled
Definition: entry.h:277
QCString inbodyDocs
documentation inside the body of a function
Definition: entry.h:273
TextStream initializer
initial value (for variables)
Definition: entry.h:264
QCString doc
documentation block (partly parsed)
Definition: entry.h:267
Specifier virt
virtualness of the entry
Definition: entry.h:258
RefItemVector sli
special lists (test/todo/bug/deprecated/..) this entry is in
Definition: entry.h:293
bool artificial
Artificially introduced item.
Definition: entry.h:296
ArgumentList argList
member arguments as a list
Definition: entry.h:261
defgroup
Definition: entry.h:190
QCString fileName
file this entry was extracted from
Definition: entry.h:290
bool explicitExternal
explicitly defined as external?
Definition: entry.h:251
QCString bitfields
member&#39;s bit fields
Definition: entry.h:260
QCString inside
name of the class in which documents are found
Definition: entry.h:280
MethodTypes
Kind of method.
Definition: types.h:32
Protection
Protection level of members.
Definition: types.h:26
QCString docFile
file in which the documentation was found
Definition: entry.h:269
ArgumentLists tArgLists
template argument declarations
Definition: entry.h:262
MethodTypes mtype
signal, slot, (dcop) method, or property?
Definition: entry.h:247
RelatesType
Type of member relation.
Definition: types.h:35
std::vector< const SectionInfo * > anchors
list of anchors defined in this entry
Definition: entry.h:289
TagInfo tagInfoData
tag file info data
Definition: entry.h:242
bool hasTagInfo
is tag info valid
Definition: entry.h:241
QCString relates
related class (doc block)
Definition: entry.h:276
SrcLangExt lang
programming language in which this entry was found
Definition: entry.h:294
This is an alternative implementation of QCString.
Definition: qcstring.h:108
int inbodyLine
line number at which the body doc was found
Definition: entry.h:274
This class stores information about an inheritance relation.
Definition: entry.h:35
GroupDocType
Definition: entry.h:188
membership in group was defined via @add[to]group
Definition: types.h:71
QCString type
member type
Definition: entry.h:239
int section
entry type (see Sections);
Definition: entry.h:238
int bodyLine
line number of the body in the source
Definition: entry.h:283
QCString briefFile
file in which the brief desc. was found
Definition: entry.h:272