Doxygen
Loading...
Searching...
No Matches
namespacedef.h File Reference
#include <memory>
#include <unordered_set>
#include "definition.h"
#include "filedef.h"
#include "linkedmap.h"
#include "membergroup.h"
+ Include dependency graph for namespacedef.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  NamespaceLinkedMap
 
class  NamespaceLinkedRefMap
 
class  NamespaceDef
 An abstract interface of a namespace symbol. More...
 
class  NamespaceDefMutable
 

Typedefs

using NamespaceDefSet = std::unordered_set<const NamespaceDef*>
 

Functions

std::unique_ptr< NamespaceDefcreateNamespaceDef (const QCString &defFileName, int defLine, int defColumn, const QCString &name, const QCString &ref=QCString(), const QCString &refFile=QCString(), const QCString &type=QCString(), bool isPublished=false)
 Factory method to create new NamespaceDef instance.
 
std::unique_ptr< NamespaceDefcreateNamespaceDefAlias (const Definition *newScope, const NamespaceDef *nd)
 Factory method to create an alias of an existing namespace.
 
NamespaceDeftoNamespaceDef (Definition *d)
 
NamespaceDeftoNamespaceDef (DefinitionMutable *d)
 
const NamespaceDeftoNamespaceDef (const Definition *d)
 
NamespaceDefMutabletoNamespaceDefMutable (Definition *d)
 
void replaceNamespaceAliases (QCString &name)
 
NamespaceDefgetResolvedNamespace (const QCString &key)
 
NamespaceDefMutablegetResolvedNamespaceMutable (const QCString &key)
 
bool namespaceHasNestedNamespace (const NamespaceDef *nd)
 
bool namespaceHasNestedConcept (const NamespaceDef *nd)
 
bool namespaceHasNestedClass (const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)
 

Typedef Documentation

◆ NamespaceDefSet

using NamespaceDefSet = std::unordered_set<const NamespaceDef*>

Definition at line 39 of file namespacedef.h.

Function Documentation

◆ createNamespaceDef()

std::unique_ptr< NamespaceDef > createNamespaceDef ( const QCString & defFileName,
int defLine,
int defColumn,
const QCString & name,
const QCString & ref = QCString(),
const QCString & refFile = QCString(),
const QCString & type = QCString(),
bool isPublished = false )

Factory method to create new NamespaceDef instance.

Definition at line 173 of file namespacedef.cpp.

177{
178 //printf("createNamespaceDef(%s)\n",qPrint(name));
179 return std::make_unique<NamespaceDefImpl>(defFileName,defLine,defColumn,name,ref,refFile,type,isPublished);
180}

Referenced by adjustConfiguration(), buildNamespaceList(), buildScopeFromQualifiedName(), findUsingDirectives(), and NamespaceDefMutable::setInline().

◆ createNamespaceDefAlias()

std::unique_ptr< NamespaceDef > createNamespaceDefAlias ( const Definition * newScope,
const NamespaceDef * nd )

Factory method to create an alias of an existing namespace.

Used for inline namespaces.

Definition at line 261 of file namespacedef.cpp.

262{
263 auto alnd = std::make_unique<NamespaceDefAliasImpl>(newScope,nd);
264 //printf("alnd name=%s localName=%s qualifiedName=%s displayName()=%s\n",
265 // qPrint(alnd->name()),qPrint(alnd->localName()),qPrint(alnd->qualifiedName()),
266 // qPrint(alnd->displayName()));
267 return alnd;
268}

Referenced by buildNamespaceList(), and NamespaceDefMutable::setInline().

◆ getResolvedNamespace()

NamespaceDef * getResolvedNamespace ( const QCString & key)

Definition at line 1780 of file namespacedef.cpp.

1781{
1782 //printf("> getResolvedNamespace(%s)\n",qPrint(name));
1783 if (name.isEmpty()) return nullptr;
1784 StringSet namespacesTried;
1785 auto ns = getResolvedNamespaceRec(namespacesTried,NamespaceAliasInfo(name.str()));
1786 //printf("< getResolvedNamespace(%s)=%s\n",qPrint(name),ns?qPrint(ns->qualifiedName()):"nullptr");
1787 return ns;
1788}
std::set< std::string > StringSet
Definition containers.h:31
static NamespaceDef * getResolvedNamespaceRec(StringSet &namespacesTried, const NamespaceAliasInfo &aliasInfo)

References getResolvedNamespaceRec(), QCString::isEmpty(), and QCString::str().

Referenced by addMemberFunction(), buildFunctionList(), buildTypedefList(), extractNamespaceName(), findUsedNamespace(), findUsingDeclImports(), findUsingDirectives(), generateClassOrGlobalLink(), generateClassOrGlobalLink(), getResolvedNamespaceMutable(), CCodeParser::parseCode(), setCallContextForVar(), NamespaceDefMutable::setInline(), and writeAlphabeticalClassList().

◆ getResolvedNamespaceMutable()

NamespaceDefMutable * getResolvedNamespaceMutable ( const QCString & key)
inline

Definition at line 150 of file namespacedef.h.

151{
153}
NamespaceDef * getResolvedNamespace(const QCString &key)
NamespaceDefMutable * toNamespaceDefMutable(Definition *d)

References getResolvedNamespace(), getResolvedNamespaceMutable(), and toNamespaceDefMutable().

Referenced by addEnumValuesToEnums(), addGlobalFunction(), addVariableToFile(), findEnums(), findUsingDeclarations(), findUsingDirectives(), and getResolvedNamespaceMutable().

◆ namespaceHasNestedClass()

bool namespaceHasNestedClass ( const NamespaceDef * nd,
bool filterClasses,
ClassDef::CompoundType ct )

Definition at line 1828 of file namespacedef.cpp.

1829{
1830 //printf(">namespaceHasNestedClass(%s,filterClasses=%d)\n",qPrint(nd->name()),filterClasses);
1831 for (const auto &cnd : nd->getNamespaces())
1832 {
1833 if (namespaceHasNestedClass(cnd,filterClasses,ct))
1834 {
1835 //printf("<namespaceHasNestedClass(%s,filterClasses=%d): case1\n",qPrint(nd->name()),filterClasses);
1836 return true;
1837 }
1838 }
1839
1840 ClassLinkedRefMap list = nd->getClasses();
1841 if (filterClasses)
1842 {
1843 switch (ct)
1844 {
1846 list = nd->getInterfaces();
1847 break;
1848 case ClassDef::Struct:
1849 list = nd->getStructs();
1850 break;
1852 list = nd->getExceptions();
1853 break;
1854 default:
1855 break;
1856 }
1857 }
1858
1859 for (const auto &cd : list)
1860 {
1861 //printf("candidate %s isLinkableInProject()=%d\n",qPrint(cd->name()),cd->isLinkableInProject());
1862 if (cd->isLinkableInProject())
1863 {
1864 //printf("<namespaceHasNestedClass(%s,filterClasses=%d): case2\n",qPrint(nd->name()),filterClasses);
1865 return true;
1866 }
1867 }
1868 //printf("<namespaceHasNestedClass(%s,filterClasses=%d): case3\n",qPrint(nd->name()),filterClasses);
1869 return false;
1870}
@ Interface
Definition classdef.h:112
@ Exception
Definition classdef.h:115
virtual ClassLinkedRefMap getStructs() const =0
virtual ClassLinkedRefMap getExceptions() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual ClassLinkedRefMap getInterfaces() const =0
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)

References ClassDef::Exception, NamespaceDef::getClasses(), NamespaceDef::getExceptions(), NamespaceDef::getInterfaces(), NamespaceDef::getNamespaces(), NamespaceDef::getStructs(), ClassDef::Interface, namespaceHasNestedClass(), and ClassDef::Struct.

Referenced by namespaceHasNestedClass(), writeClassTreeInsideNamespaceElement(), and writeNamespaceTreeElement().

◆ namespaceHasNestedConcept()

bool namespaceHasNestedConcept ( const NamespaceDef * nd)

Definition at line 1804 of file namespacedef.cpp.

1805{
1806 //printf(">namespaceHasNestedConcept(%s)\n",qPrint(nd->name()));
1807 for (const auto &cnd : nd->getNamespaces())
1808 {
1810 {
1811 //printf("<namespaceHasNestedConcept(%s): case1\n",qPrint(nd->name()));
1812 return true;
1813 }
1814 }
1815 for (const auto &cnd : nd->getConcepts())
1816 {
1817 //printf("candidate %s isLinkableInProject()=%d\n",qPrint(cnd->name()),cnd->isLinkableInProject());
1818 if (cnd->isLinkableInProject())
1819 {
1820 //printf("<namespaceHasNestedConcept(%s): case2\n",qPrint(nd->name()));
1821 return true;
1822 }
1823 }
1824 //printf("<namespaceHasNestedConcept(%s): case3\n",qPrint(nd->name()));
1825 return false;
1826}
virtual ConceptLinkedRefMap getConcepts() const =0
bool namespaceHasNestedConcept(const NamespaceDef *nd)

References NamespaceDef::getConcepts(), NamespaceDef::getNamespaces(), and namespaceHasNestedConcept().

Referenced by namespaceHasNestedConcept(), writeConceptTreeInsideNamespaceElement(), and writeNamespaceTreeElement().

◆ namespaceHasNestedNamespace()

bool namespaceHasNestedNamespace ( const NamespaceDef * nd)

Definition at line 1792 of file namespacedef.cpp.

1793{
1794 for (const auto &cnd : nd->getNamespaces())
1795 {
1796 if (cnd->isLinkableInProject() && !cnd->isAnonymous())
1797 {
1798 return true;
1799 }
1800 }
1801 return false;
1802}

References NamespaceDef::getNamespaces().

Referenced by writeNamespaceTreeElement().

◆ replaceNamespaceAliases()

void replaceNamespaceAliases ( QCString & name)

Definition at line 1772 of file namespacedef.cpp.

1773{
1774 //printf("> replaceNamespaceAliases(%s)\n",qPrint(name));
1775 StringSet namespacesTried;
1776 name = replaceNamespaceAliasesRec(namespacesTried,name);
1777 //printf("< replaceNamespaceAliases: result=%s\n",qPrint(name));
1778}
static QCString replaceNamespaceAliasesRec(StringSet &namespacesTried, const QCString &name)

References replaceNamespaceAliasesRec().

Referenced by findClassRelation(), findUsedClassesForClass(), getMemberFromSymbol(), SymbolResolver::Private::getResolvedSymbolRec(), SymbolResolver::Private::getResolvedTypeRec(), and NamespaceDefMutable::setInline().

◆ toNamespaceDef() [1/3]

const NamespaceDef * toNamespaceDef ( const Definition * d)

Definition at line 1657 of file namespacedef.cpp.

1658{
1659 if (d && (typeid(*d)==typeid(NamespaceDefImpl) || typeid(*d)==typeid(NamespaceDefAliasImpl)))
1660 {
1661 return static_cast<const NamespaceDef*>(d);
1662 }
1663 else
1664 {
1665 return nullptr;
1666 }
1667}
An abstract interface of a namespace symbol.

◆ toNamespaceDef() [2/3]

◆ toNamespaceDef() [3/3]

NamespaceDef * toNamespaceDef ( DefinitionMutable * d)

Definition at line 1643 of file namespacedef.cpp.

1644{
1645 Definition *d = toDefinition(md);
1646 if (d && typeid(*d)==typeid(NamespaceDefImpl))
1647 {
1648 return static_cast<NamespaceDef*>(d);
1649 }
1650 else
1651 {
1652 return nullptr;
1653 }
1654}
The common base class of all entity definitions found in the sources.
Definition definition.h:76
Definition * toDefinition(DefinitionMutable *dm)

References toDefinition().

◆ toNamespaceDefMutable()