doxygen
conceptdef.h
1 /******************************************************************************
2  *
3  * Copyright (C) 1997-2021 by Dimitri van Heesch.
4  *
5  * Permission to use, copy, modify, and distribute this software and its
6  * documentation under the terms of the GNU General Public License is hereby
7  * granted. No representations are made about the suitability of this software
8  * for any purpose. It is provided "as is" without express or implied warranty.
9  * See the GNU General Public License for more details.
10  *
11  * Documents produced by Doxygen are derivative works derived from the
12  * input used in their production; they are not affected by this license.
13  *
14  */
15 
16 #ifndef CONCEPTDEF_H
17 #define CONCEPTDEF_H
18 
19 #include <memory>
20 
21 #include "definition.h"
22 #include "filedef.h"
23 
24 class ModuleDef;
25 
26 class ConceptDef : public Definition
27 {
28  public:
29  ABSTRACT_BASE_CLASS(ConceptDef)
30 
31  virtual bool hasDetailedDescription() const = 0;
32  virtual const IncludeInfo *includeInfo() const = 0;
33  virtual ArgumentList getTemplateParameterList() const = 0;
34  virtual QCString initializer() const = 0;
35  virtual void writeDeclarationLink(OutputList &ol,bool &found,
36  const QCString &header,bool localNames) const = 0;
37  virtual const NamespaceDef *getNamespaceDef() const = 0;
38  virtual const FileDef *getFileDef() const = 0;
39  virtual const ModuleDef *getModuleDef() const = 0;
40  virtual QCString title() const = 0;
41  virtual int groupId() const = 0;
42 };
43 
45 {
46  public:
47  ABSTRACT_BASE_CLASS(ConceptDefMutable)
48 
49  virtual void setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force) = 0;
50  virtual void setTemplateArguments(const ArgumentList &al) = 0;
51  virtual void setNamespace(NamespaceDef *nd) = 0;
52  virtual void setFileDef(FileDef *fd) = 0;
53  virtual void writeTagFile(TextStream &) = 0;
54  virtual void writeDocumentation(OutputList &ol) = 0;
55  virtual void setInitializer(const QCString &init) = 0;
56  virtual void findSectionsInDocumentation() = 0;
57  virtual void setGroupId(int id) = 0;
58  virtual void setModuleDef(ModuleDef *mod) = 0;
59 };
60 
61 std::unique_ptr<ConceptDef> createConceptDef(
62  const QCString &fileName,int startLine,int startColumn,const QCString &name,
63  const QCString &tagRef=QCString(),const QCString &tagFile=QCString());
64 
65 std::unique_ptr<ConceptDef> createConceptDefAlias(const Definition *newScope,const ConceptDef *cd);
66 
67 // ---- Map
68 
69 class ConceptLinkedMap : public LinkedMap<ConceptDef>
70 {
71 };
72 
73 class ConceptLinkedRefMap : public LinkedRefMap<ConceptDef>
74 {
75  public:
76  bool declVisible() const;
77  void writeDeclaration(OutputList &ol,const QCString &header,bool localNames) const;
78 };
79 
80 // ---- Cast functions
81 
82 ConceptDef *toConceptDef(Definition *d);
83 ConceptDef *toConceptDef(DefinitionMutable *d);
84 const ConceptDef *toConceptDef(const Definition *d);
85 ConceptDefMutable *toConceptDefMutable(Definition *d);
86 ConceptDefMutable *toConceptDefMutable(const Definition *d);
87 
88 // --- Helpers
89 
90 ConceptDef *getConcept(const QCString &key);
91 inline ConceptDefMutable *getConceptMutable(const QCString &key)
92 {
93  return toConceptDefMutable(getConcept(key));
94 }
95 ConceptDef *getResolvedConcept(const Definition *scope,const QCString &name);
96 
97 
98 #endif
This class represents an function or template argument list.
Definition: arguments.h:59
Definition: conceptdef.h:69
The common base class of all entity definitions found in the sources.
Definition: definition.h:75
An abstract interface of a namespace symbol.
Definition: namespacedef.h:54
Definition: conceptdef.h:44
Text streaming class that buffers data.
Definition: textstream.h:35
A model of a file symbol.
Definition: filedef.h:98
Definition: conceptdef.h:73
Definition: moduledef.h:63
virtual const QCString & name() const =0
Definition: definition.h:305
Definition: conceptdef.h:26
Container class representing a vector of objects with keys.
Definition: linkedmap.h:35
Container class representing a vector of objects with keys.
Definition: linkedmap.h:231
Class representing the data associated with a #include statement.
Definition: filedef.h:74
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:530
This is an alternative implementation of QCString.
Definition: qcstring.h:93