Skip to main content

The classdef.h File Reference

Included Headers

#include <memory> #include <vector> #include <unordered_set> #include "containers.h" #include "definition.h" #include "arguments.h" #include "membergroup.h" #include "configvalues.h"

Classes Index

structBaseClassDef

Class that contains information about an inheritance relation. More...

structTemplateInstanceDef

Class that contains information about a template instance relation. More...

classClassDef

A abstract class representing of a compound symbol. More...

classClassDefMutable
structUsesClassDef

Class that contains information about a usage relation. More...

classUsesClassList
structConstraintClassDef

Class that contains information about a type constraint relations. More...

classConstraintClassList

Typedefs Index

usingBaseClassList = std::vector< BaseClassDef >
usingTemplateInstanceList = std::vector< TemplateInstanceDef >
usingTemplateNameMap = std::map< std::string, int >
usingClassDefSet = std::unordered_set< const ClassDef * >

Functions Index

std::unique_ptr< ClassDef >createClassDef (const QCString &fileName, int startLine, int startColumn, const QCString &name, ClassDef::CompoundType ct, const QCString &ref=QCString(), const QCString &fName=QCString(), bool isSymbol=TRUE, bool isJavaEnum=FALSE)

Factory method to create a new ClassDef object. More...

std::unique_ptr< ClassDef >createClassDefAlias (const Definition *newScope, const ClassDef *cd)
ClassDef *toClassDef (Definition *d)
ClassDef *toClassDef (DefinitionMutable *d)
const ClassDef *toClassDef (const Definition *d)
ClassDefMutable *toClassDefMutable (Definition *d)
ClassDef *getClass (const QCString &key)
ClassDefMutable *getClassMutable (const QCString &key)
boolclassHasVisibleRoot (const BaseClassList &bcl)
boolclassHasVisibleChildren (const ClassDef *cd)
boolclassVisibleInIndex (const ClassDef *cd)
intminClassDistance (const ClassDef *cd, const ClassDef *bcd, int level=0)
ProtectionclassInheritedProtectionLevel (const ClassDef *cd, const ClassDef *bcd, Protection prot=Protection::Public, int level=0)

Typedefs

BaseClassList

using BaseClassList = std::vector<BaseClassDef>

Definition at line 81 of file classdef.h.

81using BaseClassList = std::vector<BaseClassDef>;

ClassDefSet

using ClassDefSet = std::unordered_set<const ClassDef*>

Definition at line 95 of file classdef.h.

95using ClassDefSet = std::unordered_set<const ClassDef*>;

TemplateInstanceList

using TemplateInstanceList = std::vector<TemplateInstanceDef>

Definition at line 91 of file classdef.h.

91using TemplateInstanceList = std::vector<TemplateInstanceDef>;

TemplateNameMap

using TemplateNameMap = std::map<std::string,int>

Definition at line 93 of file classdef.h.

93using TemplateNameMap = std::map<std::string,int>;

Functions

classHasVisibleChildren()

bool classHasVisibleChildren (const ClassDef * cd)

Declaration at line 474 of file classdef.h, definition at line 5489 of file classdef.cpp.

5490{
5491 BaseClassList bcl;
5492
5493 if (cd->getLanguage()==SrcLangExt::VHDL) // reverse baseClass/subClass relation
5494 {
5495 if (cd->baseClasses().empty()) return FALSE;
5496 bcl=cd->baseClasses();
5497 }
5498 else
5499 {
5500 if (cd->subClasses().empty()) return FALSE;
5501 bcl=cd->subClasses();
5502 }
5503
5504 for (const auto &bcd : bcl)
5505 {
5506 if (bcd.classDef->isVisibleInHierarchy())
5507 {
5508 return TRUE;
5509 }
5510 }
5511 return FALSE;
5512}

References ClassDef::baseClasses, FALSE, Definition::getLanguage, ClassDef::subClasses and TRUE.

Referenced by writeClassTreeForList and writeClassTreeToOutput.

classHasVisibleRoot()

bool classHasVisibleRoot (const BaseClassList & bcl)

Declaration at line 473 of file classdef.h, definition at line 5478 of file classdef.cpp.

5479{
5480 for (const auto &bcd : bcl)
5481 {
5482 const ClassDef *cd=bcd.classDef;
5483 if (cd->isVisibleInHierarchy()) return true;
5484 if (classHasVisibleRoot(cd->baseClasses())) return true;
5485 }
5486 return false;
5487}

References ClassDef::baseClasses, classHasVisibleRoot and ClassDef::isVisibleInHierarchy.

Referenced by DotGfxHierarchyTable::addClassList, DotGfxHierarchyTable::addHierarchy, classHasVisibleRoot, countClassesInTreeList, writeClassTreeForList and writeClassTreeToOutput.

classInheritedProtectionLevel()

Protection classInheritedProtectionLevel (const ClassDef * cd, const ClassDef * bcd, Protection prot=Protection::Public, int level=0)

Declaration at line 477 of file classdef.h, definition at line 5548 of file classdef.cpp.

5549{
5550 if (bcd->categoryOf()) // use class that is being extended in case of
5551 // an Objective-C category
5552 {
5553 bcd=bcd->categoryOf();
5554 }
5555 if (cd==bcd)
5556 {
5557 goto exit;
5558 }
5559 if (level==256)
5560 {
5561 err("Internal inconsistency: found class {} seem to have a recursive "
5562 "inheritance relation! Please send a bug report to doxygen@gmail.com\n",cd->name());
5563 }
5564 else if (prot!=Protection::Private)
5565 {
5566 for (const auto &bcdi : cd->baseClasses())
5567 {
5568 Protection baseProt = classInheritedProtectionLevel(bcdi.classDef,bcd,bcdi.prot,level+1);
5569 if (baseProt==Protection::Private) prot=Protection::Private;
5570 else if (baseProt==Protection::Protected) prot=Protection::Protected;
5571 }
5572 }
5573exit:
5574 //printf("classInheritedProtectionLevel(%s,%s)=%d\n",qPrint(cd->name()),qPrint(bcd->name()),prot);
5575 return prot;
5576}

References ClassDef::baseClasses, ClassDef::categoryOf, classInheritedProtectionLevel, err and Definition::name.

Referenced by classInheritedProtectionLevel.

classVisibleInIndex()

bool classVisibleInIndex (const ClassDef * cd)

Declaration at line 475 of file classdef.h, definition at line 5514 of file classdef.cpp.

5515{
5516 bool allExternals = Config_getBool(ALLEXTERNALS);
5517 return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
5518}

References Config_getBool, Definition::isLinkable and Definition::isLinkableInProject.

Referenced by writeClassTree.

createClassDef()

std::unique_ptr< ClassDef > createClassDef (const QCString & fileName, int startLine, int startColumn, const QCString & name, ClassDef::CompoundType ct, const QCString & ref=QCString(), const QCString & fName=QCString(), bool isSymbol=TRUE, bool isJavaEnum=FALSE)

Factory method to create a new ClassDef object.

Declaration at line 451 of file classdef.h, definition at line 559 of file classdef.cpp.

559std::unique_ptr<ClassDef> createClassDef(
560 const QCString &fileName,int startLine,int startColumn,
561 const QCString &name,ClassDef::CompoundType ct,
562 const QCString &ref,const QCString &fName,
563 bool isSymbol,bool isJavaEnum)
564{
565 return std::make_unique<ClassDefImpl>(fileName,startLine,startColumn,name,ct,ref,fName,isSymbol,isJavaEnum);
566}

Referenced by addClassToContext, createTagLessInstance, findClassRelation, findUsedClassesForClass, findUsingDeclarations and ClassDefMutable::sortAllMembersList.

createClassDefAlias()

std::unique_ptr< ClassDef > createClassDefAlias (const Definition * newScope, const ClassDef * cd)

Declaration at line 457 of file classdef.h, definition at line 788 of file classdef.cpp.

788std::unique_ptr<ClassDef> createClassDefAlias(const Definition *newScope,const ClassDef *cd)
789{
790 auto acd = std::make_unique<ClassDefAliasImpl>(newScope,cd);
791 //printf("cd name=%s localName=%s qualifiedName=%s qualifiedNameWith=%s displayName()=%s\n",
792 // qPrint(acd->name()),qPrint(acd->localName()),qPrint(acd->qualifiedName()),
793 // qPrint(acd->qualifiedNameWithTemplateParameters()),qPrint(acd->displayName()));
794 return acd;
795}

Referenced by ClassDefAliasImpl::deepCopy, findUsingDeclImports, resolveClassNestingRelations and ClassDefMutable::sortAllMembersList.

getClass()

getClassMutable()

minClassDistance()

int minClassDistance (const ClassDef * cd, const ClassDef * bcd, int level=0)

Declaration at line 476 of file classdef.h, definition at line 5524 of file classdef.cpp.

5524int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level)
5525{
5526 const int maxInheritanceDepth = 100000;
5527 if (bcd->categoryOf()) // use class that is being extended in case of
5528 // an Objective-C category
5529 {
5530 bcd=bcd->categoryOf();
5531 }
5532 if (cd==bcd) return level;
5533 if (level==256)
5534 {
5535 warn_uncond("class {} seem to have a recursive inheritance relation!\n",cd->name());
5536 return -1;
5537 }
5539 for (const auto &bcdi : cd->baseClasses())
5540 {
5541 int mc=minClassDistance(bcdi.classDef,bcd,level+1);
5542 if (mc<m) m=mc;
5543 if (m<0) break;
5544 }
5545 return m;
5546}

References ClassDef::baseClasses, ClassDef::categoryOf, maxInheritanceDepth, minClassDistance, Definition::name and warn_uncond.

Referenced by getDefsOld, ClassDefImpl::getMemberByName and minClassDistance.

toClassDef()

toClassDef()

ClassDef * toClassDef (DefinitionMutable * d)

Declaration at line 462 of file classdef.h, definition at line 5430 of file classdef.cpp.

5431{
5432 Definition *d = toDefinition(md);
5433 if (d && typeid(*d)==typeid(ClassDefImpl))
5434 {
5435 return static_cast<ClassDef*>(d);
5436 }
5437 else
5438 {
5439 return nullptr;
5440 }
5441}

Reference toDefinition.

toClassDef()

const ClassDef * toClassDef (const Definition * d)

Declaration at line 463 of file classdef.h, definition at line 5443 of file classdef.cpp.

5444{
5445 if (d && (typeid(*d)==typeid(ClassDefImpl) || typeid(*d)==typeid(ClassDefAliasImpl)))
5446 {
5447 return static_cast<const ClassDef*>(d);
5448 }
5449 else
5450 {
5451 return nullptr;
5452 }
5453}

toClassDefMutable()

ClassDefMutable * toClassDefMutable (Definition * d)

Declaration at line 464 of file classdef.h, definition at line 5455 of file classdef.cpp.

5456{
5457 if (d && typeid(*d)==typeid(ClassDefImpl))
5458 {
5459 return static_cast<ClassDefMutable*>(d);
5460 }
5461 else
5462 {
5463 return nullptr;
5464 }
5465}

Referenced by addClassAndNestedClasses, addClassToContext, addClassToGroups, ModuleDefImpl::addClassToModule, ModuleManager::addClassToModule, addListReferences, addMembersToMemberGroup, ClassDefImpl::addMembersToTemplateInstance, addMemberToGroups, ClassDefImpl::addTypeConstraint, buildCompleteMemberLists, computeMemberReferences, computeTemplateClassRelations, VhdlDocGen::computeVhdlComponentRelations, ClassDefImpl::countInheritedDecMembers, countMembers, createTagLessInstance, createTemplateInstanceMembers, ClassDefImpl::deepCopy, distributeClassGroupRelations, distributeMemberGroupDocumentation, findClassRelation, findSectionsInDocumentation, findTagLessClasses, findTemplateInstanceRelation, findUsedClassesForClass, findUsingDeclarations, findUsingDeclImports, generateClassDocs, generateClassOrGlobalLink, generateNamespaceClassDocs, MemberDefImpl::getClassDefMutable, getClassMutable, ClassDefImpl::hideDerivedVariablesInPython, insertMemberAlias, ClassDefImpl::insertTemplateInstance, ClassDefImpl::insertUsedFile, ClassDefImpl::internalInsertMember, mergeCategories, ClassDefImpl::mergeCategory, ClassDefImpl::mergeMembers, ClassDefImpl::mergeMembersFromBaseClasses, SymbolResolver::resolveClassMutable, resolveClassNestingRelations, setAnonymousEnumType, ClassDefImpl::setGroupDefForAllMembers, ClassDefMutable::sortAllMembersList, sortMemberLists, ClassDefImpl::writeInheritedMemberDeclarations and writeTagFile.


Generated via doxygen2docusaurus by Doxygen 1.14.0.