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 RequirementRefsrequirementReferences () 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 setRequirementReferences (const RequirementRefs &rqli)
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
bool hasRequirementRefs () const
void writeRequirementRefs (OutputList &ol) const
void makePartOfGroup (GroupDef *gd)
void writeNavigationPath (OutputList &ol) const
QCString navigationPathAsString () const
void writeQuickMemberLinks (OutputList &, const MemberDef *) const
void writeSummaryLinks (OutputList &) const
void writePageNavigation (OutputList &ol) 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 250 of file definition.cpp.

254 : p(std::make_unique<Private>())
255{
256 setName(name);
257 p->def = def;
258 p->defLine = dl;
259 p->defColumn = dc;
260 p->init(df,name);
261 p->isSymbol = isSymbol;
262 if (isSymbol) addToMap(name,def);
263 _setBriefDescription(b,df,dl);
266 {
267 p->hidden = TRUE;
268 }
269}
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 286 of file definition.cpp.

287{
288 if (p->isSymbol)
289 {
290 removeFromMap(p->symbolName,p->def);
291 }
292}
static void removeFromMap(const QCString &name, Definition *d)

References p, and removeFromMap().

◆ DefinitionImpl() [2/3]

DefinitionImpl::DefinitionImpl ( const DefinitionImpl & d)

Definition at line 271 of file definition.cpp.

272 : p(std::make_unique<Private>(*d.p))
273{
274 if (p->isSymbol) addToMap(p->name,p->def);
275}

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 379 of file definition.cpp.

380{
381 uint8_t md5_sig[16];
382 char sigStr[33];
383 // to avoid mismatches due to differences in indenting, we first remove
384 // double whitespaces...
385 QCString docStr = doc.simplifyWhiteSpace();
386 MD5Buffer(docStr.data(),static_cast<unsigned int>(docStr.length()),md5_sig);
387 MD5SigToString(md5_sig,sigStr);
388 //printf("%s:_docsAlreadyAdded doc='%s' sig='%s' docSigs='%s'\n",
389 // qPrint(name()),qPrint(doc),qPrint(sigStr),qPrint(sigList));
390 if (sigList.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
391 {
392 sigList+=QCString(":")+sigStr;
393 return FALSE;
394 }
395 else
396 {
397 return TRUE;
398 }
399}
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:166
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
Definition qcstring.cpp:190
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:172

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

Referenced by _setBriefDescription(), _setDocumentation(), and _setInbodyDocumentation().

◆ _getXRefListId()

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

Definition at line 1370 of file definition.cpp.

1371{
1372 for (const RefItem *item : p->xrefListItems)
1373 {
1374 if (item->list()->listName()==listName)
1375 {
1376 return item->id();
1377 }
1378 }
1379 return -1;
1380}
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 454 of file definition.cpp.

455{
456 QCString brief = b;
457 brief = brief.stripWhiteSpace();
459 brief = brief.stripWhiteSpace();
460 if (brief.isEmpty()) return;
461 size_t bl = brief.length();
462 if (bl>0)
463 {
464 if (!theTranslator || theTranslator->needsPunctuation()) // add punctuation if needed
465 {
466 int c = brief.at(bl-1);
467 switch(c)
468 {
469 case '.': case '!': case '?': case ':': break;
470 default:
471 if (isUTF8CharUpperCase(brief.str(),0) && !lastUTF8CharIsMultibyte(brief.str())) brief+='.';
472 break;
473 }
474 }
475 }
476
477 if (!_docsAlreadyAdded(brief,p->briefSignatures))
478 {
479 if (p->brief && !p->brief->doc.isEmpty())
480 {
481 //printf("adding to details\n");
483 }
484 else
485 {
486 //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
487 if (!p->brief.has_value())
488 {
489 p->brief = std::make_optional<BriefInfo>();
490 }
491 BriefInfo &briefInfo = p->brief.value();
492 briefInfo.doc=brief;
493 if (briefLine!=-1)
494 {
495 briefInfo.file = briefFile;
496 briefInfo.line = briefLine;
497 }
498 else
499 {
500 briefInfo.file = briefFile;
501 briefInfo.line = 1;
502 }
503 }
504 }
505 else
506 {
507 //printf("do nothing!\n");
508 }
509}
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:593
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:260
const std::string & str() const
Definition qcstring.h:552
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:59
QCString doc
Definition definition.h:56
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:5033

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 401 of file definition.cpp.

403{
404 //printf("%s::setDocumentation(%s,%s,%d,%d)\n",qPrint(name()),d,docFile,docLine,stripWhiteSpace);
405 if (d.isEmpty()) return;
406 QCString doc = d;
407 if (stripWhiteSpace)
408 {
410 }
411 else // don't strip whitespace
412 {
413 doc=d;
414 }
415 if (!_docsAlreadyAdded(doc,p->docSignatures))
416 {
417 //printf("setting docs for %s: '%s'\n",qPrint(name()),qPrint(m_doc));
418 if (!p->details.has_value())
419 {
420 p->details = std::make_optional<DocInfo>();
421 }
422 DocInfo &details = p->details.value();
423 if (details.doc.isEmpty()) // fresh detailed description
424 {
425 details.doc = doc;
426 }
427 else if (atTop) // another detailed description, append it to the start
428 {
429 details.doc = doc+"\n\n"+details.doc;
430 }
431 else // another detailed description, append it to the end
432 {
433 details.doc += "\n\n"+doc;
434 }
435 if (docLine!=-1) // store location if valid
436 {
437 details.file = docFile;
438 details.line = docLine;
439 }
440 else
441 {
442 details.file = docFile;
443 details.line = 1;
444 }
445 }
446}
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:48
int line
Definition definition.h:49
QCString file
Definition definition.h:50

References _docsAlreadyAdded(), docFile(), docLine(), QCString::isEmpty(), p, stripLeadingAndTrailingEmptyLines(), and stripWhiteSpace().

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

◆ _setInbodyDocumentation()

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

Definition at line 517 of file definition.cpp.

518{
519 if (!_docsAlreadyAdded(doc,p->docSignatures))
520 {
521 if (!p->inbodyDocs.has_value())
522 {
523 p->inbodyDocs = std::make_optional<DocInfo>();
524 }
525 DocInfo &inbodyDocs = p->inbodyDocs.value();
526 if (inbodyDocs.doc.isEmpty()) // fresh inbody docs
527 {
528 inbodyDocs.doc = doc;
529 inbodyDocs.file = inbodyFile;
530 inbodyDocs.line = inbodyLine;
531 }
532 else // another inbody documentation fragment, append this to the end
533 {
534 inbodyDocs.doc += QCString("\n\n")+doc;
535 }
536 }
537}
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 1875 of file definition.cpp.

1876{
1877 p->symbolName=name;
1878}

References name(), and p.

◆ _symbolName()

QCString DefinitionImpl::_symbolName ( ) const

Definition at line 1880 of file definition.cpp.

1881{
1882 return p->symbolName;
1883}

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 1113 of file definition.cpp.

1116{
1117 if (!membersMap.empty())
1118 {
1119 auto members = refMapToVector(membersMap);
1120
1121 auto replaceFunc = [this,&members,scopeName,&ol](size_t entryIndex)
1122 {
1123 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1124 bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE);
1125 const MemberDef *md=members[entryIndex];
1126 if (md)
1127 {
1128 QCString scope=md->getScopeString();
1129 QCString name=md->name();
1130 //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),qPrint(scope),scopeName);
1131 if (!scope.isEmpty() && scope!=scopeName)
1132 {
1133 name.prepend(scope+getLanguageSpecificSeparator(p->lang));
1134 }
1135 if (!md->isObjCMethod() &&
1136 (md->isFunction() || md->isSlot() ||
1137 md->isPrototype() || md->isSignal()
1138 )
1139 )
1140 {
1141 name+="()";
1142 }
1143 if (sourceBrowser &&
1144 !(md->isLinkable() && !refLinkSource) &&
1145 md->getStartBodyLine()!=-1 &&
1146 md->getBodyDef()
1147 )
1148 {
1149 const int maxLineNrStr = 10;
1150 char anchorStr[maxLineNrStr];
1151 qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
1152 //printf("Write object link to %s\n",qPrint(md->getBodyDef()->getSourceFileBase()));
1153 ol.writeObjectLink(QCString(),md->getBodyDef()->getSourceFileBase(),anchorStr,name);
1154 }
1155 else if (md->isLinkable())
1156 {
1158 md->getOutputFileBase(),
1159 md->anchor(),name);
1160 }
1161 else
1162 {
1163 ol.docify(name);
1164 }
1165 }
1166 };
1167
1168 ol.startParagraph("reference");
1169 ol.parseText(text);
1170 ol.docify(" ");
1171 writeMarkerList(ol,
1172 theTranslator->trWriteList(static_cast<int>(members.size())).str(),
1173 members.size(),
1174 replaceFunc);
1175 ol.writeString(".");
1176 ol.endParagraph();
1177
1178 }
1179}
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:411
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void docify(const QCString &s)
Definition outputlist.h:437
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:407
void endParagraph()
Definition outputlist.h:409
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:5920
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1124

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 1278 of file definition.cpp.

1279{
1280 err("DefinitionImpl::addInnerCompound() called\n");
1281}
#define err(fmt,...)
Definition message.h:127

References err.

◆ addSectionsToDefinition()

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

Definition at line 319 of file definition.cpp.

320{
321 //printf("%s: addSectionsToDefinition(%d)\n",qPrint(name()),anchorList->count());
322 for (const SectionInfo *si : anchorList)
323 {
324 //printf("Add section '%s' to definition '%s'\n",
325 // qPrint(si->label()),qPrint(name()));
326 SectionManager &sm = SectionManager::instance();
327 SectionInfo *gsi=sm.find(si->label());
328 //printf("===== label=%s gsi=%p\n",qPrint(si->label()),(void*)gsi);
329 if (gsi==nullptr)
330 {
331 gsi = sm.add(*si);
332 }
333 if (p->sectionRefs.find(gsi->label())==nullptr)
334 {
335 p->sectionRefs.add(gsi);
336 }
337 gsi->setDefinition(p->def);
338 }
339}
const T * find(const std::string &key) const
Definition linkedmap.h:47
QCString label() const
Definition section.h:69
void setDefinition(Definition *d)
Definition section.h:83
SectionInfo * add(const SectionInfo &si)
Definition section.h:139
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:179

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 1257 of file definition.cpp.

1258{
1259 if (md)
1260 {
1261 p->sourceRefByDict.emplace(sourceRefName.str(),md);
1262 }
1263}

References p, and QCString::str().

◆ addSourceReferences()

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

Definition at line 1265 of file definition.cpp.

1266{
1267 if (md)
1268 {
1269 p->sourceRefsDict.emplace(sourceRefName.str(),md);
1270 }
1271}

References p, and QCString::str().

◆ briefDescription()

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

Definition at line 1646 of file definition.cpp.

1647{
1648 //printf("%s::briefDescription(%d)='%s'\n",qPrint(name()),abbr,p->brief?qPrint(p->brief->doc):"<none>");
1649 return p->brief ?
1650 (abbr ? abbreviate(p->brief->doc,p->def->displayName()) : p->brief->doc) :
1651 QCString("");
1652}
static QCString abbreviate(const QCString &s, const QCString &name)

References abbreviate(), and p.

Referenced by hasBriefDescription().

◆ briefDescriptionAsTooltip()

QCString DefinitionImpl::briefDescriptionAsTooltip ( ) const

Definition at line 1665 of file definition.cpp.

1666{
1667 return p->brief ? p->brief->tooltip : QCString();
1668}

References p.

◆ briefFile()

QCString DefinitionImpl::briefFile ( ) const

Definition at line 1675 of file definition.cpp.

1676{
1677 return p->brief && !p->brief->file.isEmpty() ? p->brief->file : QCString("<"+p->name+">");
1678}

References p.

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

◆ briefLine()

int DefinitionImpl::briefLine ( ) const

Definition at line 1670 of file definition.cpp.

1671{
1672 return p->brief ? p->brief->line : 1;
1673}

References p.

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

◆ computeTooltip()

void DefinitionImpl::computeTooltip ( )

Definition at line 1654 of file definition.cpp.

1655{
1656 if (p->brief && p->brief->tooltip.isEmpty() && !p->brief->doc.isEmpty())
1657 {
1658 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1659 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1660 p->brief->tooltip = parseCommentAsText(scope,md,
1661 p->brief->doc, p->brief->file, p->brief->line);
1662 }
1663}
MemberDef * toMemberDef(Definition *d)
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
Definition util.cpp:5372

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

◆ docFile()

QCString DefinitionImpl::docFile ( ) const

Definition at line 1591 of file definition.cpp.

1592{
1593 if (p->details && !p->details->file.isEmpty()) return p->details->file;
1594 else if (p->brief && !p->brief->file.isEmpty()) return p->brief->file;
1595 else return "<" + p->name + ">";
1596}

References p.

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

◆ docLine()

int DefinitionImpl::docLine ( ) const

Definition at line 1586 of file definition.cpp.

1587{
1588 return p->details ? p->details->line : p->brief ? p->brief->line : 1;
1589}

References p.

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

◆ documentation()

QCString DefinitionImpl::documentation ( ) const

Definition at line 1581 of file definition.cpp.

1582{
1583 return p->details ? p->details->doc : QCString("");
1584}

References p.

◆ externalReference()

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

Definition at line 1891 of file definition.cpp.

1892{
1893 QCString ref = getReference();
1894 if (!ref.isEmpty())
1895 {
1896 auto it = Doxygen::tagDestinationMap.find(ref.str());
1898 {
1899 QCString result(it->second);
1900 size_t l = result.length();
1901 if (!relPath.isEmpty() && l>0 && result.at(0)=='.')
1902 { // relative path -> prepend relPath.
1903 result.prepend(relPath);
1904 l+=relPath.length();
1905 }
1906 if (l>0 && result.at(l-1)!='/') result+='/';
1907 return result;
1908 }
1909 }
1910 return relPath;
1911}
QCString getReference() const
static StringMap tagDestinationMap
Definition doxygen.h:115
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 1273 of file definition.cpp.

1274{
1275 return nullptr;
1276}

◆ getBodyDef()

const FileDef * DefinitionImpl::getBodyDef ( ) const

Definition at line 1760 of file definition.cpp.

1761{
1762 return p->body ? p->body->fileDef : nullptr;
1763}

References p.

◆ getDefColumn()

int DefinitionImpl::getDefColumn ( ) const

Definition at line 1928 of file definition.cpp.

1929{
1930 return p->defColumn;
1931}

References p.

◆ getDefFileExtension()

QCString DefinitionImpl::getDefFileExtension ( ) const

Definition at line 1705 of file definition.cpp.

1706{
1707 return p->defFileExt;
1708}

References p.

◆ getDefFileName()

QCString DefinitionImpl::getDefFileName ( ) const

Definition at line 1700 of file definition.cpp.

1701{
1702 return p->defFileName;
1703}

References p.

◆ getDefLine()

int DefinitionImpl::getDefLine ( ) const

Definition at line 1923 of file definition.cpp.

1924{
1925 return p->defLine;
1926}

References p.

◆ getEndBodyLine()

int DefinitionImpl::getEndBodyLine ( ) const

Definition at line 1755 of file definition.cpp.

1756{
1757 return p->body ? p->body->endLine : -1;
1758}

References p.

◆ getLanguage()

SrcLangExt DefinitionImpl::getLanguage ( ) const

Definition at line 1844 of file definition.cpp.

1845{
1846 return p->lang;
1847}

References p.

◆ getOuterScope()

Definition * DefinitionImpl::getOuterScope ( ) const

Definition at line 1779 of file definition.cpp.

1780{
1781 return p->outerScope;
1782}

References p.

Referenced by navigationPathAsString().

◆ getReference()

QCString DefinitionImpl::getReference ( ) const

Definition at line 1735 of file definition.cpp.

1736{
1737 return p->ref;
1738}

References p.

Referenced by externalReference().

◆ getReferencedByMembers()

const MemberVector & DefinitionImpl::getReferencedByMembers ( ) const

Definition at line 1796 of file definition.cpp.

1797{
1798 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1799 if (p->referencedByMembers.empty() && !p->sourceRefByDict.empty())
1800 {
1801 p->referencedByMembers = refMapToVector(p->sourceRefByDict);
1802 }
1803 return p->referencedByMembers;
1804}
static std::mutex g_memberReferenceMutex

References g_memberReferenceMutex, p, and refMapToVector().

◆ getReferencesMembers()

const MemberVector & DefinitionImpl::getReferencesMembers ( ) const

Definition at line 1786 of file definition.cpp.

1787{
1788 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1789 if (p->referencesMembers.empty() && !p->sourceRefsDict.empty())
1790 {
1791 p->referencesMembers = refMapToVector(p->sourceRefsDict);
1792 }
1793 return p->referencesMembers;
1794}

References g_memberReferenceMutex, p, and refMapToVector().

◆ getSectionRefs()

const SectionRefs & DefinitionImpl::getSectionRefs ( ) const

Definition at line 1569 of file definition.cpp.

1570{
1571 return p->sectionRefs;
1572}

References p.

◆ getSourceAnchor()

QCString DefinitionImpl::getSourceAnchor ( ) const

Definition at line 950 of file definition.cpp.

951{
952 const int maxAnchorStrLen = 20;
953 char anchorStr[maxAnchorStrLen];
954 anchorStr[0]='\0';
955 if (p->body && p->body->startLine!=-1)
956 {
957 if (Htags::useHtags)
958 {
959 qsnprintf(anchorStr,maxAnchorStrLen,"L%d",p->body->defLine);
960 }
961 else
962 {
963 qsnprintf(anchorStr,maxAnchorStrLen,"l%05d",p->body->defLine);
964 }
965 }
966 return anchorStr;
967}
static bool useHtags
Definition htags.h:23

References p, qsnprintf, and Htags::useHtags.

Referenced by writeSourceDef().

◆ getSourceFileBase()

QCString DefinitionImpl::getSourceFileBase ( ) const

Definition at line 937 of file definition.cpp.

938{
939 ASSERT(p->def->definitionType()!=Definition::TypeFile); // file overloads this method
940 QCString fn;
941 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
942 if (sourceBrowser &&
943 p->body && p->body->startLine!=-1 && p->body->fileDef)
944 {
945 fn = p->body->fileDef->getSourceFileBase();
946 }
947 return fn;
948}
#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 1750 of file definition.cpp.

1751{
1752 return p->body ? p->body->startLine : -1;
1753}

References p.

Referenced by writeToc().

◆ getStartDefLine()

int DefinitionImpl::getStartDefLine ( ) const

Definition at line 1745 of file definition.cpp.

1746{
1747 return p->body ? p->body->defLine : -1;
1748}

References p.

◆ hasBriefDescription()

bool DefinitionImpl::hasBriefDescription ( ) const

Definition at line 1885 of file definition.cpp.

1886{
1887 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
1888 return !briefDescription().isEmpty() && briefMemberDesc;
1889}
QCString briefDescription(bool abbreviate=FALSE) const

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

◆ hasDocumentation()

bool DefinitionImpl::hasDocumentation ( ) const

Definition at line 1233 of file definition.cpp.

1234{
1235 bool extractAll = Config_getBool(EXTRACT_ALL);
1236 //bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1237 bool hasDocs =
1238 (p->details && !p->details->doc.isEmpty()) || // has detailed docs
1239 (p->brief && !p->brief->doc.isEmpty()) || // has brief description
1240 (p->inbodyDocs && !p->inbodyDocs->doc.isEmpty()) || // has inbody docs
1241 extractAll //|| // extract everything
1242 // (sourceBrowser && p->body &&
1243 // p->body->startLine!=-1 && p->body->fileDef)
1244 ; // link to definition
1245 return hasDocs;
1246}

References Config_getBool, and p.

◆ hasRequirementRefs()

bool DefinitionImpl::hasRequirementRefs ( ) const

Definition at line 1228 of file definition.cpp.

1229{
1230 return !p->requirementRefs.empty();
1231}

References p.

◆ hasSections()

bool DefinitionImpl::hasSections ( ) const

Definition at line 341 of file definition.cpp.

342{
343 //printf("DefinitionImpl::hasSections(%s) #sections=%zu\n",qPrint(name()), p->sectionRefs.size());
344 if (p->sectionRefs.empty()) return FALSE;
345 for (const SectionInfo *si : p->sectionRefs)
346 {
347 if (si->type().isSection())
348 {
349 return TRUE;
350 }
351 }
352 return FALSE;
353}
SectionType type() const
Definition section.h:71
constexpr bool isSection() const
Definition section.h:47

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

◆ hasSourceReffedBy()

bool DefinitionImpl::hasSourceReffedBy ( ) const

Definition at line 1218 of file definition.cpp.

1219{
1220 return !p->sourceRefByDict.empty();
1221}

References p.

◆ hasSourceRefs()

bool DefinitionImpl::hasSourceRefs ( ) const

Definition at line 1223 of file definition.cpp.

1224{
1225 return !p->sourceRefsDict.empty();
1226}

References p.

◆ hasSources()

bool DefinitionImpl::hasSources ( ) const

Definition at line 1040 of file definition.cpp.

1041{
1042 return p->body && p->body->startLine!=-1 &&
1043 p->body->endLine>=p->body->startLine &&
1044 p->body->fileDef;
1045}

References p.

Referenced by writeInlineCode().

◆ hasUserDocumentation()

bool DefinitionImpl::hasUserDocumentation ( ) const

Definition at line 1248 of file definition.cpp.

1249{
1250 bool hasDocs =
1251 (p->details && !p->details->doc.isEmpty()) ||
1252 (p->brief && !p->brief->doc.isEmpty()) ||
1253 (p->inbodyDocs && !p->inbodyDocs->doc.isEmpty());
1254 return hasDocs;
1255}

References p.

◆ id()

QCString DefinitionImpl::id ( ) const

Definition at line 314 of file definition.cpp.

315{
316 return p->id;
317}

References p.

Referenced by setId().

◆ inbodyDocumentation()

QCString DefinitionImpl::inbodyDocumentation ( ) const

Definition at line 1682 of file definition.cpp.

1683{
1684 return p->inbodyDocs ? p->inbodyDocs->doc : QCString("");
1685}

References p.

◆ inbodyFile()

QCString DefinitionImpl::inbodyFile ( ) const

Definition at line 1692 of file definition.cpp.

1693{
1694 return p->inbodyDocs && !p->inbodyDocs->file.isEmpty() ? p->inbodyDocs->file : QCString("<"+p->name+">");
1695}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ inbodyLine()

int DefinitionImpl::inbodyLine ( ) const

Definition at line 1687 of file definition.cpp.

1688{
1689 return p->inbodyDocs ? p->inbodyDocs->line : 1;
1690}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ isAnonymous()

bool DefinitionImpl::isAnonymous ( ) const

Definition at line 1918 of file definition.cpp.

1919{
1920 return p->isAnonymous;
1921}

References p.

◆ isArtificial()

bool DefinitionImpl::isArtificial ( ) const

Definition at line 1725 of file definition.cpp.

1726{
1727 return p->isArtificial;
1728}

References p.

◆ isExported()

bool DefinitionImpl::isExported ( ) const

Definition at line 1730 of file definition.cpp.

1731{
1732 return p->isExported;
1733}

References p.

◆ isHidden()

bool DefinitionImpl::isHidden ( ) const

Definition at line 1710 of file definition.cpp.

1711{
1712 return p->hidden;
1713}

References p.

◆ isLinkableViaGroup()

bool DefinitionImpl::isLinkableViaGroup ( ) const

Definition at line 1770 of file definition.cpp.

1771{
1772 for (const auto &gd : partOfGroups())
1773 {
1774 if (gd->isLinkable()) return true;
1775 }
1776 return false;
1777}
const GroupList & partOfGroups() const

References partOfGroups().

◆ isReference()

bool DefinitionImpl::isReference ( ) const

Definition at line 1740 of file definition.cpp.

1741{
1742 return !p->ref.isEmpty();
1743}

References p.

◆ isVisible()

bool DefinitionImpl::isVisible ( ) const

Definition at line 1720 of file definition.cpp.

1721{
1722 return p->def->isLinkable() && !p->hidden;
1723}

References p.

◆ isVisibleInProject()

bool DefinitionImpl::isVisibleInProject ( ) const

Definition at line 1715 of file definition.cpp.

1716{
1717 return p->def->isLinkableInProject() && !p->hidden;
1718}

References p.

◆ localName()

const QCString & DefinitionImpl::localName ( ) const

Definition at line 1324 of file definition.cpp.

1325{
1326 return p->localName;
1327}

References p.

Referenced by navigationPathAsString().

◆ makePartOfGroup()

void DefinitionImpl::makePartOfGroup ( GroupDef * gd)

Definition at line 1329 of file definition.cpp.

1330{
1331 p->partOfGroups.push_back(gd);
1332}

References p.

◆ mergeReferencedBy()

void DefinitionImpl::mergeReferencedBy ( const Definition * other)

Definition at line 1822 of file definition.cpp.

1823{
1824 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1825 if (defImpl)
1826 {
1827 for (const auto &kv : defImpl->p->sourceRefByDict)
1828 {
1829 auto it = p->sourceRefByDict.find(kv.first);
1830 if (it != p->sourceRefByDict.end())
1831 {
1832 p->sourceRefByDict.emplace(kv.first,kv.second);
1833 }
1834 }
1835 }
1836}
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 1806 of file definition.cpp.

1807{
1808 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1809 if (defImpl)
1810 {
1811 for (const auto &kv : defImpl->p->sourceRefsDict)
1812 {
1813 auto it = p->sourceRefsDict.find(kv.first);
1814 if (it != p->sourceRefsDict.end())
1815 {
1816 p->sourceRefsDict.insert(kv);
1817 }
1818 }
1819 }
1820}

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

◆ mergeRefItems()

void DefinitionImpl::mergeRefItems ( Definition * d)

Definition at line 1344 of file definition.cpp.

1345{
1346 auto otherXrefList = d->xrefListItems();
1347
1348 // append vectors
1349 p->xrefListItems.reserve(p->xrefListItems.size()+otherXrefList.size());
1350 p->xrefListItems.insert (p->xrefListItems.end(),
1351 otherXrefList.begin(),otherXrefList.end());
1352
1353 // sort results on itemId
1354 std::stable_sort(p->xrefListItems.begin(),p->xrefListItems.end(),
1355 [](RefItem *left,RefItem *right)
1356 { return left->id() <right->id() ||
1357 (left->id()==right->id() &&
1358 left->list()->listName() < right->list()->listName());
1359 });
1360
1361 // filter out duplicates
1362 auto last = std::unique(p->xrefListItems.begin(),p->xrefListItems.end(),
1363 [](const RefItem *left,const RefItem *right)
1364 { return left->id()==right->id() &&
1365 left->list()->listName()==right->list()->listName();
1366 });
1367 p->xrefListItems.erase(last, p->xrefListItems.end());
1368}
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 1430 of file definition.cpp.

1431{
1432 QCString result;
1433 Definition *outerScope = getOuterScope();
1434 QCString locName = localName();
1435 if (outerScope && outerScope!=Doxygen::globalScope)
1436 {
1437 result+=outerScope->navigationPathAsString();
1438 }
1439 else if (p->def->definitionType()==Definition::TypeFile &&
1440 toFileDef(p->def)->getDirDef())
1441 {
1442 result+=(toFileDef(p->def))->getDirDef()->navigationPathAsString();
1443 }
1444 result+="<li class=\"navelem\">";
1445 if (p->def->isLinkableInProject())
1446 {
1447 QCString fn = p->def->getOutputFileBase();
1449 if (p->def->definitionType()==Definition::TypeGroup &&
1450 !toGroupDef(p->def)->groupTitle().isEmpty())
1451 {
1452 QCString title = parseCommentAsHtml(p->def,nullptr,toGroupDef(p->def)->groupTitle(),
1453 p->def->getDefFileName(),p->def->getDefLine());
1454 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1455 }
1456 else if (p->def->definitionType()==Definition::TypePage &&
1457 toPageDef(p->def)->hasTitle())
1458 {
1459 QCString title = parseCommentAsHtml(p->def,nullptr,toPageDef(p->def)->title(),
1460 p->def->getDefFileName(),p->def->getDefLine());
1461 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1462 }
1463 else if (p->def->definitionType()==Definition::TypeClass)
1464 {
1465 QCString name = toClassDef(p->def)->className();
1466 if (name.endsWith("-p"))
1467 {
1468 name = name.left(name.length()-2);
1469 }
1470 result+="<a href=\"$relpath^"+fn;
1471 if (!p->def->anchor().isEmpty()) result+="#"+p->def->anchor();
1472 result+="\">"+convertToHtml(name)+"</a>";
1473 }
1474 else
1475 {
1476 result+="<a href=\"$relpath^"+fn+"\">"+
1477 convertToHtml(locName)+"</a>";
1478 }
1479 }
1480 else
1481 {
1482 result+="<b>"+convertToHtml(locName)+"</b>";
1483 }
1484 result+="</li>";
1485 return result;
1486}
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:120
virtual DirDef * getDirDef() const =0
virtual QCString groupTitle() const =0
virtual bool hasTitle() const =0
virtual QCString title() const =0
ClassDef * toClassDef(Definition *d)
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1966
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:502
QCString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const QCString &doc, const QCString &fileName, int lineNr)
Definition util.cpp:5428
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:3967
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4925

References addHtmlExtensionIfMissing(), ClassDef::className(), convertToHtml(), getOuterScope(), Doxygen::globalScope, localName(), name(), Definition::navigationPathAsString(), p, parseCommentAsHtml(), 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 277 of file definition.cpp.

278{
279 if (this!=&other)
280 {
281 p = std::make_unique<Private>(*other.p);
282 }
283 return *this;
284}

References DefinitionImpl(), and p.

◆ operator=() [2/2]

◆ partOfGroups()

const GroupList & DefinitionImpl::partOfGroups ( ) const

Definition at line 1765 of file definition.cpp.

1766{
1767 return p->partOfGroups;
1768}

References p.

Referenced by isLinkableViaGroup().

◆ pathFragment()

QCString DefinitionImpl::pathFragment ( ) const

Definition at line 1392 of file definition.cpp.

1393{
1394 QCString result;
1395 if (p->outerScope && p->outerScope!=Doxygen::globalScope)
1396 {
1397 result = p->outerScope->pathFragment();
1398 }
1399 if (p->def->isLinkable())
1400 {
1401 if (!result.isEmpty()) result+="/";
1402 if (p->def->definitionType()==Definition::TypeGroup &&
1403 !toGroupDef(p->def)->groupTitle().isEmpty())
1404 {
1405 result+=toGroupDef(p->def)->groupTitle();
1406 }
1407 else if (p->def->definitionType()==Definition::TypePage &&
1408 toPageDef(p->def)->hasTitle())
1409 {
1410 result+=toPageDef(p->def)->title();
1411 }
1412 else
1413 {
1414 result+=p->localName;
1415 }
1416 }
1417 else
1418 {
1419 result+=p->localName;
1420 }
1421 return result;
1422}

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 1283 of file definition.cpp.

1284{
1285 std::call_once(p->qualifiedNameOnce.flag, [this]()
1286 {
1287 //printf("start %s::qualifiedName() localName=%s\n",qPrint(name()),qPrint(p->localName));
1288 if (p->outerScope==nullptr || p->outerScope->name()=="<globalScope>")
1289 {
1290 p->qualifiedName = (p->localName=="<globalScope>") ? QCString() : p->localName;
1291 }
1292 else
1293 {
1294 p->qualifiedName = p->outerScope->qualifiedName()+
1295 getLanguageSpecificSeparator(getLanguage())+
1296 p->localName;
1297 }
1298 //printf("end %s::qualifiedName()=%s\n",qPrint(name()),qPrint(p->qualifiedName));
1299 });
1300 return p->qualifiedName;
1301}

References p.

◆ requirementReferences()

const RequirementRefs & DefinitionImpl::requirementReferences ( ) const

Definition at line 1387 of file definition.cpp.

1388{
1389 return p->requirementRefs;
1390}

References p.

◆ setArtificial()

void DefinitionImpl::setArtificial ( bool b)

Definition at line 1854 of file definition.cpp.

1855{
1856 p->isArtificial = b;
1857}

References p.

◆ setBodyDef()

void DefinitionImpl::setBodyDef ( const FileDef * fd)

Definition at line 1031 of file definition.cpp.

1032{
1033 if (!p->body.has_value())
1034 {
1035 p->body = std::make_optional<BodyInfo>();
1036 }
1037 p->body.value().fileDef=fd;
1038}

References p.

◆ setBodySegment()

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

Definition at line 1019 of file definition.cpp.

1020{
1021 if (!p->body.has_value())
1022 {
1023 p->body = std::make_optional<BodyInfo>();
1024 }
1025 BodyInfo &body = p->body.value();
1026 body.defLine = defLine;
1027 body.startLine = bls;
1028 body.endLine = ble;
1029}
int startLine
line number of the start of the definition's body
Definition definition.h:66
int endLine
line number of the end of the definition's body
Definition definition.h:67
int defLine
line number of the start of the definition
Definition definition.h:65

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

◆ setBriefDescription()

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

Definition at line 511 of file definition.cpp.

512{
513 if (b.isEmpty()) return;
515}

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

◆ setDefFile()

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

Definition at line 160 of file definition.cpp.

161{
162 p->setDefFileName(df);
163 p->defLine = defLine;
164 p->defColumn = defCol;
165}

References p.

◆ setDocumentation()

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

Definition at line 448 of file definition.cpp.

449{
450 if (d.isEmpty()) return;
452}

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

◆ setExported()

void DefinitionImpl::setExported ( bool b)

Definition at line 1859 of file definition.cpp.

1860{
1861 p->isExported = b;
1862}

References p.

◆ setHidden()

void DefinitionImpl::setHidden ( bool b)

Definition at line 1849 of file definition.cpp.

1850{
1851 p->hidden = p->hidden || b;
1852}

References p.

◆ setId()

void DefinitionImpl::setId ( const QCString & name)

Definition at line 303 of file definition.cpp.

304{
305 if (id.isEmpty()) return;
306 p->id = id;
308 {
309 //printf("DefinitionImpl::setId '%s'->'%s'\n",id,qPrint(p->name));
310 Doxygen::clangUsrMap->emplace(id.str(),p->def);
311 }
312}
QCString id() const
static ClangUsrMap * clangUsrMap
Definition doxygen.h:125

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

◆ setInbodyDocumentation()

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

Definition at line 539 of file definition.cpp.

540{
541 if (d.isEmpty()) return;
543}
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 1869 of file definition.cpp.

1870{
1871 p->lang=lang;
1872}

References p.

◆ setLocalName()

void DefinitionImpl::setLocalName ( const QCString & name)

Definition at line 1864 of file definition.cpp.

1865{
1866 p->localName=name;
1867}

References name(), and p.

◆ setName()

void DefinitionImpl::setName ( const QCString & name)

Definition at line 294 of file definition.cpp.

295{
296 if (name.isEmpty()) return;
297 p->name = name;
298 p->isAnonymous = p->name.isEmpty() ||
299 p->name.at(0)=='@' ||
300 p->name.find("::@")!=-1;
301}

References name(), and p.

Referenced by DefinitionImpl().

◆ setOuterScope()

void DefinitionImpl::setOuterScope ( Definition * d)

Definition at line 1303 of file definition.cpp.

1304{
1305 //printf("%s::setOuterScope(%s)\n",qPrint(name()),d?qPrint(d->name()):"<none>");
1306 Definition *outerScope = p->outerScope;
1307 bool found=false;
1308 // make sure that we are not creating a recursive scope relation.
1309 while (outerScope && !found)
1310 {
1311 found = (outerScope==d);
1312 outerScope = outerScope->getOuterScope();
1313 }
1314 if (!found)
1315 {
1316 p->qualifiedName.clear(); // flush cached scope name
1317 p->qualifiedNameOnce.reset();
1318 p->outerScope = d;
1319 }
1320 p->hidden = p->hidden || d->isHidden();
1321 assert(p->def!=p->outerScope);
1322}
virtual bool isHidden() const =0
virtual Definition * getOuterScope() const =0

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

◆ setReference()

void DefinitionImpl::setReference ( const QCString & r)

Definition at line 1839 of file definition.cpp.

1840{
1841 p->ref=r;
1842}

References p.

◆ setRefItems()

void DefinitionImpl::setRefItems ( const RefItemVector & sli)

Definition at line 1334 of file definition.cpp.

1335{
1336 p->xrefListItems.insert(p->xrefListItems.end(), sli.cbegin(), sli.cend());
1337}

References p.

◆ setRequirementReferences()

void DefinitionImpl::setRequirementReferences ( const RequirementRefs & rqli)

Definition at line 1339 of file definition.cpp.

1340{
1341 p->requirementRefs.insert(p->requirementRefs.end(), rqli.cbegin(), rqli.cend());
1342}

References p.

◆ symbolName()

QCString DefinitionImpl::symbolName ( ) const

Definition at line 1574 of file definition.cpp.

1575{
1576 return p->symbolName;
1577}

References p.

Referenced by addToMap().

◆ writeDocAnchorsToTagFile()

void DefinitionImpl::writeDocAnchorsToTagFile ( TextStream & tagFile) const

Definition at line 355 of file definition.cpp.

356{
357 if (!p->sectionRefs.empty())
358 {
359 //printf("%s: writeDocAnchorsToTagFile(%d)\n",qPrint(name()),p->sectionRef.size());
360 for (const SectionInfo *si : p->sectionRefs)
361 {
362 if (!si->generated() && si->ref().isEmpty() && !AnchorGenerator::instance().isGenerated(si->label().str()))
363 {
364 //printf("write an entry!\n");
365 if (p->def->definitionType()==Definition::TypeMember) tagFile << " ";
366 QCString fn = si->fileName();
368 tagFile << " <docanchor file=\"" << fn << "\"";
369 if (!si->title().isEmpty())
370 {
371 tagFile << " title=\"" << convertToXML(si->title()) << "\"";
372 }
373 tagFile << ">" << si->label() << "</docanchor>\n";
374 }
375 }
376 }
377}
bool isGenerated(const std::string &anchor) const
Returns true iff anchor is one of the generated anchors.
Definition anchor.cpp:122
static AnchorGenerator & instance()
Returns the singleton instance.
Definition anchor.cpp:38
QCString ref() const
Definition section.h:72
QCString fileName() const
Definition section.h:74
bool generated() const
Definition section.h:75
QCString title() const
Definition section.h:70
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3916

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 1048 of file definition.cpp.

1049{
1050 const MemberDef *thisMd = nullptr;
1051 if (p->def->definitionType()==Definition::TypeMember)
1052 {
1053 thisMd = toMemberDef(p->def);
1054 }
1055 bool inlineSources = thisMd && thisMd->hasInlineSource();
1056 //printf("Source Fragment %s: %d-%d\n",qPrint(name()),
1057 // p->body->startLine,p->body->endLine);
1058 if (inlineSources && hasSources())
1059 {
1060 ol.pushGeneratorState();
1061 QCString codeFragment;
1062 bool isMacro = thisMd && thisMd->memberType()==MemberType::Define;
1063 int actualStart=p->body->startLine,actualEnd=p->body->endLine;
1064 if (readCodeFragment(p->body->fileDef->absFilePath(),isMacro,
1065 actualStart,actualEnd,codeFragment)
1066 )
1067 {
1068 //printf("Adding code fragment '%s' ext='%s' range=%d-%d\n",
1069 // qPrint(codeFragment),qPrint(p->defFileExt),actualStart,actualEnd);
1070 auto intf = Doxygen::parserManager->getCodeParser(p->defFileExt);
1071 intf->resetCodeParserState();
1072 //printf("Read:\n'%s'\n\n",qPrint(codeFragment));
1073
1074 auto &codeOL = ol.codeGenerators();
1075 codeOL.startCodeFragment("DoxyCode");
1076 size_t indent = 0;
1077 intf->parseCode(codeOL, // codeOutIntf
1078 scopeName, // scope
1079 detab(codeFragment,indent), // input
1080 p->lang, // lang
1081 Config_getBool(STRIP_CODE_COMMENTS),
1082 CodeParserOptions()
1083 .setFileDef(p->body->fileDef)
1084 .setStartLine(actualStart)
1085 .setEndLine(actualEnd)
1086 .setInlineFragment(true)
1087 .setMemberDef(thisMd)
1088 );
1089 codeOL.endCodeFragment("DoxyCode");
1090 }
1091 ol.popGeneratorState();
1092 }
1093}
bool hasSources() const
static ParserManager * parserManager
Definition doxygen.h:128
virtual bool hasInlineSource() const =0
virtual MemberType memberType() const =0
void startCodeFragment(const QCString &style)
Definition outputlist.h:279
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
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:254
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.
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6743

References OutputList::codeGenerators(), Config_getBool, Define, detab(), MemberDef::hasInlineSource(), hasSources(), MemberDef::memberType(), p, Doxygen::parserManager, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), readCodeFragment(), CodeParserOptions::setEndLine(), CodeParserOptions::setInlineFragment(), CodeParserOptions::setMemberDef(), CodeParserOptions::setStartLine(), OutputCodeList::startCodeFragment(), toMemberDef(), and Definition::TypeMember.

◆ writeNavigationPath()

void DefinitionImpl::writeNavigationPath ( OutputList & ol) const

Definition at line 1489 of file definition.cpp.

1490{
1491 ol.pushGeneratorState();
1493
1494 QCString navPath;
1495 navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
1496 " <ul>\n";
1497 navPath += navigationPathAsString();
1498 navPath += " </ul>\n"
1499 "</div>\n";
1500 ol.writeNavigationPath(navPath);
1501
1502 ol.popGeneratorState();
1503}
QCString navigationPathAsString() const
void disableAllBut(OutputType o)
void writeNavigationPath(const QCString &s)
Definition outputlist.h:608

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

◆ writePageNavigation()

void DefinitionImpl::writePageNavigation ( OutputList & ol) const

Definition at line 1941 of file definition.cpp.

1942{
1943}

◆ writeQuickMemberLinks()

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

Definition at line 1933 of file definition.cpp.

1934{
1935}

◆ writeRequirementRefs()

void DefinitionImpl::writeRequirementRefs ( OutputList & ol) const

Definition at line 1191 of file definition.cpp.

1192{
1193 if (!Config_getBool(GENERATE_REQUIREMENTS)) return;
1194 auto writeRefsForType = [&ol](const RequirementRefs &refs,const char *parType,const QCString &text)
1195 {
1196 size_t num = refs.size();
1197 if (num>0)
1198 {
1199 ol.startParagraph(parType);
1200 ol.parseText(text);
1201 ol.docify(" ");
1202 writeMarkerList(ol,
1203 theTranslator->trWriteList(static_cast<int>(num)).str(), num,
1204 [&refs,&ol](size_t entryIndex) { RequirementManager::instance().writeRef(ol,refs[entryIndex]); }
1205 );
1206 ol.writeString(".");
1207 ol.endParagraph();
1208 }
1209 };
1210
1211 RequirementRefs satisfiesRefs;
1212 RequirementRefs verifiesRefs;
1213 splitRequirementRefs(p->requirementRefs,satisfiesRefs,verifiesRefs);
1214 writeRefsForType(satisfiesRefs,"satisfies",theTranslator->trSatisfies(satisfiesRefs.size()==1));
1215 writeRefsForType(verifiesRefs, "verifies", theTranslator->trVerifies(verifiesRefs.size()==1));
1216}
virtual QCString trSatisfies(bool singular)=0
virtual QCString trVerifies(bool singular)=0
void splitRequirementRefs(const RequirementRefs &inputReqRefs, RequirementRefs &satisfiesRefs, RequirementRefs &verifiesRefs)
std::vector< RequirementRef > RequirementRefs
List of requirement references.
Definition requirement.h:56

References Config_getBool, OutputList::docify(), OutputList::endParagraph(), p, OutputList::parseText(), splitRequirementRefs(), OutputList::startParagraph(), theTranslator, writeMarkerList(), and OutputList::writeString().

◆ writeSourceDef()

void DefinitionImpl::writeSourceDef ( OutputList & ol) const

Write a reference to the source code defining this definition

Definition at line 970 of file definition.cpp.

971{
972 //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
973 QCString fn = getSourceFileBase();
974 if (!fn.isEmpty())
975 {
976 QCString refText = theTranslator->trDefinedAtLineInSourceFile();
977 int lineMarkerPos = refText.find("@0");
978 int fileMarkerPos = refText.find("@1");
979 if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
980 {
981 QCString lineStr;
982 lineStr.sprintf("%d",p->body->defLine);
983 QCString anchorStr = getSourceAnchor();
984 ol.startParagraph("definition");
985 if (lineMarkerPos<fileMarkerPos) // line marker before file marker
986 {
987 // write text left from linePos marker
988 ol.parseText(refText.left(lineMarkerPos));
989 ol.writeObjectLink(QCString(),fn,anchorStr,lineStr);
990 // write text between markers
991 ol.parseText(refText.mid(lineMarkerPos+2,fileMarkerPos-lineMarkerPos-2));
992 // write file link
993 ol.writeObjectLink(QCString(),fn,QCString(),p->body->fileDef->name());
994 // write text right from file marker
995 ol.parseText(refText.right(refText.length()-static_cast<size_t>(fileMarkerPos)-2));
996 }
997 else // file marker before line marker
998 {
999 // write text left from file marker
1000 ol.parseText(refText.left(fileMarkerPos));
1001 // write file link
1002 ol.writeObjectLink(QCString(),fn,QCString(),p->body->fileDef->name());
1003 // write text between markers
1004 ol.parseText(refText.mid(fileMarkerPos+2,lineMarkerPos-fileMarkerPos-2));
1005 // write line link
1006 ol.writeObjectLink(QCString(),fn,anchorStr,lineStr);
1007 // write text right from linePos marker
1008 ol.parseText(refText.right(refText.length()-static_cast<size_t>(lineMarkerPos)-2));
1009 }
1010 ol.endParagraph();
1011 }
1012 else
1013 {
1014 err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n");
1015 }
1016 }
1017}
QCString getSourceFileBase() const
QCString getSourceAnchor() const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
QCString right(size_t len) const
Definition qcstring.h:234
QCString & sprintf(const char *format,...)
Definition qcstring.cpp:29
QCString left(size_t len) const
Definition qcstring.h:229
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 1181 of file definition.cpp.

1182{
1183 _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),p->sourceRefByDict,FALSE);
1184}
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 1186 of file definition.cpp.

1187{
1188 _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),p->sourceRefsDict,TRUE);
1189}
virtual QCString trReferences()=0

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

◆ writeSummaryLinks()

void DefinitionImpl::writeSummaryLinks ( OutputList & ) const

Definition at line 1937 of file definition.cpp.

1938{
1939}

◆ writeToc()

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

Definition at line 1505 of file definition.cpp.

1506{
1507 // first check if we have anything to show or if the outline is already shown on the outline panel
1508 if (p->sectionRefs.empty() || (Config_getBool(GENERATE_TREEVIEW) && Config_getBool(PAGE_OUTLINE_PANEL))) return;
1509 // generate the embedded toc
1510 //ol.writeLocalToc(p->sectionRefs,localToc);
1511
1512 auto generateTocEntries = [this,&ol]()
1513 {
1514 for (const SectionInfo *si : p->sectionRefs)
1515 {
1516 if (si->type().isSection())
1517 {
1518 ol.startTocEntry(si);
1519 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1520 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1521 QCString docTitle = si->title();
1522 if (docTitle.isEmpty()) docTitle = si->label();
1523 ol.generateDoc(docFile(),
1525 scope,
1526 md,
1527 docTitle,
1528 DocOptions()
1529 .setIndexWords(true)
1530 .setSingleLine(true)
1531 .setSectionLevel(si->type().level())
1532 );
1533 ol.endTocEntry(si);
1534 }
1535 }
1536 };
1537
1538 if (localToc.isHtmlEnabled())
1539 {
1540 ol.pushGeneratorState();
1542 ol.startLocalToc(localToc.htmlLevel());
1543 generateTocEntries();
1544 ol.endLocalToc();
1545 ol.popGeneratorState();
1546 }
1547 if (localToc.isDocbookEnabled())
1548 {
1549 ol.pushGeneratorState();
1551 ol.startLocalToc(localToc.docbookLevel());
1552 generateTocEntries();
1553 ol.endLocalToc();
1554 ol.popGeneratorState();
1555 }
1556 if (localToc.isLatexEnabled())
1557 {
1558 ol.pushGeneratorState();
1560 ol.startLocalToc(localToc.latexLevel());
1561 // no gneerateTocEntries() needed for LaTeX
1562 ol.endLocalToc();
1563 ol.popGeneratorState();
1564 }
1565}
int getStartBodyLine() const
void startTocEntry(const SectionInfo *si)
Definition outputlist.h:748
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void endLocalToc()
Definition outputlist.h:746
void endTocEntry(const SectionInfo *si)
Definition outputlist.h:750
void startLocalToc(int level)
Definition outputlist.h:744
constexpr int level() const
Definition section.h:46

References Config_getBool, OutputList::disableAllBut(), Docbook, LocalToc::docbookLevel(), docFile(), OutputList::endLocalToc(), OutputList::endTocEntry(), OutputList::generateDoc(), getStartBodyLine(), Html, LocalToc::htmlLevel(), LocalToc::isDocbookEnabled(), QCString::isEmpty(), LocalToc::isHtmlEnabled(), LocalToc::isLatexEnabled(), SectionType::isSection(), SectionInfo::label(), Latex, LocalToc::latexLevel(), SectionType::level(), p, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startLocalToc(), OutputList::startTocEntry(), SectionInfo::title(), toMemberDef(), SectionInfo::type(), and Definition::TypeMember.

◆ xrefListItems()

const RefItemVector & DefinitionImpl::xrefListItems ( ) const

Definition at line 1382 of file definition.cpp.

1383{
1384 return p->xrefListItems;
1385}

References p.

Member Data Documentation

◆ p

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

Definition at line 148 of file definitionimpl.h.

Referenced by _getXRefListId(), _setBriefDescription(), _setDocumentation(), _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(), hasRequirementRefs(), 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(), requirementReferences(), setArtificial(), setBodyDef(), setBodySegment(), setDefFile(), setExported(), setHidden(), setId(), setLanguage(), setLocalName(), setName(), setOuterScope(), setReference(), setRefItems(), setRequirementReferences(), symbolName(), writeDocAnchorsToTagFile(), writeInlineCode(), writeRequirementRefs(), writeSourceDef(), writeSourceReffedBy(), writeSourceRefs(), writeToc(), xrefListItems(), and ~DefinitionImpl().


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