Doxygen
Loading...
Searching...
No Matches
DefinitionImpl Class Reference

#include <src/definitionimpl.h>

Classes

class  Private
 Private data associated with a Symbol DefinitionImpl object. More...

Public Member Functions

 DefinitionImpl (Definition *def, const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
 ~DefinitionImpl ()
 DefinitionImpl (const DefinitionImpl &d)
DefinitionImploperator= (const DefinitionImpl &d)
 DefinitionImpl (DefinitionImpl &&d)=delete
DefinitionImploperator= (DefinitionImpl &&d)=delete
const QCStringname () const
bool isAnonymous () const
const QCStringlocalName () const
QCString qualifiedName () const
QCString symbolName () const
QCString getSourceFileBase () const
QCString getSourceAnchor () const
QCString documentation () const
int docLine () const
QCString docFile () const
QCString briefDescription (bool abbreviate=FALSE) const
QCString briefDescriptionAsTooltip () const
int briefLine () const
QCString inbodyDocumentation () const
QCString inbodyFile () const
int inbodyLine () const
QCString briefFile () const
QCString getDefFileName () const
QCString getDefFileExtension () const
int getDefLine () const
int getDefColumn () const
bool hasDocumentation () const
bool hasUserDocumentation () const
bool isVisibleInProject () const
bool isVisible () const
bool isHidden () const
bool isArtificial () const
bool isExported () const
QCString getReference () const
bool isReference () const
QCString externalReference (const QCString &relPath) const
int getStartDefLine () const
int getStartBodyLine () const
int getEndBodyLine () const
const FileDefgetBodyDef () const
SrcLangExt getLanguage () const
const GroupListpartOfGroups () const
bool isLinkableViaGroup () const
const RefItemVectorxrefListItems () const
const DefinitionfindInnerCompound (const QCString &name) const
DefinitiongetOuterScope () const
const MemberVectorgetReferencesMembers () const
const MemberVectorgetReferencedByMembers () const
bool hasSections () const
bool hasSources () const
bool hasBriefDescription () const
QCString id () const
const SectionRefsgetSectionRefs () const
void setName (const QCString &name)
void setId (const QCString &name)
void setDefFile (const QCString &df, int defLine, int defColumn)
void setDocumentation (const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE)
void setBriefDescription (const QCString &b, const QCString &briefFile, int briefLine)
void setInbodyDocumentation (const QCString &d, const QCString &docFile, int docLine)
void setReference (const QCString &r)
void addSectionsToDefinition (const std::vector< const SectionInfo * > &anchorList)
void setBodySegment (int defLine, int bls, int ble)
void setBodyDef (const FileDef *fd)
void addSourceReferencedBy (MemberDef *d, const QCString &sourceRefName)
void addSourceReferences (MemberDef *d, const QCString &sourceRefName)
void setRefItems (const RefItemVector &sli)
void mergeRefItems (Definition *d)
void mergeReferences (const Definition *other)
void mergeReferencedBy (const Definition *other)
void addInnerCompound (Definition *d)
void setOuterScope (Definition *d)
void setHidden (bool b)
void setArtificial (bool b)
void setExported (bool b)
void setLanguage (SrcLangExt lang)
void writeSourceDef (OutputList &ol) const
void writeInlineCode (OutputList &ol, const QCString &scopeName) const
bool hasSourceRefs () const
bool hasSourceReffedBy () const
void writeSourceRefs (OutputList &ol, const QCString &scopeName) const
void writeSourceReffedBy (OutputList &ol, const QCString &scopeName) const
void makePartOfGroup (GroupDef *gd)
void writeNavigationPath (OutputList &ol) const
QCString navigationPathAsString () const
void writeQuickMemberLinks (OutputList &, const MemberDef *) const
void writeSummaryLinks (OutputList &) const
QCString pathFragment () const
void writeDocAnchorsToTagFile (TextStream &) const
void setLocalName (const QCString &name)
void writeToc (OutputList &ol, const LocalToc &lt) const
void computeTooltip ()
void _setSymbolName (const QCString &name)
QCString _symbolName () const

Private Member Functions

int _getXRefListId (const QCString &listName) const
void _writeSourceRefList (OutputList &ol, const QCString &scopeName, const QCString &text, const std::unordered_map< std::string, MemberDef * > &members, bool) const
void _setBriefDescription (const QCString &b, const QCString &briefFile, int briefLine)
void _setDocumentation (const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace, bool atTop)
void _setInbodyDocumentation (const QCString &d, const QCString &docFile, int docLine)
bool _docsAlreadyAdded (const QCString &doc, QCString &sigList)

Private Attributes

std::unique_ptr< Privatep

Detailed Description

Definition at line 27 of file definitionimpl.h.

Constructor & Destructor Documentation

◆ DefinitionImpl() [1/3]

DefinitionImpl::DefinitionImpl ( Definition * def,
const QCString & defFileName,
int defLine,
int defColumn,
const QCString & name,
const char * b = nullptr,
const char * d = nullptr,
bool isSymbol = TRUE )

Definition at line 232 of file definition.cpp.

236 : p(std::make_unique<Private>())
237{
238 setName(name);
239 p->def = def;
240 p->defLine = dl;
241 p->defColumn = dc;
242 p->init(df,name);
243 p->isSymbol = isSymbol;
244 if (isSymbol) addToMap(name,def);
245 _setBriefDescription(b,df,dl);
248 {
249 p->hidden = TRUE;
250 }
251}
void setName(const QCString &name)
void _setBriefDescription(const QCString &b, const QCString &briefFile, int briefLine)
const QCString & name() const
void _setDocumentation(const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace, bool atTop)
std::unique_ptr< Private > p
static void addToMap(const QCString &name, Definition *d)
static bool matchExcludedSymbols(const QCString &name)
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References _setBriefDescription(), _setDocumentation(), addToMap(), FALSE, matchExcludedSymbols(), name(), p, setName(), and TRUE.

Referenced by DefinitionImpl(), DefinitionImpl(), mergeReferencedBy(), mergeReferences(), operator=(), and operator=().

◆ ~DefinitionImpl()

DefinitionImpl::~DefinitionImpl ( )

Definition at line 268 of file definition.cpp.

269{
270 if (p->isSymbol)
271 {
272 removeFromMap(p->symbolName,p->def);
273 }
274}
static void removeFromMap(const QCString &name, Definition *d)

References p, and removeFromMap().

◆ DefinitionImpl() [2/3]

DefinitionImpl::DefinitionImpl ( const DefinitionImpl & d)

Definition at line 253 of file definition.cpp.

254 : p(std::make_unique<Private>(*d.p))
255{
256 if (p->isSymbol) addToMap(p->name,p->def);
257}

References addToMap(), DefinitionImpl(), and p.

◆ DefinitionImpl() [3/3]

DefinitionImpl::DefinitionImpl ( DefinitionImpl && d)
delete

References DefinitionImpl().

Member Function Documentation

◆ _docsAlreadyAdded()

bool DefinitionImpl::_docsAlreadyAdded ( const QCString & doc,
QCString & sigList )
private

Definition at line 362 of file definition.cpp.

363{
364 uint8_t md5_sig[16];
365 char sigStr[33];
366 // to avoid mismatches due to differences in indenting, we first remove
367 // double whitespaces...
368 QCString docStr = doc.simplifyWhiteSpace();
369 MD5Buffer(docStr.data(),static_cast<unsigned int>(docStr.length()),md5_sig);
370 MD5SigToString(md5_sig,sigStr);
371 //printf("%s:_docsAlreadyAdded doc='%s' sig='%s' docSigs='%s'\n",
372 // qPrint(name()),qPrint(doc),qPrint(sigStr),qPrint(sigList));
373 if (sigList.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
374 {
375 sigList+=QCString(":")+sigStr;
376 return FALSE;
377 }
378 else
379 {
380 return TRUE;
381 }
382}
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:153
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
Definition qcstring.cpp:185
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:159

References QCString::data(), FALSE, QCString::find(), QCString::length(), QCString::simplifyWhiteSpace(), and TRUE.

Referenced by _setBriefDescription(), and _setInbodyDocumentation().

◆ _getXRefListId()

int DefinitionImpl::_getXRefListId ( const QCString & listName) const
private

Definition at line 1318 of file definition.cpp.

1319{
1320 for (const RefItem *item : p->xrefListItems)
1321 {
1322 if (item->list()->listName()==listName)
1323 {
1324 return item->id();
1325 }
1326 }
1327 return -1;
1328}
int id() const
Definition reflist.h:52
RefList * list() const
Definition reflist.h:53
QCString listName() const
Definition reflist.h:101

References RefItem::id(), RefItem::list(), RefList::listName(), and p.

◆ _setBriefDescription()

void DefinitionImpl::_setBriefDescription ( const QCString & b,
const QCString & briefFile,
int briefLine )
private

Definition at line 437 of file definition.cpp.

438{
439 QCString brief = b;
440 brief = brief.stripWhiteSpace();
442 brief = brief.stripWhiteSpace();
443 if (brief.isEmpty()) return;
444 size_t bl = brief.length();
445 if (bl>0)
446 {
447 if (!theTranslator || theTranslator->needsPunctuation()) // add punctuation if needed
448 {
449 int c = brief.at(bl-1);
450 switch(c)
451 {
452 case '.': case '!': case '?': case '>': case ':': case ')': break;
453 default:
454 if (isUTF8CharUpperCase(brief.str(),0) && !lastUTF8CharIsMultibyte(brief.str())) brief+='.';
455 break;
456 }
457 }
458 }
459
460 if (!_docsAlreadyAdded(brief,p->briefSignatures))
461 {
462 if (p->brief && !p->brief->doc.isEmpty())
463 {
464 //printf("adding to details\n");
466 }
467 else
468 {
469 //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
470 if (!p->brief.has_value())
471 {
472 p->brief = std::make_optional<BriefInfo>();
473 }
474 BriefInfo &briefInfo = p->brief.value();
475 briefInfo.doc=brief;
476 if (briefLine!=-1)
477 {
478 briefInfo.file = briefFile;
479 briefInfo.line = briefLine;
480 }
481 else
482 {
483 briefInfo.file = briefFile;
484 briefInfo.line = 1;
485 }
486 }
487 }
488 else
489 {
490 //printf("do nothing!\n");
491 }
492}
int briefLine() const
bool _docsAlreadyAdded(const QCString &doc, QCString &sigList)
QCString briefFile() const
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:578
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:150
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:245
const std::string & str() const
Definition qcstring.h:537
virtual bool needsPunctuation()
add punctuation at the end of a brief description when needed and supported by the language
Definition translator.h:154
Translator * theTranslator
Definition language.cpp:71
QCString file
Definition definition.h:58
QCString doc
Definition definition.h:55
bool isUTF8CharUpperCase(const std::string &input, size_t pos)
Returns true iff the input string at byte position pos holds an upper case character.
Definition utf8.cpp:218
bool lastUTF8CharIsMultibyte(const std::string &input)
Returns true iff the last character in input is a multibyte character.
Definition utf8.cpp:212
QCString stripLeadingAndTrailingEmptyLines(const QCString &s, int &docLine)
Special version of QCString::stripWhiteSpace() that only strips completely blank lines.
Definition util.cpp:5533

References _docsAlreadyAdded(), _setDocumentation(), QCString::at(), briefFile(), briefLine(), BriefInfo::doc, FALSE, BriefInfo::file, QCString::isEmpty(), isUTF8CharUpperCase(), lastUTF8CharIsMultibyte(), QCString::length(), BriefInfo::line, p, QCString::str(), stripLeadingAndTrailingEmptyLines(), QCString::stripWhiteSpace(), theTranslator, and TRUE.

Referenced by DefinitionImpl(), and setBriefDescription().

◆ _setDocumentation()

void DefinitionImpl::_setDocumentation ( const QCString & d,
const QCString & docFile,
int docLine,
bool stripWhiteSpace,
bool atTop )
private

Definition at line 384 of file definition.cpp.

386{
387 //printf("%s::setDocumentation(%s,%s,%d,%d)\n",qPrint(name()),d,docFile,docLine,stripWhiteSpace);
388 if (d.isEmpty()) return;
389 QCString doc = d;
390 if (stripWhiteSpace)
391 {
393 }
394 else // don't strip whitespace
395 {
396 doc=d;
397 }
398 if (!_docsAlreadyAdded(doc,p->docSignatures))
399 {
400 //printf("setting docs for %s: '%s'\n",qPrint(name()),qPrint(m_doc));
401 if (!p->details.has_value())
402 {
403 p->details = std::make_optional<DocInfo>();
404 }
405 DocInfo &details = p->details.value();
406 if (details.doc.isEmpty()) // fresh detailed description
407 {
408 details.doc = doc;
409 }
410 else if (atTop) // another detailed description, append it to the start
411 {
412 details.doc = doc+"\n\n"+details.doc;
413 }
414 else // another detailed description, append it to the end
415 {
416 details.doc += "\n\n"+doc;
417 }
418 if (docLine!=-1) // store location if valid
419 {
420 details.file = docFile;
421 details.line = docLine;
422 }
423 else
424 {
425 details.file = docFile;
426 details.line = 1;
427 }
428 }
429}
int docLine() const
QCString docFile() const
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition stringutil.h:72
QCString doc
Definition definition.h:47
int line
Definition definition.h:48
QCString file
Definition definition.h:49

References docFile(), docLine(), and stripWhiteSpace().

Referenced by _setBriefDescription(), DefinitionImpl(), and setDocumentation().

◆ _setInbodyDocumentation()

void DefinitionImpl::_setInbodyDocumentation ( const QCString & d,
const QCString & docFile,
int docLine )
private

Definition at line 500 of file definition.cpp.

501{
502 if (!_docsAlreadyAdded(doc,p->docSignatures))
503 {
504 if (!p->inbodyDocs.has_value())
505 {
506 p->inbodyDocs = std::make_optional<DocInfo>();
507 }
508 DocInfo &inbodyDocs = p->inbodyDocs.value();
509 if (inbodyDocs.doc.isEmpty()) // fresh inbody docs
510 {
511 inbodyDocs.doc = doc;
512 inbodyDocs.file = inbodyFile;
513 inbodyDocs.line = inbodyLine;
514 }
515 else // another inbody documentation fragment, append this to the end
516 {
517 inbodyDocs.doc += QCString("\n\n")+doc;
518 }
519 }
520}
int inbodyLine() const
QCString inbodyFile() const

References _docsAlreadyAdded(), DocInfo::doc, DocInfo::file, inbodyFile(), inbodyLine(), QCString::isEmpty(), DocInfo::line, and p.

Referenced by setInbodyDocumentation().

◆ _setSymbolName()

void DefinitionImpl::_setSymbolName ( const QCString & name)

Definition at line 1760 of file definition.cpp.

1761{
1762 p->symbolName=name;
1763}

References name(), and p.

◆ _symbolName()

QCString DefinitionImpl::_symbolName ( ) const

Definition at line 1765 of file definition.cpp.

1766{
1767 return p->symbolName;
1768}

References p.

◆ _writeSourceRefList()

void DefinitionImpl::_writeSourceRefList ( OutputList & ol,
const QCString & scopeName,
const QCString & text,
const std::unordered_map< std::string, MemberDef * > & membersMap,
bool  ) const
private

Write a reference to the source code fragments in which this definition is used.

Definition at line 1080 of file definition.cpp.

1083{
1084 if (!membersMap.empty())
1085 {
1086 auto members = refMapToVector(membersMap);
1087
1088 auto replaceFunc = [this,&members,scopeName,&ol](size_t entryIndex)
1089 {
1090 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1091 bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE);
1092 const MemberDef *md=members[entryIndex];
1093 if (md)
1094 {
1095 QCString scope=md->getScopeString();
1096 QCString name=md->name();
1097 //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),qPrint(scope),scopeName);
1098 if (!scope.isEmpty() && scope!=scopeName)
1099 {
1100 name.prepend(scope+getLanguageSpecificSeparator(p->lang));
1101 }
1102 if (!md->isObjCMethod() &&
1103 (md->isFunction() || md->isSlot() ||
1104 md->isPrototype() || md->isSignal()
1105 )
1106 )
1107 {
1108 name+="()";
1109 }
1110 if (sourceBrowser &&
1111 !(md->isLinkable() && !refLinkSource) &&
1112 md->getStartBodyLine()!=-1 &&
1113 md->getBodyDef()
1114 )
1115 {
1116 const int maxLineNrStr = 10;
1117 char anchorStr[maxLineNrStr];
1118 qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
1119 //printf("Write object link to %s\n",qPrint(md->getBodyDef()->getSourceFileBase()));
1120 ol.writeObjectLink(QCString(),md->getBodyDef()->getSourceFileBase(),anchorStr,name);
1121 }
1122 else if (md->isLinkable())
1123 {
1125 md->getOutputFileBase(),
1126 md->anchor(),name);
1127 }
1128 else
1129 {
1130 ol.docify(name);
1131 }
1132 }
1133 };
1134
1135 ol.startParagraph("reference");
1136 ol.parseText(text);
1137 ol.docify(" ");
1138 writeMarkerList(ol,
1139 theTranslator->trWriteList(static_cast<int>(members.size())).str(),
1140 members.size(),
1141 replaceFunc);
1142 ol.writeString(".");
1143 ol.endParagraph();
1144
1145 }
1146}
virtual bool isLinkable() const =0
virtual QCString anchor() const =0
virtual const FileDef * getBodyDef() const =0
virtual QCString getReference() const =0
virtual QCString getSourceFileBase() const =0
virtual QCString getOutputFileBase() const =0
virtual int getStartBodyLine() const =0
virtual const QCString & name() const =0
virtual bool isSignal() const =0
virtual bool isObjCMethod() const =0
virtual bool isSlot() const =0
virtual bool isFunction() const =0
virtual QCString getScopeString() const =0
virtual bool isPrototype() const =0
void writeString(const QCString &text)
Definition outputlist.h:412
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:440
void docify(const QCString &s)
Definition outputlist.h:438
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:408
void endParagraph()
Definition outputlist.h:410
void parseText(const QCString &textStr)
virtual QCString trWriteList(int numEntries)=0
#define Config_getBool(name)
Definition config.h:33
static MemberVector refMapToVector(const std::unordered_map< std::string, MemberDef * > &map)
#define qsnprintf
Definition qcstring.h:49
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:6369
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1103

References Definition::anchor(), Config_getBool, OutputList::docify(), OutputList::endParagraph(), Definition::getBodyDef(), getLanguageSpecificSeparator(), Definition::getOutputFileBase(), Definition::getReference(), MemberDef::getScopeString(), Definition::getSourceFileBase(), Definition::getStartBodyLine(), QCString::isEmpty(), MemberDef::isFunction(), Definition::isLinkable(), MemberDef::isObjCMethod(), MemberDef::isPrototype(), MemberDef::isSignal(), MemberDef::isSlot(), Definition::name(), name(), p, OutputList::parseText(), qsnprintf, refMapToVector(), OutputList::startParagraph(), theTranslator, writeMarkerList(), OutputList::writeObjectLink(), and OutputList::writeString().

Referenced by writeSourceReffedBy(), and writeSourceRefs().

◆ addInnerCompound()

void DefinitionImpl::addInnerCompound ( Definition * d)

Definition at line 1213 of file definition.cpp.

1214{
1215 err("DefinitionImpl::addInnerCompound() called\n");
1216}
#define err(fmt,...)
Definition message.h:127

References err.

◆ addSectionsToDefinition()

void DefinitionImpl::addSectionsToDefinition ( const std::vector< const SectionInfo * > & anchorList)

Definition at line 301 of file definition.cpp.

302{
303 //printf("%s: addSectionsToDefinition(%d)\n",qPrint(name()),anchorList->count());
304 for (const SectionInfo *si : anchorList)
305 {
306 //printf("Add section '%s' to definition '%s'\n",
307 // qPrint(si->label()),qPrint(name()));
308 SectionManager &sm = SectionManager::instance();
309 SectionInfo *gsi=sm.find(si->label());
310 //printf("===== label=%s gsi=%p\n",qPrint(si->label),gsi);
311 if (gsi==nullptr)
312 {
313 gsi = sm.add(*si);
314 }
315 if (p->sectionRefs.find(gsi->label())==nullptr)
316 {
317 p->sectionRefs.add(gsi);
318 gsi->setDefinition(p->def);
319 }
320 }
321}
const T * find(const std::string &key) const
Definition linkedmap.h:47
QCString label() const
Definition section.h:68
void setDefinition(Definition *d)
Definition section.h:82
SectionInfo * add(const SectionInfo &si)
Definition section.h:138
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:175

References SectionManager::add(), LinkedMap< T, Hash, KeyEqual, Map >::find(), SectionManager::instance(), SectionInfo::label(), p, and SectionInfo::setDefinition().

◆ addSourceReferencedBy()

void DefinitionImpl::addSourceReferencedBy ( MemberDef * d,
const QCString & sourceRefName )

Definition at line 1192 of file definition.cpp.

1193{
1194 if (md)
1195 {
1196 p->sourceRefByDict.emplace(sourceRefName.str(),md);
1197 }
1198}

References p, and QCString::str().

◆ addSourceReferences()

void DefinitionImpl::addSourceReferences ( MemberDef * d,
const QCString & sourceRefName )

Definition at line 1200 of file definition.cpp.

1201{
1202 if (md)
1203 {
1204 p->sourceRefsDict.emplace(sourceRefName.str(),md);
1205 }
1206}

References p, and QCString::str().

◆ briefDescription()

QCString DefinitionImpl::briefDescription ( bool abbreviate = FALSE) const

Definition at line 1531 of file definition.cpp.

1532{
1533 //printf("%s::briefDescription(%d)='%s'\n",qPrint(name()),abbr,p->brief?qPrint(p->brief->doc):"<none>");
1534 return p->brief ?
1535 (abbr ? abbreviate(p->brief->doc,p->def->displayName()) : p->brief->doc) :
1536 QCString("");
1537}
static QCString abbreviate(const QCString &s, const QCString &name)

References abbreviate(), and p.

Referenced by hasBriefDescription().

◆ briefDescriptionAsTooltip()

QCString DefinitionImpl::briefDescriptionAsTooltip ( ) const

Definition at line 1550 of file definition.cpp.

1551{
1552 return p->brief ? p->brief->tooltip : QCString();
1553}

References p.

◆ briefFile()

QCString DefinitionImpl::briefFile ( ) const

Definition at line 1560 of file definition.cpp.

1561{
1562 return p->brief && !p->brief->file.isEmpty() ? p->brief->file : QCString("<"+p->name+">");
1563}

References p.

Referenced by _setBriefDescription(), operator=(), and setBriefDescription().

◆ briefLine()

int DefinitionImpl::briefLine ( ) const

Definition at line 1555 of file definition.cpp.

1556{
1557 return p->brief ? p->brief->line : 1;
1558}

References p.

Referenced by _setBriefDescription(), operator=(), and setBriefDescription().

◆ computeTooltip()

void DefinitionImpl::computeTooltip ( )

Definition at line 1539 of file definition.cpp.

1540{
1541 if (p->brief && p->brief->tooltip.isEmpty() && !p->brief->doc.isEmpty())
1542 {
1543 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1544 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1545 p->brief->tooltip = parseCommentAsText(scope,md,
1546 p->brief->doc, p->brief->file, p->brief->line);
1547 }
1548}
MemberDef * toMemberDef(Definition *d)
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
Definition util.cpp:5872

References p, parseCommentAsText(), toMemberDef(), and Definition::TypeMember.

◆ docFile()

QCString DefinitionImpl::docFile ( ) const

Definition at line 1476 of file definition.cpp.

1477{
1478 if (p->details && !p->details->file.isEmpty()) return p->details->file;
1479 else if (p->brief && !p->brief->file.isEmpty()) return p->brief->file;
1480 else return "<" + p->name + ">";
1481}

References p.

Referenced by _setDocumentation(), operator=(), and setDocumentation().

◆ docLine()

int DefinitionImpl::docLine ( ) const

Definition at line 1471 of file definition.cpp.

1472{
1473 return p->details ? p->details->line : p->brief ? p->brief->line : 1;
1474}

References p.

Referenced by _setDocumentation(), operator=(), setDocumentation(), and toDefinition().

◆ documentation()

QCString DefinitionImpl::documentation ( ) const

Definition at line 1466 of file definition.cpp.

1467{
1468 return p->details ? p->details->doc : QCString("");
1469}

References p.

◆ externalReference()

QCString DefinitionImpl::externalReference ( const QCString & relPath) const

Definition at line 1776 of file definition.cpp.

1777{
1778 QCString ref = getReference();
1779 if (!ref.isEmpty())
1780 {
1781 auto it = Doxygen::tagDestinationMap.find(ref.str());
1783 {
1784 QCString result(it->second);
1785 size_t l = result.length();
1786 if (!relPath.isEmpty() && l>0 && result.at(0)=='.')
1787 { // relative path -> prepend relPath.
1788 result.prepend(relPath);
1789 l+=relPath.length();
1790 }
1791 if (l>0 && result.at(l-1)!='/') result+='/';
1792 return result;
1793 }
1794 }
1795 return relPath;
1796}
QCString getReference() const
static StringMap tagDestinationMap
Definition doxygen.h:116
DirIterator end(const DirIterator &) noexcept
Definition dir.cpp:175

References QCString::at(), end(), getReference(), QCString::isEmpty(), QCString::length(), QCString::prepend(), QCString::str(), and Doxygen::tagDestinationMap.

◆ findInnerCompound()

const Definition * DefinitionImpl::findInnerCompound ( const QCString & name) const

Definition at line 1208 of file definition.cpp.

1209{
1210 return nullptr;
1211}

◆ getBodyDef()

const FileDef * DefinitionImpl::getBodyDef ( ) const

Definition at line 1645 of file definition.cpp.

1646{
1647 return p->body ? p->body->fileDef : nullptr;
1648}

References p.

◆ getDefColumn()

int DefinitionImpl::getDefColumn ( ) const

Definition at line 1813 of file definition.cpp.

1814{
1815 return p->defColumn;
1816}

References p.

◆ getDefFileExtension()

QCString DefinitionImpl::getDefFileExtension ( ) const

Definition at line 1590 of file definition.cpp.

1591{
1592 return p->defFileExt;
1593}

References p.

◆ getDefFileName()

QCString DefinitionImpl::getDefFileName ( ) const

Definition at line 1585 of file definition.cpp.

1586{
1587 return p->defFileName;
1588}

References p.

◆ getDefLine()

int DefinitionImpl::getDefLine ( ) const

Definition at line 1808 of file definition.cpp.

1809{
1810 return p->defLine;
1811}

References p.

◆ getEndBodyLine()

int DefinitionImpl::getEndBodyLine ( ) const

Definition at line 1640 of file definition.cpp.

1641{
1642 return p->body ? p->body->endLine : -1;
1643}

References p.

◆ getLanguage()

SrcLangExt DefinitionImpl::getLanguage ( ) const

Definition at line 1729 of file definition.cpp.

1730{
1731 return p->lang;
1732}

References p.

Referenced by qualifiedName().

◆ getOuterScope()

Definition * DefinitionImpl::getOuterScope ( ) const

Definition at line 1664 of file definition.cpp.

1665{
1666 return p->outerScope;
1667}

References p.

Referenced by navigationPathAsString().

◆ getReference()

QCString DefinitionImpl::getReference ( ) const

Definition at line 1620 of file definition.cpp.

1621{
1622 return p->ref;
1623}

References p.

Referenced by externalReference().

◆ getReferencedByMembers()

const MemberVector & DefinitionImpl::getReferencedByMembers ( ) const

Definition at line 1681 of file definition.cpp.

1682{
1683 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1684 if (p->referencedByMembers.empty() && !p->sourceRefByDict.empty())
1685 {
1686 p->referencedByMembers = refMapToVector(p->sourceRefByDict);
1687 }
1688 return p->referencedByMembers;
1689}
static std::mutex g_memberReferenceMutex

References g_memberReferenceMutex, p, and refMapToVector().

◆ getReferencesMembers()

const MemberVector & DefinitionImpl::getReferencesMembers ( ) const

Definition at line 1671 of file definition.cpp.

1672{
1673 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1674 if (p->referencesMembers.empty() && !p->sourceRefsDict.empty())
1675 {
1676 p->referencesMembers = refMapToVector(p->sourceRefsDict);
1677 }
1678 return p->referencesMembers;
1679}

References g_memberReferenceMutex, p, and refMapToVector().

◆ getSectionRefs()

const SectionRefs & DefinitionImpl::getSectionRefs ( ) const

Definition at line 1454 of file definition.cpp.

1455{
1456 return p->sectionRefs;
1457}

References p.

◆ getSourceAnchor()

QCString DefinitionImpl::getSourceAnchor ( ) const

Definition at line 916 of file definition.cpp.

917{
918 const int maxAnchorStrLen = 20;
919 char anchorStr[maxAnchorStrLen];
920 anchorStr[0]='\0';
921 if (p->body && p->body->startLine!=-1)
922 {
923 if (Htags::useHtags)
924 {
925 qsnprintf(anchorStr,maxAnchorStrLen,"L%d",p->body->defLine);
926 }
927 else
928 {
929 qsnprintf(anchorStr,maxAnchorStrLen,"l%05d",p->body->defLine);
930 }
931 }
932 return anchorStr;
933}
static bool useHtags
Definition htags.h:23

References p, qsnprintf, and Htags::useHtags.

Referenced by writeSourceDef().

◆ getSourceFileBase()

QCString DefinitionImpl::getSourceFileBase ( ) const

Definition at line 903 of file definition.cpp.

904{
905 ASSERT(p->def->definitionType()!=Definition::TypeFile); // file overloads this method
906 QCString fn;
907 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
908 if (sourceBrowser &&
909 p->body && p->body->startLine!=-1 && p->body->fileDef)
910 {
911 fn = p->body->fileDef->getSourceFileBase();
912 }
913 return fn;
914}
#define ASSERT(x)
Definition qcstring.h:39

References ASSERT, Config_getBool, p, and Definition::TypeFile.

Referenced by writeSourceDef().

◆ getStartBodyLine()

int DefinitionImpl::getStartBodyLine ( ) const

Definition at line 1635 of file definition.cpp.

1636{
1637 return p->body ? p->body->startLine : -1;
1638}

References p.

◆ getStartDefLine()

int DefinitionImpl::getStartDefLine ( ) const

Definition at line 1630 of file definition.cpp.

1631{
1632 return p->body ? p->body->defLine : -1;
1633}

References p.

◆ hasBriefDescription()

bool DefinitionImpl::hasBriefDescription ( ) const

Definition at line 1770 of file definition.cpp.

1771{
1772 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
1773 return !briefDescription().isEmpty() && briefMemberDesc;
1774}
QCString briefDescription(bool abbreviate=FALSE) const

References briefDescription(), Config_getBool, and QCString::isEmpty().

◆ hasDocumentation()

bool DefinitionImpl::hasDocumentation ( ) const

Definition at line 1168 of file definition.cpp.

1169{
1170 bool extractAll = Config_getBool(EXTRACT_ALL);
1171 //bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1172 bool hasDocs =
1173 (p->details && !p->details->doc.isEmpty()) || // has detailed docs
1174 (p->brief && !p->brief->doc.isEmpty()) || // has brief description
1175 (p->inbodyDocs && !p->inbodyDocs->doc.isEmpty()) || // has inbody docs
1176 extractAll //|| // extract everything
1177 // (sourceBrowser && p->body &&
1178 // p->body->startLine!=-1 && p->body->fileDef)
1179 ; // link to definition
1180 return hasDocs;
1181}

References Config_getBool, and p.

◆ hasSections()

bool DefinitionImpl::hasSections ( ) const

Definition at line 323 of file definition.cpp.

324{
325 //printf("DefinitionImpl::hasSections(%s) #sections=%d\n",qPrint(name()),
326 // p->sectionRefs.size());
327 if (p->sectionRefs.empty()) return FALSE;
328 for (const SectionInfo *si : p->sectionRefs)
329 {
330 if (si->type().isSection())
331 {
332 return TRUE;
333 }
334 }
335 return FALSE;
336}
SectionType type() const
Definition section.h:70
constexpr bool isSection() const
Definition section.h:46

References FALSE, SectionType::isSection(), p, TRUE, and SectionInfo::type().

◆ hasSourceReffedBy()

bool DefinitionImpl::hasSourceReffedBy ( ) const

Definition at line 1158 of file definition.cpp.

1159{
1160 return !p->sourceRefByDict.empty();
1161}

References p.

◆ hasSourceRefs()

bool DefinitionImpl::hasSourceRefs ( ) const

Definition at line 1163 of file definition.cpp.

1164{
1165 return !p->sourceRefsDict.empty();
1166}

References p.

◆ hasSources()

bool DefinitionImpl::hasSources ( ) const

Definition at line 1006 of file definition.cpp.

1007{
1008 return p->body && p->body->startLine!=-1 &&
1009 p->body->endLine>=p->body->startLine &&
1010 p->body->fileDef;
1011}

References p.

Referenced by writeInlineCode().

◆ hasUserDocumentation()

bool DefinitionImpl::hasUserDocumentation ( ) const

Definition at line 1183 of file definition.cpp.

1184{
1185 bool hasDocs =
1186 (p->details && !p->details->doc.isEmpty()) ||
1187 (p->brief && !p->brief->doc.isEmpty()) ||
1188 (p->inbodyDocs && !p->inbodyDocs->doc.isEmpty());
1189 return hasDocs;
1190}

References p.

◆ id()

QCString DefinitionImpl::id ( ) const

Definition at line 296 of file definition.cpp.

297{
298 return p->id;
299}

References p.

Referenced by setId().

◆ inbodyDocumentation()

QCString DefinitionImpl::inbodyDocumentation ( ) const

Definition at line 1567 of file definition.cpp.

1568{
1569 return p->inbodyDocs ? p->inbodyDocs->doc : QCString("");
1570}

References p.

◆ inbodyFile()

QCString DefinitionImpl::inbodyFile ( ) const

Definition at line 1577 of file definition.cpp.

1578{
1579 return p->inbodyDocs && !p->inbodyDocs->file.isEmpty() ? p->inbodyDocs->file : QCString("<"+p->name+">");
1580}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ inbodyLine()

int DefinitionImpl::inbodyLine ( ) const

Definition at line 1572 of file definition.cpp.

1573{
1574 return p->inbodyDocs ? p->inbodyDocs->line : 1;
1575}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ isAnonymous()

bool DefinitionImpl::isAnonymous ( ) const

Definition at line 1803 of file definition.cpp.

1804{
1805 return p->isAnonymous;
1806}

References p.

◆ isArtificial()

bool DefinitionImpl::isArtificial ( ) const

Definition at line 1610 of file definition.cpp.

1611{
1612 return p->isArtificial;
1613}

References p.

◆ isExported()

bool DefinitionImpl::isExported ( ) const

Definition at line 1615 of file definition.cpp.

1616{
1617 return p->isExported;
1618}

References p.

◆ isHidden()

bool DefinitionImpl::isHidden ( ) const

Definition at line 1595 of file definition.cpp.

1596{
1597 return p->hidden;
1598}

References p.

◆ isLinkableViaGroup()

bool DefinitionImpl::isLinkableViaGroup ( ) const

Definition at line 1655 of file definition.cpp.

1656{
1657 for (const auto &gd : partOfGroups())
1658 {
1659 if (gd->isLinkable()) return true;
1660 }
1661 return false;
1662}
const GroupList & partOfGroups() const

References partOfGroups().

◆ isReference()

bool DefinitionImpl::isReference ( ) const

Definition at line 1625 of file definition.cpp.

1626{
1627 return !p->ref.isEmpty();
1628}

References p.

◆ isVisible()

bool DefinitionImpl::isVisible ( ) const

Definition at line 1605 of file definition.cpp.

1606{
1607 return p->def->isLinkable() && !p->hidden;
1608}

References p.

◆ isVisibleInProject()

bool DefinitionImpl::isVisibleInProject ( ) const

Definition at line 1600 of file definition.cpp.

1601{
1602 return p->def->isLinkableInProject() && !p->hidden;
1603}

References p.

◆ localName()

const QCString & DefinitionImpl::localName ( ) const

Definition at line 1277 of file definition.cpp.

1278{
1279 return p->localName;
1280}

References p.

Referenced by navigationPathAsString().

◆ makePartOfGroup()

void DefinitionImpl::makePartOfGroup ( GroupDef * gd)

Definition at line 1282 of file definition.cpp.

1283{
1284 p->partOfGroups.push_back(gd);
1285}

References p.

◆ mergeReferencedBy()

void DefinitionImpl::mergeReferencedBy ( const Definition * other)

Definition at line 1707 of file definition.cpp.

1708{
1709 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1710 if (defImpl)
1711 {
1712 for (const auto &kv : defImpl->p->sourceRefByDict)
1713 {
1714 auto it = p->sourceRefByDict.find(kv.first);
1715 if (it != p->sourceRefByDict.end())
1716 {
1717 p->sourceRefByDict.emplace(kv.first,kv.second);
1718 }
1719 }
1720 }
1721}
virtual const DefinitionImpl * toDefinitionImpl_() const =0
DefinitionImpl(Definition *def, const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)

References DefinitionImpl(), p, and Definition::toDefinitionImpl_().

◆ mergeReferences()

void DefinitionImpl::mergeReferences ( const Definition * other)

Definition at line 1691 of file definition.cpp.

1692{
1693 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1694 if (defImpl)
1695 {
1696 for (const auto &kv : defImpl->p->sourceRefsDict)
1697 {
1698 auto it = p->sourceRefsDict.find(kv.first);
1699 if (it != p->sourceRefsDict.end())
1700 {
1701 p->sourceRefsDict.insert(kv);
1702 }
1703 }
1704 }
1705}

References DefinitionImpl(), p, and Definition::toDefinitionImpl_().

◆ mergeRefItems()

void DefinitionImpl::mergeRefItems ( Definition * d)

Definition at line 1292 of file definition.cpp.

1293{
1294 auto otherXrefList = d->xrefListItems();
1295
1296 // append vectors
1297 p->xrefListItems.reserve(p->xrefListItems.size()+otherXrefList.size());
1298 p->xrefListItems.insert (p->xrefListItems.end(),
1299 otherXrefList.begin(),otherXrefList.end());
1300
1301 // sort results on itemId
1302 std::stable_sort(p->xrefListItems.begin(),p->xrefListItems.end(),
1303 [](RefItem *left,RefItem *right)
1304 { return left->id() <right->id() ||
1305 (left->id()==right->id() &&
1306 left->list()->listName() < right->list()->listName());
1307 });
1308
1309 // filter out duplicates
1310 auto last = std::unique(p->xrefListItems.begin(),p->xrefListItems.end(),
1311 [](const RefItem *left,const RefItem *right)
1312 { return left->id()==right->id() &&
1313 left->list()->listName()==right->list()->listName();
1314 });
1315 p->xrefListItems.erase(last, p->xrefListItems.end());
1316}
virtual const RefItemVector & xrefListItems() const =0

References p, and Definition::xrefListItems().

◆ name()

const QCString & DefinitionImpl::name ( ) const

◆ navigationPathAsString()

QCString DefinitionImpl::navigationPathAsString ( ) const

Returns the string used in the footer for $navpath when GENERATE_TREEVIEW is enabled

Definition at line 1373 of file definition.cpp.

1374{
1375 QCString result;
1376 Definition *outerScope = getOuterScope();
1377 QCString locName = localName();
1378 if (outerScope && outerScope!=Doxygen::globalScope)
1379 {
1380 result+=outerScope->navigationPathAsString();
1381 }
1382 else if (p->def->definitionType()==Definition::TypeFile &&
1383 toFileDef(p->def)->getDirDef())
1384 {
1385 result+=(toFileDef(p->def))->getDirDef()->navigationPathAsString();
1386 }
1387 result+="<li class=\"navelem\">";
1388 if (p->def->isLinkableInProject())
1389 {
1390 QCString fn = p->def->getOutputFileBase();
1392 if (p->def->definitionType()==Definition::TypeGroup &&
1393 !toGroupDef(p->def)->groupTitle().isEmpty())
1394 {
1395 result+="<a href=\"$relpath^"+fn+"\">"+
1396 convertToHtml(toGroupDef(p->def)->groupTitle())+"</a>";
1397 }
1398 else if (p->def->definitionType()==Definition::TypePage &&
1399 toPageDef(p->def)->hasTitle())
1400 {
1401 result+="<a href=\"$relpath^"+fn+"\">"+
1402 convertToHtml((toPageDef(p->def))->title())+"</a>";
1403 }
1404 else if (p->def->definitionType()==Definition::TypeClass)
1405 {
1406 QCString name = toClassDef(p->def)->className();
1407 if (name.endsWith("-p"))
1408 {
1409 name = name.left(name.length()-2);
1410 }
1411 result+="<a href=\"$relpath^"+fn;
1412 if (!p->def->anchor().isEmpty()) result+="#"+p->def->anchor();
1413 result+="\">"+convertToHtml(name)+"</a>";
1414 }
1415 else
1416 {
1417 result+="<a href=\"$relpath^"+fn+"\">"+
1418 convertToHtml(locName)+"</a>";
1419 }
1420 }
1421 else
1422 {
1423 result+="<b>"+convertToHtml(locName)+"</b>";
1424 }
1425 result+="</li>";
1426 return result;
1427}
virtual QCString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
virtual QCString navigationPathAsString() const =0
const QCString & localName() const
Definition * getOuterScope() const
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
virtual DirDef * getDirDef() const =0
virtual QCString groupTitle() const =0
virtual bool hasTitle() const =0
ClassDef * toClassDef(Definition *d)
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1926
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:467
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:4472
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:5408

References addHtmlExtensionIfMissing(), ClassDef::className(), convertToHtml(), getOuterScope(), Doxygen::globalScope, GroupDef::groupTitle(), localName(), name(), Definition::navigationPathAsString(), p, toClassDef(), toFileDef(), toGroupDef(), toPageDef(), Definition::TypeClass, Definition::TypeFile, Definition::TypeGroup, and Definition::TypePage.

Referenced by writeNavigationPath().

◆ operator=() [1/2]

DefinitionImpl & DefinitionImpl::operator= ( const DefinitionImpl & d)

Definition at line 259 of file definition.cpp.

260{
261 if (this!=&other)
262 {
263 p = std::make_unique<Private>(*other.p);
264 }
265 return *this;
266}

References DefinitionImpl(), and p.

◆ operator=() [2/2]

◆ partOfGroups()

const GroupList & DefinitionImpl::partOfGroups ( ) const

Definition at line 1650 of file definition.cpp.

1651{
1652 return p->partOfGroups;
1653}

References p.

Referenced by isLinkableViaGroup().

◆ pathFragment()

QCString DefinitionImpl::pathFragment ( ) const

Definition at line 1335 of file definition.cpp.

1336{
1337 QCString result;
1338 if (p->outerScope && p->outerScope!=Doxygen::globalScope)
1339 {
1340 result = p->outerScope->pathFragment();
1341 }
1342 if (p->def->isLinkable())
1343 {
1344 if (!result.isEmpty()) result+="/";
1345 if (p->def->definitionType()==Definition::TypeGroup &&
1346 !toGroupDef(p->def)->groupTitle().isEmpty())
1347 {
1348 result+=toGroupDef(p->def)->groupTitle();
1349 }
1350 else if (p->def->definitionType()==Definition::TypePage &&
1351 toPageDef(p->def)->hasTitle())
1352 {
1353 result+=toPageDef(p->def)->title();
1354 }
1355 else
1356 {
1357 result+=p->localName;
1358 }
1359 }
1360 else
1361 {
1362 result+=p->localName;
1363 }
1364 return result;
1365}
virtual QCString title() const =0

References Doxygen::globalScope, GroupDef::groupTitle(), QCString::isEmpty(), p, PageDef::title(), toGroupDef(), toPageDef(), Definition::TypeGroup, and Definition::TypePage.

◆ qualifiedName()

QCString DefinitionImpl::qualifiedName ( ) const

Definition at line 1220 of file definition.cpp.

1221{
1222 std::lock_guard<std::recursive_mutex> lock(g_qualifiedNameMutex);
1223 if (!p->qualifiedName.isEmpty())
1224 {
1225 return p->qualifiedName;
1226 }
1227
1228 //printf("start %s::qualifiedName() localName=%s\n",qPrint(name()),qPrint(p->localName));
1229 if (p->outerScope==nullptr)
1230 {
1231 if (p->localName=="<globalScope>")
1232 {
1233 return "";
1234 }
1235 else
1236 {
1237 return p->localName;
1238 }
1239 }
1240
1241 if (p->outerScope->name()=="<globalScope>")
1242 {
1243 p->qualifiedName = p->localName;
1244 }
1245 else
1246 {
1247 p->qualifiedName = p->outerScope->qualifiedName()+
1249 p->localName;
1250 }
1251 //printf("end %s::qualifiedName()=%s\n",qPrint(name()),qPrint(p->qualifiedName));
1252 //count--;
1253 return p->qualifiedName;
1254}
SrcLangExt getLanguage() const
static std::recursive_mutex g_qualifiedNameMutex

References g_qualifiedNameMutex, getLanguage(), getLanguageSpecificSeparator(), and p.

◆ setArtificial()

void DefinitionImpl::setArtificial ( bool b)

Definition at line 1739 of file definition.cpp.

1740{
1741 p->isArtificial = b;
1742}

References p.

◆ setBodyDef()

void DefinitionImpl::setBodyDef ( const FileDef * fd)

Definition at line 997 of file definition.cpp.

998{
999 if (!p->body.has_value())
1000 {
1001 p->body = std::make_optional<BodyInfo>();
1002 }
1003 p->body.value().fileDef=fd;
1004}

References p.

◆ setBodySegment()

void DefinitionImpl::setBodySegment ( int defLine,
int bls,
int ble )

Definition at line 985 of file definition.cpp.

986{
987 if (!p->body.has_value())
988 {
989 p->body = std::make_optional<BodyInfo>();
990 }
991 BodyInfo &body = p->body.value();
992 body.defLine = defLine;
993 body.startLine = bls;
994 body.endLine = ble;
995}
int startLine
line number of the start of the definition's body
Definition definition.h:65
int endLine
line number of the end of the definition's body
Definition definition.h:66
int defLine
line number of the start of the definition
Definition definition.h:64

References BodyInfo::defLine, BodyInfo::endLine, p, and BodyInfo::startLine.

◆ setBriefDescription()

void DefinitionImpl::setBriefDescription ( const QCString & b,
const QCString & briefFile,
int briefLine )

Definition at line 494 of file definition.cpp.

495{
496 if (b.isEmpty()) return;
498}

References _setBriefDescription(), briefFile(), briefLine(), and QCString::isEmpty().

◆ setDefFile()

void DefinitionImpl::setDefFile ( const QCString & df,
int defLine,
int defColumn )

Definition at line 148 of file definition.cpp.

149{
150 p->setDefFileName(df);
151 p->defLine = defLine;
152 p->defColumn = defCol;
153}

References p.

◆ setDocumentation()

void DefinitionImpl::setDocumentation ( const QCString & d,
const QCString & docFile,
int docLine,
bool stripWhiteSpace = TRUE )

Definition at line 431 of file definition.cpp.

432{
433 if (d.isEmpty()) return;
435}

References _setDocumentation(), docFile(), docLine(), FALSE, QCString::isEmpty(), and stripWhiteSpace().

◆ setExported()

void DefinitionImpl::setExported ( bool b)

Definition at line 1744 of file definition.cpp.

1745{
1746 p->isExported = b;
1747}

References p.

◆ setHidden()

void DefinitionImpl::setHidden ( bool b)

Definition at line 1734 of file definition.cpp.

1735{
1736 p->hidden = p->hidden || b;
1737}

References p.

◆ setId()

void DefinitionImpl::setId ( const QCString & name)

Definition at line 285 of file definition.cpp.

286{
287 if (id.isEmpty()) return;
288 p->id = id;
290 {
291 //printf("DefinitionImpl::setId '%s'->'%s'\n",id,qPrint(p->name));
292 Doxygen::clangUsrMap->emplace(id.str(),p->def);
293 }
294}
QCString id() const
static ClangUsrMap * clangUsrMap
Definition doxygen.h:126

References Doxygen::clangUsrMap, id(), and p.

◆ setInbodyDocumentation()

void DefinitionImpl::setInbodyDocumentation ( const QCString & d,
const QCString & docFile,
int docLine )

Definition at line 522 of file definition.cpp.

523{
524 if (d.isEmpty()) return;
526}
void _setInbodyDocumentation(const QCString &d, const QCString &docFile, int docLine)

References _setInbodyDocumentation(), inbodyFile(), inbodyLine(), and QCString::isEmpty().

◆ setLanguage()

void DefinitionImpl::setLanguage ( SrcLangExt lang)

Definition at line 1754 of file definition.cpp.

1755{
1756 p->lang=lang;
1757}

References p.

◆ setLocalName()

void DefinitionImpl::setLocalName ( const QCString & name)

Definition at line 1749 of file definition.cpp.

1750{
1751 p->localName=name;
1752}

References name(), and p.

◆ setName()

void DefinitionImpl::setName ( const QCString & name)

Definition at line 276 of file definition.cpp.

277{
278 if (name.isEmpty()) return;
279 p->name = name;
280 p->isAnonymous = p->name.isEmpty() ||
281 p->name.at(0)=='@' ||
282 p->name.find("::@")!=-1;
283}

References name(), and p.

Referenced by DefinitionImpl().

◆ setOuterScope()

void DefinitionImpl::setOuterScope ( Definition * d)

Definition at line 1256 of file definition.cpp.

1257{
1258 std::lock_guard<std::recursive_mutex> lock(g_qualifiedNameMutex);
1259 //printf("%s::setOuterScope(%s)\n",qPrint(name()),d?qPrint(d->name()):"<none>");
1260 Definition *outerScope = p->outerScope;
1261 bool found=false;
1262 // make sure that we are not creating a recursive scope relation.
1263 while (outerScope && !found)
1264 {
1265 found = (outerScope==d);
1266 outerScope = outerScope->getOuterScope();
1267 }
1268 if (!found)
1269 {
1270 p->qualifiedName.clear(); // flush cached scope name
1271 p->outerScope = d;
1272 }
1273 p->hidden = p->hidden || d->isHidden();
1274 assert(p->def!=p->outerScope);
1275}
virtual bool isHidden() const =0
virtual Definition * getOuterScope() const =0
bool found
Definition util.cpp:984

References found, g_qualifiedNameMutex, Definition::getOuterScope(), Definition::isHidden(), and p.

◆ setReference()

void DefinitionImpl::setReference ( const QCString & r)

Definition at line 1724 of file definition.cpp.

1725{
1726 p->ref=r;
1727}

References p.

◆ setRefItems()

void DefinitionImpl::setRefItems ( const RefItemVector & sli)

Definition at line 1287 of file definition.cpp.

1288{
1289 p->xrefListItems.insert(p->xrefListItems.end(), sli.cbegin(), sli.cend());
1290}

References p.

◆ symbolName()

QCString DefinitionImpl::symbolName ( ) const

Definition at line 1459 of file definition.cpp.

1460{
1461 return p->symbolName;
1462}

References p.

Referenced by addToMap().

◆ writeDocAnchorsToTagFile()

void DefinitionImpl::writeDocAnchorsToTagFile ( TextStream & tagFile) const

Definition at line 338 of file definition.cpp.

339{
340 if (!p->sectionRefs.empty())
341 {
342 //printf("%s: writeDocAnchorsToTagFile(%d)\n",qPrint(name()),p->sectionRef.size());
343 for (const SectionInfo *si : p->sectionRefs)
344 {
345 if (!si->generated() && si->ref().isEmpty() && !AnchorGenerator::instance().isGenerated(si->label().str()))
346 {
347 //printf("write an entry!\n");
348 if (p->def->definitionType()==Definition::TypeMember) tagFile << " ";
349 QCString fn = si->fileName();
351 tagFile << " <docanchor file=\"" << fn << "\"";
352 if (!si->title().isEmpty())
353 {
354 tagFile << " title=\"" << convertToXML(si->title()) << "\"";
355 }
356 tagFile << ">" << si->label() << "</docanchor>\n";
357 }
358 }
359 }
360}
bool isGenerated(const std::string &anchor) const
Returns true iff anchor is one of the generated anchors.
Definition anchor.cpp:128
static AnchorGenerator & instance()
Returns the singleton instance.
Definition anchor.cpp:38
QCString ref() const
Definition section.h:71
QCString fileName() const
Definition section.h:73
bool generated() const
Definition section.h:74
QCString title() const
Definition section.h:69
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:4421

References addHtmlExtensionIfMissing(), convertToXML(), SectionInfo::fileName(), SectionInfo::generated(), AnchorGenerator::instance(), QCString::isEmpty(), SectionInfo::label(), p, SectionInfo::ref(), QCString::str(), SectionInfo::title(), and Definition::TypeMember.

◆ writeInlineCode()

void DefinitionImpl::writeInlineCode ( OutputList & ol,
const QCString & scopeName ) const

Write code of this definition into the documentation

Definition at line 1014 of file definition.cpp.

1015{
1016 const MemberDef *thisMd = nullptr;
1017 if (p->def->definitionType()==Definition::TypeMember)
1018 {
1019 thisMd = toMemberDef(p->def);
1020 }
1021 bool inlineSources = thisMd && thisMd->hasInlineSource();
1022 //printf("Source Fragment %s: %d-%d\n",qPrint(name()),
1023 // p->body->startLine,p->body->endLine);
1024 if (inlineSources && hasSources())
1025 {
1026 ol.pushGeneratorState();
1027 QCString codeFragment;
1028 bool isMacro = thisMd && thisMd->memberType()==MemberType::Define;
1029 int actualStart=p->body->startLine,actualEnd=p->body->endLine;
1030 if (readCodeFragment(p->body->fileDef->absFilePath(),isMacro,
1031 actualStart,actualEnd,codeFragment)
1032 )
1033 {
1034 //printf("Adding code fragment '%s' ext='%s' range=%d-%d\n",
1035 // qPrint(codeFragment),qPrint(p->defFileExt),actualStart,actualEnd);
1036 auto intf = Doxygen::parserManager->getCodeParser(p->defFileExt);
1037 intf->resetCodeParserState();
1038 //printf("Read:\n'%s'\n\n",qPrint(codeFragment));
1039
1040 auto &codeOL = ol.codeGenerators();
1041 codeOL.startCodeFragment("DoxyCode");
1042 intf->parseCode(codeOL, // codeOutIntf
1043 scopeName, // scope
1044 codeFragment, // input
1045 p->lang, // lang
1046 Config_getBool(STRIP_CODE_COMMENTS),
1047 FALSE, // isExample
1048 QCString(), // exampleName
1049 p->body->fileDef, // fileDef
1050 actualStart, // startLine
1051 actualEnd, // endLine
1052 TRUE, // inlineFragment
1053 thisMd, // memberDef
1054 TRUE // show line numbers
1055 );
1056 codeOL.endCodeFragment("DoxyCode");
1057 }
1058 ol.popGeneratorState();
1059 }
1060}
bool hasSources() const
static ParserManager * parserManager
Definition doxygen.h:131
virtual bool hasInlineSource() const =0
virtual MemberType memberType() const =0
void startCodeFragment(const QCString &style)
Definition outputlist.h:278
const OutputCodeList & codeGenerators() const
Definition outputlist.h:357
void pushGeneratorState()
void popGeneratorState()
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:218
bool readCodeFragment(const QCString &fileName, bool isMacro, int &startLine, int &endLine, QCString &result)
Reads a fragment from file fileName starting with line startLine and ending with line endLine.

References OutputList::codeGenerators(), Config_getBool, Define, FALSE, MemberDef::hasInlineSource(), hasSources(), MemberDef::memberType(), p, Doxygen::parserManager, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), readCodeFragment(), OutputCodeList::startCodeFragment(), toMemberDef(), TRUE, and Definition::TypeMember.

◆ writeNavigationPath()

void DefinitionImpl::writeNavigationPath ( OutputList & ol) const

Definition at line 1430 of file definition.cpp.

1431{
1432 ol.pushGeneratorState();
1434
1435 QCString navPath;
1436 navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
1437 " <ul>\n";
1438 navPath += navigationPathAsString();
1439 navPath += " </ul>\n"
1440 "</div>\n";
1441 ol.writeNavigationPath(navPath);
1442
1443 ol.popGeneratorState();
1444}
QCString navigationPathAsString() const
void disableAllBut(OutputType o)
void writeNavigationPath(const QCString &s)
Definition outputlist.h:609

References OutputList::disableAllBut(), Html, navigationPathAsString(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), and OutputList::writeNavigationPath().

◆ writeQuickMemberLinks()

void DefinitionImpl::writeQuickMemberLinks ( OutputList & ,
const MemberDef *  ) const

Definition at line 1818 of file definition.cpp.

1819{
1820}

◆ writeSourceDef()

void DefinitionImpl::writeSourceDef ( OutputList & ol) const

Write a reference to the source code defining this definition

Definition at line 936 of file definition.cpp.

937{
938 //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
939 QCString fn = getSourceFileBase();
940 if (!fn.isEmpty())
941 {
942 QCString refText = theTranslator->trDefinedAtLineInSourceFile();
943 int lineMarkerPos = refText.find("@0");
944 int fileMarkerPos = refText.find("@1");
945 if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
946 {
947 QCString lineStr;
948 lineStr.sprintf("%d",p->body->defLine);
949 QCString anchorStr = getSourceAnchor();
950 ol.startParagraph("definition");
951 if (lineMarkerPos<fileMarkerPos) // line marker before file marker
952 {
953 // write text left from linePos marker
954 ol.parseText(refText.left(lineMarkerPos));
955 ol.writeObjectLink(QCString(),fn,anchorStr,lineStr);
956 // write text between markers
957 ol.parseText(refText.mid(lineMarkerPos+2,fileMarkerPos-lineMarkerPos-2));
958 // write file link
959 ol.writeObjectLink(QCString(),fn,QCString(),p->body->fileDef->name());
960 // write text right from file marker
961 ol.parseText(refText.right(refText.length()-static_cast<size_t>(fileMarkerPos)-2));
962 }
963 else // file marker before line marker
964 {
965 // write text left from file marker
966 ol.parseText(refText.left(fileMarkerPos));
967 // write file link
968 ol.writeObjectLink(QCString(),fn,QCString(),p->body->fileDef->name());
969 // write text between markers
970 ol.parseText(refText.mid(fileMarkerPos+2,lineMarkerPos-fileMarkerPos-2));
971 // write line link
972 ol.writeObjectLink(QCString(),fn,anchorStr,lineStr);
973 // write text right from linePos marker
974 ol.parseText(refText.right(refText.length()-static_cast<size_t>(lineMarkerPos)-2));
975 }
976 ol.endParagraph();
977 }
978 else
979 {
980 err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n");
981 }
982 }
983}
QCString getSourceFileBase() const
QCString getSourceAnchor() const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:226
QCString right(size_t len) const
Definition qcstring.h:219
QCString & sprintf(const char *format,...)
Definition qcstring.cpp:29
QCString left(size_t len) const
Definition qcstring.h:214
virtual QCString trDefinedAtLineInSourceFile()=0

References OutputList::endParagraph(), err, QCString::find(), getSourceAnchor(), getSourceFileBase(), QCString::isEmpty(), QCString::left(), QCString::length(), QCString::mid(), p, OutputList::parseText(), QCString::right(), QCString::sprintf(), OutputList::startParagraph(), theTranslator, and OutputList::writeObjectLink().

◆ writeSourceReffedBy()

void DefinitionImpl::writeSourceReffedBy ( OutputList & ol,
const QCString & scopeName ) const

Definition at line 1148 of file definition.cpp.

1149{
1150 _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),p->sourceRefByDict,FALSE);
1151}
void _writeSourceRefList(OutputList &ol, const QCString &scopeName, const QCString &text, const std::unordered_map< std::string, MemberDef * > &members, bool) const
virtual QCString trReferencedBy()=0

References _writeSourceRefList(), FALSE, p, and theTranslator.

◆ writeSourceRefs()

void DefinitionImpl::writeSourceRefs ( OutputList & ol,
const QCString & scopeName ) const

Definition at line 1153 of file definition.cpp.

1154{
1155 _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),p->sourceRefsDict,TRUE);
1156}
virtual QCString trReferences()=0

References _writeSourceRefList(), p, theTranslator, and TRUE.

◆ writeSummaryLinks()

void DefinitionImpl::writeSummaryLinks ( OutputList & ) const

Definition at line 1822 of file definition.cpp.

1823{
1824}

◆ writeToc()

void DefinitionImpl::writeToc ( OutputList & ol,
const LocalToc & lt ) const

Definition at line 1446 of file definition.cpp.

1447{
1448 if (p->sectionRefs.empty()) return;
1449 ol.writeLocalToc(p->sectionRefs,localToc);
1450}
void writeLocalToc(const SectionRefs &refs, const LocalToc &lt)
Definition outputlist.h:743

References p, and OutputList::writeLocalToc().

◆ xrefListItems()

const RefItemVector & DefinitionImpl::xrefListItems ( ) const

Definition at line 1330 of file definition.cpp.

1331{
1332 return p->xrefListItems;
1333}

References p.

Member Data Documentation

◆ p

std::unique_ptr<Private> DefinitionImpl::p
private

Definition at line 143 of file definitionimpl.h.

Referenced by _getXRefListId(), _setBriefDescription(), _setInbodyDocumentation(), _setSymbolName(), _symbolName(), _writeSourceRefList(), addSectionsToDefinition(), addSourceReferencedBy(), addSourceReferences(), briefDescription(), briefDescriptionAsTooltip(), briefFile(), briefLine(), computeTooltip(), DefinitionImpl(), DefinitionImpl(), docFile(), docLine(), documentation(), getBodyDef(), getDefColumn(), getDefFileExtension(), getDefFileName(), getDefLine(), getEndBodyLine(), getLanguage(), getOuterScope(), getReference(), getReferencedByMembers(), getReferencesMembers(), getSectionRefs(), getSourceAnchor(), getSourceFileBase(), getStartBodyLine(), getStartDefLine(), hasDocumentation(), hasSections(), hasSourceReffedBy(), hasSourceRefs(), hasSources(), hasUserDocumentation(), id(), inbodyDocumentation(), inbodyFile(), inbodyLine(), isAnonymous(), isArtificial(), isExported(), isHidden(), isReference(), isVisible(), isVisibleInProject(), localName(), makePartOfGroup(), mergeReferencedBy(), mergeReferences(), mergeRefItems(), name(), navigationPathAsString(), operator=(), partOfGroups(), pathFragment(), qualifiedName(), setArtificial(), setBodyDef(), setBodySegment(), setDefFile(), setExported(), setHidden(), setId(), setLanguage(), setLocalName(), setName(), setOuterScope(), setReference(), setRefItems(), symbolName(), writeDocAnchorsToTagFile(), writeInlineCode(), writeSourceDef(), writeSourceReffedBy(), writeSourceRefs(), writeToc(), xrefListItems(), and ~DefinitionImpl().


The documentation for this class was generated from the following files: