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_t Template = (1ULL<<0);
123  static const uint64_t Generic = (1ULL<<1);
124  static const uint64_t Ref = (1ULL<<2);
125  static const uint64_t Value = (1ULL<<3);
126  static const uint64_t Interface = (1ULL<<4);
127  static const uint64_t Struct = (1ULL<<5);
128  static const uint64_t Union = (1ULL<<6);
129  static const uint64_t Exception = (1ULL<<7);
130  static const uint64_t Protocol = (1ULL<<8);
131  static const uint64_t Category = (1ULL<<9);
132  static const uint64_t SealedClass = (1ULL<<10);
133  static const uint64_t AbstractClass = (1ULL<<11);
134  static const uint64_t Enum = (1ULL<<12); // for Java-style enums
135  static const uint64_t Service = (1ULL<<13); // UNO IDL
136  static const uint64_t Singleton = (1ULL<<14); // UNO IDL
137  static const uint64_t ForwardDecl = (1ULL<<15); // forward declared template classes
138  static const uint64_t Local = (1ULL<<16); // for Slice types
139 
140  // member specifiers (add new items to the beginning)
141  static const uint64_t EnumStruct = (1ULL<<18);
142  static const uint64_t ConstExpr = (1ULL<<19); // C++11 constexpr
143  static const uint64_t PrivateGettable = (1ULL<<20); // C# private getter
144  static const uint64_t ProtectedGettable = (1ULL<<21); // C# protected getter
145  static const uint64_t PrivateSettable = (1ULL<<22); // C# private setter
146  static const uint64_t ProtectedSettable = (1ULL<<23); // C# protected setter
147  static const uint64_t Inline = (1ULL<<24);
148  static const uint64_t Explicit = (1ULL<<25);
149  static const uint64_t Mutable = (1ULL<<26);
150  static const uint64_t Settable = (1ULL<<27);
151  static const uint64_t Gettable = (1ULL<<28);
152  static const uint64_t Readable = (1ULL<<29);
153  static const uint64_t Writable = (1ULL<<30);
154  static const uint64_t Final = (1ULL<<31);
155  static const uint64_t Abstract = (1ULL<<32);
156  static const uint64_t Addable = (1ULL<<33);
157  static const uint64_t Removable = (1ULL<<34);
158  static const uint64_t Raisable = (1ULL<<35);
159  static const uint64_t Override = (1ULL<<36);
160  static const uint64_t New = (1ULL<<37);
161  static const uint64_t Sealed = (1ULL<<38);
162  static const uint64_t Initonly = (1ULL<<39);
163  static const uint64_t Optional = (1ULL<<40);
164  static const uint64_t Required = (1ULL<<41);
165  static const uint64_t NonAtomic = (1ULL<<42);
166  static const uint64_t Copy = (1ULL<<43);
167  static const uint64_t Retain = (1ULL<<44);
168  static const uint64_t Assign = (1ULL<<45);
169  static const uint64_t Strong = (1ULL<<46);
170  static const uint64_t Weak = (1ULL<<47);
171  static const uint64_t Unretained = (1ULL<<48);
172  static const uint64_t Alias = (1ULL<<49);
173  static const uint64_t ConstExp = (1ULL<<50);
174  static const uint64_t Default = (1ULL<<51);
175  static const uint64_t Delete = (1ULL<<52);
176  static const uint64_t NoExcept = (1ULL<<53);
177  static const uint64_t Attribute = (1ULL<<54); // UNO IDL attribute
178  static const uint64_t Property = (1ULL<<55); // UNO IDL property
179  static const uint64_t Readonly = (1ULL<<56); // on UNO IDL attribute or property
180  static const uint64_t Bound = (1ULL<<57); // on UNO IDL attribute or property
181  static const uint64_t Constrained = (1ULL<<58); // on UNO IDL property
182  static const uint64_t Transient = (1ULL<<59); // on UNO IDL property
183  static const uint64_t MaybeVoid = (1ULL<<60); // on UNO IDL property
184  static const uint64_t MaybeDefault = (1ULL<<61); // on UNO IDL property
185  static const uint64_t MaybeAmbiguous = (1ULL<<62); // on UNO IDL property
186  static const uint64_t 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_t spec;
249  int initLines;
250  bool isStatic;
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  std::vector<std::string> qualifiers;
303 
305  const char *groupDocCmd() const
306  {
307  switch( groupDocType )
308  {
309  case GROUPDOC_NORMAL: return "\\defgroup";
310  case GROUPDOC_ADD: return "\\addtogroup";
311  case GROUPDOC_WEAK: return "\\weakgroup";
312  default: return "unknown group command";
313  }
314  }
315  Grouping::GroupPri_t groupingPri() const
316  {
317  if( section != GROUPDOC_SEC )
318  {
319  return Grouping::GROUPING_LOWEST;
320  }
321  switch( groupDocType )
322  {
323  case GROUPDOC_NORMAL: return Grouping::GROUPING_AUTO_DEF;
324  case GROUPDOC_ADD: return Grouping::GROUPING_AUTO_ADD;
325  case GROUPDOC_WEAK: return Grouping::GROUPING_AUTO_WEAK;
326  default: return Grouping::GROUPING_LOWEST;
327  }
328  }
329 
330  private:
331  Entry *m_parent;
332  std::vector< std::shared_ptr<Entry> > m_sublist;
333  Entry &operator=(const Entry &);
334  FileDef *m_fileDef;
335 };
336 
337 typedef std::vector< std::shared_ptr<Entry> > EntryList;
338 
339 #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
Abstract interface for a template.
Definition: template.h:487
bool isStatic
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
uint64_t spec
class/member specifiers
Definition: entry.h:248
QCString req
C++20 requires clause.
Definition: entry.h:301
std::vector< std::string > qualifiers
qualifiers specified with the qualifier command
Definition: entry.h:302
Definition: types.h:304
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:305
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:91
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