Doxygen XLinks
by
V: 2511R0
Website: doxygen
Loading...
Searching...
No Matches
target.hpp
Go to the documentation of this file.
1//==================================================================================================
2/// \file
3/// This header-file is part of \dxl - A doxygen post-processor that allows to define smarter
4/// <b>Doxygen</b>-links.
5///
6/// \emoji :copyright: 2025-2026 A-Worx GmbH, Germany.
7/// Published under \ref mainpage_license "Boost Software License".
8//==================================================================================================
9#ifndef HPP_DXL_TARGET
10#define HPP_DXL_TARGET
11#pragma once
12//#include "dxl.hpp"
13#include "ALib.EnumRecords.H"
14#include "ALib.App.CLI.H"
15#include "ALib.Files.H"
16
17namespace dxl {
18
19/// This class represents a doxygen XLink target.
20/// The targets are read from doxygen tag-files, are inserted into the string tree implemented
21/// with class #"dxl Index" and indexed by a hashtable within the same class.
22class Target {
23 public:
24 /// The maximum number of template arguments to parse and compare.
25 /// If exceeded, a parse error will be set for the XLink.
26 static size_t MAX_TEMPLATE_ARGS; // todo: set to 64, doc or what. (not constexpr, might be changed. Constexpr should be removed elsewhere also, like done here!)
27 /// Enumerates the kinds of compounds found in a the Doxygen tagfile.
28 enum Kinds : unsigned {
29 // compounds
30 Dir = (1 << 0), ///< Denotes a source folder.
31 File = (1 << 1), ///< Denotes a source file.
32 Page = (1 << 2), ///< Denotes a page.
33 Group = (1 << 3), ///< Denotes a group.
34 DocAnchor = (1 << 4), ///< Denotes a preprocessor definition.
35
36 Namespace = (1 << 5), ///< Denotes a namespace.
37 Struct = (1 << 6), ///< Denotes a struct.
38 Class = (1 << 7), ///< Denotes a class.
39 Union = (1 << 8), ///< Denotes a union.
40 Concept = (1 << 9), ///< Denotes a C++20 concept.
41
42 // member types
43 Macro = (1 <<10), ///< Denotes a preprocessor definition.
44 Typedef = (1 <<11), ///< Denotes a type definition.
45 Variable = (1 <<12), ///< Denotes a namespace- or member-variable.
46 Function = (1 <<13), ///< Denotes a namespace- or member-function.
47 Enumeration = (1 <<14), ///< Denotes an enumeration.
48 EnumElement = (1 <<15), ///< Denotes an enumeration element.
49 GenericMember = (1 <<16), ///< An unknown or uninteresting group member type.
50
51 // special
52 FILEPATH_COMPONENT = (1 <<17), ///< A node of a file path (not a doxygen kind).
53 UNKNOWN_COMPOUND = (1 <<18), ///< This is set when creating paths to compounds. They should be
54 ///< replaced later, with true compound types.
55 ///< Otherwise a compound was not doxed!
56 UNSPECIFIED = (1 <<19), ///< Used with the field #"XLink::KindSpec;2".
57 MAX_KIND = 19, ///< The highest bit defining a kind.
58
59 ROOT = (1 <<20), ///< The kind attached to the root node of the tree.
60 UNRESOLVED = (1 <<21), ///< The kind attached to the root node of the tree.
61
62 /// Mask to identify member types. Here the word "member" is not meant in the C++ sense,
63 /// but in the sense of "compound member"
65
66 /// Mask to identify records types.
68
69 /// Mask to identify compound types.
71
72 };
73
74 /// A List of function argument types (strings).
75 /// This is not a vector or list container, but a mono-allocated array of arguments.
76 /// Construction and allocation is done with the static method #PARSE.
77 ///
78 /// The names of the arguments are left pruned. Furthermore, few standardizations in
79 /// respect to spacing are performed. This enables to easily identify whether a given
80 /// #"XLink" and a corresponding Target share the exact same parameters
82 /// The number of arguments.
83 int Count;
84
85 /// An array of length #Count of strings.
87
88 protected:
89 /// Constructor.
91 public:
92 /// Static method to parse an instance of this type from the given \p{src} and allocate
93 /// the instance and its argument list in the given \p{ma}
94 /// @param ma The mono allocator to use.
95 /// @param parser The substring used for parsing. The round brackets and their contents
96 /// are removed when the method returns.
97 /// @return The instance created and parsed.
98 /// If a syntax error occurs, \c nullptr is returned.
99 static
101
102 /// Tests if the arguments \p{linkArgs} of an #"XLink" match the ones of a target.
103 /// Not all the arguments need to match, and only substrings of the arguments need to be
104 /// given to have a match (see return value). todo
105 /// @param linkArgs The arguments in the #"XLink".
106 /// @param targetArgs The arguments in the target.
107 /// @return
108 /// This method has five possible return values:
109 /// - \c 0 if arguments are given in the \p{linkArgs} and those do not match.
110 /// - \c 1 if the \xl has no arguments specified (or empty brackets), while the target
111 /// has arguments.
112 /// - \c 2 if no arguments are given in the \xl and the target has no arguments.
113 /// - \c 3 - if both instances have no arguments, or
114 /// - if both instances have arguments, and the ones in the \p{linkArgs} are a
115 /// subset, or one or more of the arguments are only partly given.
116 /// - \c 4 if both instances have arguments provided and they match exactly.
117 /// (This includes a given empty pair of brackets "()" on parameterless functions.)
118 /// If each argument matches entirely, \c 3 is returned. This indicates to the caller that
119 /// the arguments should be displayed in the XLink.
120 static
121 int MATCH(FunctionArguments* linkArgs, FunctionArguments* targetArgs);
122
123 /// Prints the parsed argument types in a standardized format.
124 /// @param dest The destination string. The string is not cleared.
125 void Print(alib::AString& dest);
126 };
127
128 /// A List of template arguments.
129 /// This is not a vector or list container, but a mono-allocated array of arguments.
130 /// Construction and allocation is done with the static method #PARSE.
131 ///
132 /// The names of the arguments are not given by doxygen, and, as far as we see, doxygen
133 /// attaches those only to specializations of template types.
134 /// (Not to the original type and not to templated functions.)
135 ///
136 /// A few standardizations in respect to spacing are performed. This enables to easily
137 /// identify whether a given #"XLink" and a corresponding Target share the exact same
138 /// parameters.
140 /// The number of arguments.
141 int Count;
142
143 /// An array of length #Count of strings.
145
146 /// Constructor.
147 TemplateArguments() : Count{0} , Arguments{nullptr} {}
148
149 /// Static method to parse an instance of this type from the given \p{src} and allocate
150 /// the instance and its argument list in the given \p{ma}
151 /// @param ma The mono allocator to use.
152 /// @param parser The substring used for parsing. The round brackets and their contents
153 /// are removed when the method returns.
154 /// @return The instance created and parsed.
155 /// If a syntax error occurs, \c nullptr is returned.
156 static
158
159 /// Tests if these template arguments found in an #"XLink" match the ones in the given
160 /// target. Not all the arguments need to match, and only substrings of the arguments need
161 /// to be given.
162 /// If each argument matches entirely, \c 2 is returned.
163 /// @param target The template arguments in the potential target.
164 /// @return \c 0 if the arguments do not match, \c 1 if the arguments match but are not
165 /// completely given, and \c 2 if they are given in the exact specification.
166 int Match(TemplateArguments& target);
167
168 /// Prints the parsed argument types in a standardized format.
169 /// @param dest The destination string. The string is not cleared.
170 void Print(alib::AString& dest);
171 };
172
173 /// Statistics.
174 /// Counts the number of targets of each kind.
175 class KindStats { // todo not used in output, yet
176 protected:
177 /// The counted number of elements for each kind.
178 int count[size_t(MAX_KIND)];
179
180 public:
181 /// Constructor.
182 KindStats() { std::fill_n(count, size_t(alib::lang::MSB(unsigned(MAX_KIND))-1), 0); }
183
184 /// Counts the given kind.
185 /// @param pKind The kind to count.
186 void Add(Kinds pKind) {
187 size_t idx= size_t(alib::lang::MSB(unsigned(pKind)) - 1);
188 ALIB_ASSERT(idx < sizeof(count)/sizeof(int), "DXL/TAGFILE" )
189 ++count[idx];
190 }
191
192 /// Returns the number of entities of a given kind parsed from the tag-file.
193 /// @param pKind The kind to receive the quantity for.
194 /// @return The quantity of kinds of given kind \p{pKind}.
195 int Get(Kinds pKind) {
196 size_t idx= size_t(alib::lang::MSB(unsigned(pKind)) - 1);
197 ALIB_ASSERT(idx < sizeof(count)/sizeof(int), "DXL/TAGFILE" )
198 return count[idx];
199 }
200
201 /// Returns the number of entities of a given kind parsed from the tag-file.
202 /// @param kindIdx The kind-index to receive the quantity for.
203 /// @return The quantity of kinds of given \p{kindIdx}.
204 int GetByIdx(int kindIdx) {
205 ALIB_ASSERT(kindIdx>=0 && kindIdx < int(sizeof(count)/sizeof(int)), "DXL/TAGFILE" )
206 return count[kindIdx];
207 }
208 };
209
210 protected:
211 Kinds kind; ///< The kind of this target.
212
213 public:
214
215 /// The line number in the Doxygen tag-file where this entity is defined.
217
218 /// The HTML file that this target links to (or into).
220
221 protected:
222 /// Constructor.
223 /// @param pKind The kind of this target.
224 /// @param htmlFile The html file that this instance targets.
225 /// @param lineNo The definition line number in the Doxygen tag-file.
226 Target(Kinds pKind, const alib::String& htmlFile, int lineNo)
227 : kind(pKind)
228 , LineNo(lineNo)
229 , HTMLFile{htmlFile} {}
230
231public:
232 /// Returns the kind of this target. The result may be used to cast a pointer to the
233 /// corresponding descendant
234 /// @return The kind of this target.
235 Kinds Kind() const { return Kinds( unsigned(kind) & unsigned( (1 << int(MAX_KIND))-1)); }
236
237 /// Tests if an instance is of a given \p{aKind}.
238 /// @param aKind The kind to test this instance for.
239 /// @return \c true if this instance is of the given \p{kind}, \c false otherwise.
240 bool IsA(Kinds aKind) const {
241 return (unsigned(kind) & unsigned(aKind)) != 0;
242 }
243
244 /// Static method that returns a likewise static target which class #"dxl::Index" attaches to its
245 /// #"StringTree"'s root-node.
246 /// @return A pointer to the target of type #"Target::ROOT".
248 static Target RootNodeTarget(ROOT, alib::NULL_STRING, 0);
249 return &RootNodeTarget;
250 }
251};
252
253/// This is not a 'real' XLink target. It is created with nodes in the #"StringTree" of class
254/// #Index that represent a segment of the path to a source file.
256 /// Constructor.
257 /// @param lineNo The line number that this path component occured in the tag-file for the
258 /// first time.
259 TGTFilePathComponent(int lineNo) : Target(FILEPATH_COMPONENT, alib::NULL_STRING, lineNo) {}
260};
261
262/// XLink target information for source files.
263struct TGTDir : Target {
264 /// Constructor.
265 /// @param htmlFile The HTML file that this instance targets.
266 /// @param lineNo The definition line number in the Doxygen tag-file.
267 TGTDir(const alib::String& htmlFile, int lineNo) : Target(Dir, htmlFile, lineNo) {}
268};
269
270/// XLink target information for source files.
271struct TGTFile : Target {
272 /// Constructor.
273 /// @param htmlFile The HTML file that this instance targets.
274 /// @param lineNo The definition line number in the Doxygen tag-file.
275 TGTFile(const alib::String& htmlFile, int lineNo) : Target(File, htmlFile, lineNo) {}
276};
277
278/// XLink target information for groups.
279struct TGTGroup : Target {
280 /// The title of the group.
282
283 /// Constructor.
284 /// @param htmlFile The HTML file that this instance targets.
285 /// @param lineNo The definition line number in the Doxygen tag-file.
286 /// @param title The title of the group.
287 TGTGroup(const alib::String& htmlFile, int lineNo, alib::String& title)
288 : Target(Group, htmlFile, lineNo)
289 , Title{title} {}
290};
291
292/// XLink target information for pages.
293struct TGTPage : Target {
294 /// The title of the group.
296
297 /// Constructor.
298 /// @param htmlFile The HTML file that this instance targets.
299 /// @param lineNo The definition line number in the Doxygen tag-file.
300 /// @param title The title of the page.
301 TGTPage(const alib::String& htmlFile, int lineNo, alib::String& title)
302 : Target(Page, htmlFile, lineNo)
303 , Title{title} {}
304};
305
306/// XLink target information for pages.
308 /// The key of the anchor. This is redundant with its node name, but needed, as anchors
309 /// of members can be inserted only after the member was read.
311
312 /// The title of the group.
314
315 /// Constructor.
316 /// @param htmlFile The HTML file that this instance targets.
317 /// @param lineNo The definition line number in the Doxygen tag-file.
318 /// @param name The name (key) of the anchor.
319 /// @param title The title of the anchor.
320 TGTDocAnchor(const alib::String& htmlFile, int lineNo, alib::String& name, alib::String& title)
321 : Target(DocAnchor, htmlFile, lineNo)
322 , Name{name}
323 , Title{title} {}
324};
325
326/// XLink target information for C++ concepts.
328 /// Constructor.
329 /// @param htmlFile The HTML file that this instance targets.
330 /// @param lineNo The definition line number in the Doxygen tag-file.
331 TGTConcept(const alib::String& htmlFile, int lineNo) : Target(Concept, htmlFile, lineNo) {}
332};
333
334/// XLink target information for C++ namespaces.
336 /// Constructor.
337 /// @param htmlFile The HTML file that this instance targets.
338 /// @param lineNo The definition line number in the Doxygen tag-file.
339 TGTNamespace(const alib::String& htmlFile, int lineNo) : Target(Namespace, htmlFile, lineNo) {}
340};
341
342/// XLink target information for C++ structs, classes and unions.
344 /// Template arguments provided with tags <c><templarg></c>.
346
347 /// Template specialization arguments. Those are encoded in the name, leaving the types out
348 /// and just giving the name of the arguments.
350
351 /// The base type of the record
353
354 /// Constructor.
355 /// @param ma The mono allocator to use.
356 /// @param pKind The (derived) kind of this target.
357 /// @param htmlFile The HTML file that this instance targets.
358 /// @param lineNo The definition line number in the Doxygen tag-file.
359 TGTRecord(alib::MonoAllocator& ma, Kinds pKind, const alib::String& htmlFile, int lineNo)
360 : Target(pKind, htmlFile, lineNo)
361 , BaseTypes{ma} {}
362};
363
364/// XLink target information base type for targets which are members of other entities.
365/// See derived types.
367 /// The HTML anchor.
369
370 /// This ID is (sometimes) set if the member is read from a \b Doxygen group.
372
373 /// Constructor.
374 /// @param pKind The (derived) kind of this target.
375 /// @param htmlFile The HTML file that this instance targets.
376 /// @param lineNo The definition line number in the Doxygen tag-file.
377 TGTMember(Kinds pKind, const alib::String& htmlFile, int lineNo) : Target(pKind, htmlFile, lineNo) {}
378};
379
380/// A generic member type. These are used, \#if defined(ALIB_DOX)
381/// - this version of \dxl does not know the member kind and cannot parse it specifically
382/// - the member appeared in a group compound and is not further processed by \dxl.
384
385 /// The kind of the member, which was not fully read.
387
388 /// Constructor.
389 /// @param pKind The (derived) kind of this target.
390 /// @param htmlFile The HTML file that this instance targets.
391 /// @param lineNo The definition line number in the Doxygen tag-file.
392 TGTGenericMember(Kinds pKind, const alib::String& htmlFile, int lineNo)
393 : TGTMember(Target::GenericMember, htmlFile, lineNo), Kind{pKind} {}
394};
395
396
397
398/// XLink target information for C++ preprocessor definitions.
400 /// The list of arguments.
402
403 /// Constructor.
404 /// @param htmlFile The HTML file that this instance targets.
405 /// @param lineNo The definition line number in the Doxygen tag-file.
406 TGTMacro(const alib::String& htmlFile, int lineNo) : TGTMember(Macro, htmlFile, lineNo) {}
407};
408
409
410/// XLink target information for C++ enum elements.
412 /// Constructor.
413 /// @param htmlFile The HTML file that this instance targets.
414 /// @param lineNo The definition line number in the Doxygen tag-file.
415 TGTEnumValue(const alib::String& htmlFile, int lineNo) : TGTMember(EnumElement, htmlFile, lineNo) {}
416};
417
418/// XLink target information for type definitions.
420 /// The type of the definition.
422
423 /// Constructor.
424 /// @param htmlFile The HTML file that this instance targets.
425 /// @param lineNo The definition line number in the Doxygen tag-file.
426 TGTTypedef(const alib::String& htmlFile, int lineNo)
427 : TGTMember(Typedef, htmlFile, lineNo) {}
428};
429
430/// XLink target information for C++ enums.
432 /// The underlying type of the \c enum.
434
435 /// Constructor.
436 /// @param htmlFile The HTML file that this instance targets.
437 /// @param lineNo The definition line number in the Doxygen tag-file.
438 TGTEnumeration(const alib::String& htmlFile, int lineNo)
439 : TGTMember(Enumeration, htmlFile, lineNo) {}
440};
441
442
443
444/// XLink target information for C++ namespace- and member-variables.
446 /// The type of the variable
448
449 /// The subscript of the variable.
451
452 /// Constructor.
453 /// @param htmlFile The HTML file that this instance targets.
454 /// @param lineNo The definition line number in the Doxygen tag-file.
455 TGTVariable(const alib::String& htmlFile, int lineNo) : TGTMember(Variable, htmlFile, lineNo) {}
456};
457
458/// XLink target information for C++ namespace- and member-functions.
460 /// The return type of the function or method.
462
463 /// The list of arguments.
465
466 /// Additional qualifiers like \c const or \c nothrow.
468
469 /// Constructor.
470 /// @param htmlFile The HTML file that this instance targets.
471 /// @param lineNo The definition line number in the Doxygen tag-file.
472 TGTFunction(const alib::String& htmlFile, int lineNo) : TGTMember(Function, htmlFile, lineNo) {}
473};
474
475} //namespace [dxl]
476
479
480// #################################################################################################
481// ############################## Casts ########################################################
482// #################################################################################################
483
484namespace dxl {
485
487
488/// Casts the given #"dxl Target" pointer to the requested derived type \p{TGT}. In case of fai3lure
489/// returns \c nullptr.
490/// @tparam TGT The requested target type.
491/// @tparam TCheck If #"alib::NC" is given, no check whether the right kind is contained in
492/// this target is performed. Defaults to #"alib::CHK".
493/// @param target The instance to cast.
494/// @return The cast type or \c nullptr if \p{target} is not of the requested type.
495template<typename TGT, typename TCheck= alib::CHK>
496requires std::derived_from<TGT, Target>
497 && ( std::is_same_v<TCheck, alib::CHK> || std::is_same_v<TCheck, alib::NC> )
498const TGT* Cast(const Target* target) {
499 if constexpr (std::is_same_v<TCheck, alib::CHK>) {
500 if constexpr (std::is_same_v<TGT, TGTGroup >) { return target->IsA(Target::Group ) ? static_cast<const TGT*>(target) : nullptr;}
501 if constexpr (std::is_same_v<TGT, TGTPage >) { return target->IsA(Target::Page ) ? static_cast<const TGT*>(target) : nullptr;}
502 if constexpr (std::is_same_v<TGT, TGTDocAnchor >) { return target->IsA(Target::DocAnchor ) ? static_cast<const TGT*>(target) : nullptr;}
503 if constexpr (std::is_same_v<TGT, TGTRecord >) { return target->IsA(Target::RECORD ) ? static_cast<const TGT*>(target) : nullptr;}
504 if constexpr (std::is_same_v<TGT, TGTMember >) { return target->IsA(Target::MEMBER ) ? static_cast<const TGT*>(target) : nullptr;}
505 if constexpr (std::is_same_v<TGT, TGTGenericMember>) { return target->IsA(Target::GenericMember) ? static_cast<const TGT*>(target) : nullptr;}
506 if constexpr (std::is_same_v<TGT, TGTMacro >) { return target->IsA(Target::Macro ) ? static_cast<const TGT*>(target) : nullptr;}
507 if constexpr (std::is_same_v<TGT, TGTTypedef >) { return target->IsA(Target::Typedef ) ? static_cast<const TGT*>(target) : nullptr;}
508 if constexpr (std::is_same_v<TGT, TGTEnumeration >) { return target->IsA(Target::Enumeration ) ? static_cast<const TGT*>(target) : nullptr;}
509 if constexpr (std::is_same_v<TGT, TGTVariable >) { return target->IsA(Target::Variable ) ? static_cast<const TGT*>(target) : nullptr;}
510 if constexpr (std::is_same_v<TGT, TGTFunction >) { return target->IsA(Target::Function ) ? static_cast<const TGT*>(target) : nullptr;}
511 ALIB_ERROR( "DXL/TAGFILE", "Cast not implemented yet." )
512 return nullptr;
513 } else {
515 (std::is_same_v<TGT, TGTGroup > && target->IsA(Target::Group ) )
516 || (std::is_same_v<TGT, TGTPage > && target->IsA(Target::Page ) )
517 || (std::is_same_v<TGT, TGTDocAnchor > && target->IsA(Target::DocAnchor ) )
518 || (std::is_same_v<TGT, TGTRecord > && target->IsA(Target::RECORD ) )
519 || (std::is_same_v<TGT, TGTMember > && target->IsA(Target::MEMBER ) )
520 || (std::is_same_v<TGT, TGTGenericMember> && target->IsA(Target::GenericMember) )
521 || (std::is_same_v<TGT, TGTMacro > && target->IsA(Target::Macro ) )
522 || (std::is_same_v<TGT, TGTTypedef > && target->IsA(Target::Typedef ) )
523 || (std::is_same_v<TGT, TGTEnumeration > && target->IsA(Target::Enumeration ) )
524 || (std::is_same_v<TGT, TGTVariable > && target->IsA(Target::Variable ) )
525 || (std::is_same_v<TGT, TGTFunction > && target->IsA(Target::Function ) )
526 , "DXL/TAGFILE", "Cast not implemented yet." )
527
528 return static_cast<const TGT*>(target);
529 }
530}
531
532/// Overload of #"Cast(const Target*)" which works with references and calls its non-checking version.
533/// @tparam TGT The requested target type.
534/// @param target The instance to cast.
535/// @return The cast type or \c nullptr if \p{target} is not of the requested type.
536template<typename TGT>
537requires std::derived_from<TGT, Target>
538TGT& Cast(Target& target) { return *Cast<TGT,alib::NC>(&target); }
539
540#include "ALib.Lang.CIMethods.H"
541
542} //namespace [dxl]
543
544
545#endif // HPP_DXL_TARGET
#define ALIB_ASSERT(cond, domain)
#define ALIB_ERROR(domain,...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define ALIB_CAMP_ENUM(T, TRecord, Camp, ResName)
void Add(Kinds pKind)
Definition target.hpp:186
int Get(Kinds pKind)
Definition target.hpp:195
int count[size_t(MAX_KIND)]
The counted number of elements for each kind.
Definition target.hpp:178
KindStats()
Constructor.
Definition target.hpp:182
int GetByIdx(int kindIdx)
Definition target.hpp:204
static Target * GetRootNodeTarget()
Definition target.hpp:247
Target(Kinds pKind, const alib::String &htmlFile, int lineNo)
Definition target.hpp:226
bool IsA(Kinds aKind) const
Definition target.hpp:240
Kinds Kind() const
Definition target.hpp:235
Kinds kind
The kind of this target.
Definition target.hpp:211
static size_t MAX_TEMPLATE_ARGS
Definition target.hpp:26
alib::String HTMLFile
The HTML file that this target links to (or into).
Definition target.hpp:219
Kinds
Enumerates the kinds of compounds found in a the Doxygen tagfile.
Definition target.hpp:28
@ MAX_KIND
The highest bit defining a kind.
Definition target.hpp:57
@ COMPOUND
Mask to identify compound types.
Definition target.hpp:70
@ Struct
Denotes a struct.
Definition target.hpp:37
@ Function
Denotes a namespace- or member-function.
Definition target.hpp:46
@ Variable
Denotes a namespace- or member-variable.
Definition target.hpp:45
@ UNSPECIFIED
Used with the field #"XLink::KindSpec;2".
Definition target.hpp:56
@ Union
Denotes a union.
Definition target.hpp:39
@ Class
Denotes a class.
Definition target.hpp:38
@ UNKNOWN_COMPOUND
Definition target.hpp:53
@ Typedef
Denotes a type definition.
Definition target.hpp:44
@ File
Denotes a source file.
Definition target.hpp:31
@ EnumElement
Denotes an enumeration element.
Definition target.hpp:48
@ UNRESOLVED
The kind attached to the root node of the tree.
Definition target.hpp:60
@ Concept
Denotes a C++20 concept.
Definition target.hpp:40
@ Macro
Denotes a preprocessor definition.
Definition target.hpp:43
@ GenericMember
An unknown or uninteresting group member type.
Definition target.hpp:49
@ Dir
Denotes a source folder.
Definition target.hpp:30
@ Page
Denotes a page.
Definition target.hpp:32
@ Group
Denotes a group.
Definition target.hpp:33
@ ROOT
The kind attached to the root node of the tree.
Definition target.hpp:59
@ Enumeration
Denotes an enumeration.
Definition target.hpp:47
@ FILEPATH_COMPONENT
A node of a file path (not a doxygen kind).
Definition target.hpp:52
@ Namespace
Denotes a namespace.
Definition target.hpp:36
@ DocAnchor
Denotes a preprocessor definition.
Definition target.hpp:34
@ RECORD
Mask to identify records types.
Definition target.hpp:67
int LineNo
The line number in the Doxygen tag-file where this entity is defined.
Definition target.hpp:216
#define ALIB_ENUMS_MAKE_BITWISE(TEnum)
constexpr int MSB(TIntegral value)
monomem::TMonoAllocator< lang::HeapAllocator > MonoAllocator
constexpr String NULL_STRING
containers::List< T, MonoAllocator, TRecycling > ListMA
strings::TString< character > String
app::AppCliCamp APPCLI_CAMP
strings::TSubstring< character > Substring
strings::TAString< character, lang::HeapAllocator > AString
todox
Definition doxyfile.cpp:20
const TGT * Cast(const Index::Node &node)
Definition index.hpp:544
TGTConcept(const alib::String &htmlFile, int lineNo)
Definition target.hpp:331
TGTDir(const alib::String &htmlFile, int lineNo)
Definition target.hpp:267
alib::String Title
The title of the group.
Definition target.hpp:313
TGTDocAnchor(const alib::String &htmlFile, int lineNo, alib::String &name, alib::String &title)
Definition target.hpp:320
alib::String Name
Definition target.hpp:310
TGTEnumValue(const alib::String &htmlFile, int lineNo)
Definition target.hpp:415
alib::String Type
The underlying type of the enum.
Definition target.hpp:433
TGTEnumeration(const alib::String &htmlFile, int lineNo)
Definition target.hpp:438
TGTFilePathComponent(int lineNo)
Definition target.hpp:259
TGTFile(const alib::String &htmlFile, int lineNo)
Definition target.hpp:275
FunctionArguments * Args
The list of arguments.
Definition target.hpp:464
alib::String Type
The return type of the function or method.
Definition target.hpp:461
TGTFunction(const alib::String &htmlFile, int lineNo)
Definition target.hpp:472
alib::String Qualifiers
Additional qualifiers like const or nothrow.
Definition target.hpp:467
Target::Kinds Kind
The kind of the member, which was not fully read.
Definition target.hpp:386
TGTGenericMember(Kinds pKind, const alib::String &htmlFile, int lineNo)
Definition target.hpp:392
TGTGroup(const alib::String &htmlFile, int lineNo, alib::String &title)
Definition target.hpp:287
alib::String Title
The title of the group.
Definition target.hpp:281
TGTMacro(const alib::String &htmlFile, int lineNo)
Definition target.hpp:406
FunctionArguments * Args
The list of arguments.
Definition target.hpp:401
TGTMember(Kinds pKind, const alib::String &htmlFile, int lineNo)
Definition target.hpp:377
alib::String Anchor
The HTML anchor.
Definition target.hpp:368
alib::String RefID
This ID is (sometimes) set if the member is read from a Doxygen group.
Definition target.hpp:371
TGTNamespace(const alib::String &htmlFile, int lineNo)
Definition target.hpp:339
TGTPage(const alib::String &htmlFile, int lineNo, alib::String &title)
Definition target.hpp:301
alib::String Title
The title of the group.
Definition target.hpp:295
TemplateArguments * SpecializationArgs
Definition target.hpp:349
TGTRecord(alib::MonoAllocator &ma, Kinds pKind, const alib::String &htmlFile, int lineNo)
Definition target.hpp:359
TemplateArguments * TemplateArgs
Template arguments provided with tags <templarg>.
Definition target.hpp:345
alib::ListMA< alib::String > BaseTypes
The base type of the record.
Definition target.hpp:352
TGTTypedef(const alib::String &htmlFile, int lineNo)
Definition target.hpp:426
alib::String Type
The type of the definition.
Definition target.hpp:421
alib::String Subscript
The subscript of the variable.
Definition target.hpp:450
alib::String Type
The type of the variable.
Definition target.hpp:447
TGTVariable(const alib::String &htmlFile, int lineNo)
Definition target.hpp:455
FunctionArguments()=default
Constructor.
void Print(alib::AString &dest)
Definition target.cpp:17
alib::String * Arguments
An array of length Count of strings.
Definition target.hpp:86
static int MATCH(FunctionArguments *linkArgs, FunctionArguments *targetArgs)
Definition target.cpp:208
int Count
The number of arguments.
Definition target.hpp:83
static FunctionArguments * PARSE(alib::MonoAllocator &ma, alib::Substring &parser)
Definition target.cpp:28
TemplateArguments()
Constructor.
Definition target.hpp:147
int Count
The number of arguments.
Definition target.hpp:141
static TemplateArguments * PARSE(alib::MonoAllocator &ma, alib::Substring &parser)
Definition target.cpp:155
int Match(TemplateArguments &target)
Definition target.cpp:241
void Print(alib::AString &dest)
Definition target.cpp:264
alib::String * Arguments
An array of length Count of strings.
Definition target.hpp:144