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