diff options
Diffstat (limited to 'src/definitionimpl.h')
-rw-r--r-- | src/definitionimpl.h | 458 |
1 files changed, 311 insertions, 147 deletions
diff --git a/src/definitionimpl.h b/src/definitionimpl.h index 2cf1bf6..a5fc66d 100644 --- a/src/definitionimpl.h +++ b/src/definitionimpl.h @@ -23,110 +23,107 @@ #include "definition.h" -class DefinitionImpl : virtual public DefinitionMutable +class DefinitionImpl { public: - /*! Create a new definition */ DefinitionImpl( + Definition *def, const char *defFileName,int defLine,int defColumn, const char *name,const char *b=0,const char *d=0, bool isSymbol=TRUE); virtual ~DefinitionImpl(); - virtual bool isAlias() const { return FALSE; } - virtual const QCString &name() const; - virtual bool isAnonymous() const; - virtual QCString localName() const; - virtual QCString qualifiedName() const; - virtual QCString symbolName() const; - virtual QCString getSourceFileBase() const; - virtual QCString getSourceAnchor() const; - virtual QCString documentation() const; - virtual int docLine() const; - virtual QCString docFile() const; - virtual QCString briefDescription(bool abbreviate=FALSE) const; - virtual QCString briefDescriptionAsTooltip() const; - virtual int briefLine() const; - virtual QCString inbodyDocumentation() const; - virtual QCString inbodyFile() const; - virtual int inbodyLine() const; - virtual QCString briefFile() const; - virtual QCString getDefFileName() const; - virtual QCString getDefFileExtension() const; - virtual int getDefLine() const; - virtual int getDefColumn() const; - virtual bool hasDocumentation() const; - virtual bool hasUserDocumentation() const; - virtual bool isVisibleInProject() const; - virtual bool isVisible() const; - virtual bool isHidden() const; - virtual bool isArtificial() const; - virtual QCString getReference() const; - virtual bool isReference() const; - virtual QCString externalReference(const QCString &relPath) const; - virtual int getStartDefLine() const; - virtual int getStartBodyLine() const; - virtual int getEndBodyLine() const; - virtual FileDef *getBodyDef() const; - virtual SrcLangExt getLanguage() const; - virtual GroupList *partOfGroups() const; - virtual bool isLinkableViaGroup() const; - virtual const RefItemVector &xrefListItems() const; - virtual const Definition *findInnerCompound(const char *name) const; - virtual Definition *getOuterScope() const; - virtual std::vector<const MemberDef *> getReferencesMembers() const; - virtual std::vector<const MemberDef *> getReferencedByMembers() const; - virtual bool hasSections() const; - virtual bool hasSources() const; - virtual bool hasBriefDescription() const; - virtual QCString id() const; - virtual const SectionRefs &getSectionRefs() const; - virtual void setName(const char *name); - virtual void setId(const char *name); - virtual void setDefFile(const QCString& df,int defLine,int defColumn); - virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE); - virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine); - virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine); - virtual void setReference(const char *r); - virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList); - virtual void setBodySegment(int defLine,int bls,int ble); - virtual void setBodyDef(FileDef *fd); - virtual void addSourceReferencedBy(const MemberDef *d); - virtual void addSourceReferences(const MemberDef *d); - virtual void setRefItems(const RefItemVector &sli); - virtual void mergeRefItems(Definition *d); - virtual void mergeReferences(const Definition *other); - virtual void mergeReferencedBy(const Definition *other); - virtual void addInnerCompound(const Definition *d); - virtual void setOuterScope(Definition *d); - virtual void setHidden(bool b); - virtual void setArtificial(bool b); - virtual void setLanguage(SrcLangExt lang); - virtual void writeSourceDef(OutputList &ol,const char *scopeName) const; - virtual void writeInlineCode(OutputList &ol,const char *scopeName) const; - virtual void writeSourceRefs(OutputList &ol,const char *scopeName) const; - virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName) const; - virtual void makePartOfGroup(GroupDef *gd); - virtual void writeNavigationPath(OutputList &ol) const; - virtual QCString navigationPathAsString() const; - virtual void writeQuickMemberLinks(OutputList &,const MemberDef *) const; - virtual void writeSummaryLinks(OutputList &) const; - virtual QCString pathFragment() const; - virtual void writeDocAnchorsToTagFile(FTextStream &) const; - virtual void setLocalName(const QCString name); - virtual void addSectionsToIndex(); - virtual void writeToc(OutputList &ol, const LocalToc <) const; - virtual void setCookie(Cookie *cookie) const; - virtual Cookie *cookie() const; - virtual void computeTooltip(); - - protected: + const QCString &name() const; + bool isAnonymous() const; + QCString localName() 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; + QCString getReference() const; + bool isReference() const; + QCString externalReference(const QCString &relPath) const; + int getStartDefLine() const; + int getStartBodyLine() const; + int getEndBodyLine() const; + FileDef *getBodyDef() const; + SrcLangExt getLanguage() const; + GroupList *partOfGroups() const; + bool isLinkableViaGroup() const; + const RefItemVector &xrefListItems() const; + const Definition *findInnerCompound(const char *name) const; + Definition *getOuterScope() const; + std::vector<const MemberDef *> getReferencesMembers() const; + std::vector<const MemberDef *> getReferencedByMembers() const; + bool hasSections() const; + bool hasSources() const; + bool hasBriefDescription() const; + QCString id() const; + const SectionRefs &getSectionRefs() const; + void setName(const char *name); + void setId(const char *name); + void setDefFile(const QCString& df,int defLine,int defColumn); + void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE); + void setBriefDescription(const char *b,const char *briefFile,int briefLine); + void setInbodyDocumentation(const char *d,const char *docFile,int docLine); + void setReference(const char *r); + void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList); + void setBodySegment(int defLine,int bls,int ble); + void setBodyDef(FileDef *fd); + void addSourceReferencedBy(const MemberDef *d); + void addSourceReferences(const MemberDef *d); + void setRefItems(const RefItemVector &sli); + void mergeRefItems(Definition *d); + void mergeReferences(const Definition *other); + void mergeReferencedBy(const Definition *other); + void addInnerCompound(const Definition *d); + void setOuterScope(Definition *d); + void setHidden(bool b); + void setArtificial(bool b); + void setLanguage(SrcLangExt lang); + void writeSourceDef(OutputList &ol,const char *scopeName) const; + void writeInlineCode(OutputList &ol,const char *scopeName) const; + void writeSourceRefs(OutputList &ol,const char *scopeName) const; + void writeSourceReffedBy(OutputList &ol,const char *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(FTextStream &) const; + void setLocalName(const QCString name); + void addSectionsToIndex(); + void writeToc(OutputList &ol, const LocalToc <) const; + void setCookie(Definition::Cookie *cookie) const; + Definition::Cookie *cookie() const; + void computeTooltip(); + void _setSymbolName(const QCString &name); + QCString _symbolName() const; DefinitionImpl(const DefinitionImpl &d); private: - virtual void _setSymbolName(const QCString &name); - virtual QCString _symbolName() const ; int _getXRefListId(const char *listName) const; void _writeSourceRefList(OutputList &ol,const char *scopeName,const QCString &text, @@ -141,124 +138,291 @@ class DefinitionImpl : virtual public DefinitionMutable IMPL *m_impl; // internal structure holding all private data }; -class DefinitionAliasImpl : virtual public Definition +template<class Base> +class DefinitionMixin : public Base +{ + public: + /*! Create a new definition */ + DefinitionMixin( + const char *defFileName,int defLine,int defColumn, + const char *name,const char *b=0,const char *d=0, + bool isSymbol=TRUE) : m_impl(this,defFileName,defLine,defColumn,name,b,d,isSymbol) {} + virtual ~DefinitionMixin() {} + + virtual bool isAlias() const { return FALSE; } + virtual const QCString &name() const { return m_impl.name(); } + virtual bool isAnonymous() const { return m_impl.isAnonymous(); } + virtual QCString localName() const { return m_impl.localName(); } + virtual QCString qualifiedName() const { return m_impl.qualifiedName(); } + virtual QCString symbolName() const { return m_impl.symbolName(); } + virtual QCString getSourceFileBase() const { return m_impl.getSourceFileBase(); } + virtual QCString getSourceAnchor() const { return m_impl.getSourceAnchor(); } + virtual QCString documentation() const { return m_impl.documentation(); } + virtual int docLine() const { return m_impl.docLine(); } + virtual QCString docFile() const { return m_impl.docFile(); } + virtual QCString briefDescription(bool abbreviate=FALSE) const { return m_impl.briefDescription(abbreviate); } + virtual QCString briefDescriptionAsTooltip() const { return m_impl.briefDescriptionAsTooltip(); } + virtual int briefLine() const { return m_impl.briefLine(); } + virtual QCString inbodyDocumentation() const { return m_impl.inbodyDocumentation(); } + virtual QCString inbodyFile() const { return m_impl.inbodyFile(); } + virtual int inbodyLine() const { return m_impl.inbodyLine(); } + virtual QCString briefFile() const { return m_impl.briefFile(); } + virtual QCString getDefFileName() const { return m_impl.getDefFileName(); } + virtual QCString getDefFileExtension() const { return m_impl.getDefFileExtension(); } + virtual int getDefLine() const { return m_impl.getDefLine(); } + virtual int getDefColumn() const { return m_impl.getDefColumn(); } + virtual bool hasDocumentation() const { return m_impl.hasDocumentation(); } + virtual bool hasUserDocumentation() const { return m_impl.hasUserDocumentation(); } + virtual bool isVisibleInProject() const { return m_impl.isVisibleInProject(); } + virtual bool isVisible() const { return m_impl.isVisible(); } + virtual bool isHidden() const { return m_impl.isHidden(); } + virtual bool isArtificial() const { return m_impl.isArtificial(); } + virtual QCString getReference() const { return m_impl.getReference(); } + virtual bool isReference() const { return m_impl.isReference(); } + virtual QCString externalReference(const QCString &relPath) const { return m_impl.externalReference(relPath); } + virtual int getStartDefLine() const { return m_impl.getStartDefLine(); } + virtual int getStartBodyLine() const { return m_impl.getStartBodyLine(); } + virtual int getEndBodyLine() const { return m_impl.getEndBodyLine(); } + virtual FileDef *getBodyDef() const { return m_impl.getBodyDef(); } + virtual SrcLangExt getLanguage() const { return m_impl.getLanguage(); } + virtual GroupList *partOfGroups() const { return m_impl.partOfGroups(); } + virtual bool isLinkableViaGroup() const { return m_impl.isLinkableViaGroup(); } + virtual const RefItemVector &xrefListItems() const { return m_impl.xrefListItems(); } + virtual const Definition *findInnerCompound(const char *name) const { return m_impl.findInnerCompound(name); } + virtual Definition *getOuterScope() const { return m_impl.getOuterScope(); } + virtual std::vector<const MemberDef *> getReferencesMembers() const { return m_impl.getReferencesMembers(); } + virtual std::vector<const MemberDef *> getReferencedByMembers() const { return m_impl.getReferencedByMembers(); } + virtual bool hasSections() const { return m_impl.hasSections(); } + virtual bool hasSources() const { return m_impl.hasSources(); } + virtual bool hasBriefDescription() const { return m_impl.hasBriefDescription(); } + virtual QCString id() const { return m_impl.id(); } + virtual const SectionRefs &getSectionRefs() const { return m_impl.getSectionRefs(); } + + virtual void setName(const char *name) { m_impl.setName(name); } + virtual void setId(const char *name) { m_impl.setId(name); } + virtual void setDefFile(const QCString& df,int defLine,int defColumn) + { m_impl.setDefFile(df,defLine,defColumn); } + virtual void setDocumentation(const char *doc,const char *docFile,int docLine,bool stripWhiteSpace=TRUE) + { m_impl.setDocumentation(doc,docFile,docLine,stripWhiteSpace); } + virtual void setBriefDescription(const char *brief,const char *briefFile,int briefLine) + { m_impl.setBriefDescription(brief,briefFile,briefLine); } + virtual void setInbodyDocumentation(const char *doc,const char *docFile,int docLine) + { m_impl.setInbodyDocumentation(doc,docFile,docLine); } + virtual void setReference(const char *r) + { m_impl.setReference(r); } + virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList) + { m_impl.addSectionsToDefinition(anchorList); } + virtual void setBodySegment(int defLine,int bls,int ble) + { m_impl.setBodySegment(defLine,bls,ble); } + virtual void setBodyDef(FileDef *fd) + { m_impl.setBodyDef(fd); } + virtual void addSourceReferencedBy(const MemberDef *md) + { m_impl.addSourceReferencedBy(md); } + virtual void addSourceReferences(const MemberDef *md) + { m_impl.addSourceReferences(md); } + virtual void setRefItems(const RefItemVector &sli) + { m_impl.setRefItems(sli); } + virtual void mergeRefItems(Definition *def) + { m_impl.mergeRefItems(def); } + virtual void mergeReferences(const Definition *other) + { m_impl.mergeReferences(other); } + virtual void mergeReferencedBy(const Definition *other) + { m_impl.mergeReferencedBy(other); } + virtual void addInnerCompound(const Definition *def) + { m_impl.addInnerCompound(def); } + virtual void setOuterScope(Definition *def) + { m_impl.setOuterScope(def); } + virtual void setHidden(bool b) + { m_impl.setHidden(b); } + virtual void setArtificial(bool b) + { m_impl.setArtificial(b); } + virtual void setLanguage(SrcLangExt lang) + { m_impl.setLanguage(lang); } + virtual void writeSourceDef(OutputList &ol,const char *scopeName) const + { m_impl.writeSourceDef(ol,scopeName); } + virtual void writeInlineCode(OutputList &ol,const char *scopeName) const + { m_impl.writeInlineCode(ol,scopeName); } + virtual void writeSourceRefs(OutputList &ol,const char *scopeName) const + { m_impl.writeSourceRefs(ol,scopeName); } + virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName) const + { m_impl.writeSourceReffedBy(ol,scopeName); } + virtual void makePartOfGroup(GroupDef *gd) + { m_impl.makePartOfGroup(gd); } + virtual void writeNavigationPath(OutputList &ol) const + { m_impl.writeNavigationPath(ol); } + virtual QCString navigationPathAsString() const + { return m_impl.navigationPathAsString(); } + virtual void writeQuickMemberLinks(OutputList &ol,const MemberDef *md) const + { m_impl.writeQuickMemberLinks(ol,md); } + virtual void writeSummaryLinks(OutputList &ol) const + { m_impl.writeSummaryLinks(ol); } + virtual QCString pathFragment() const + { return m_impl.pathFragment(); } + virtual void writeDocAnchorsToTagFile(FTextStream &fs) const + { m_impl.writeDocAnchorsToTagFile(fs); } + virtual void setLocalName(const QCString name) + { m_impl.setLocalName(name); } + virtual void addSectionsToIndex() + { m_impl.addSectionsToIndex(); } + virtual void writeToc(OutputList &ol, const LocalToc <) const + { m_impl.writeToc(ol,lt); } + virtual void setCookie(Definition::Cookie *cookie) const + { m_impl.setCookie(cookie); } + virtual Definition::Cookie *cookie() const + { return m_impl.cookie(); } + virtual void computeTooltip() + { m_impl.computeTooltip(); } + virtual void _setSymbolName(const QCString &name) + { m_impl._setSymbolName(name); } + virtual QCString _symbolName() const + { return m_impl._symbolName(); } + + protected: + + DefinitionMixin(const DefinitionMixin &def) = default; + + private: + virtual Definition *toDefinition_() { return this; } + virtual DefinitionMutable *toDefinitionMutable_() { return this; } + virtual const DefinitionImpl *toDefinitionImpl_() const { return &m_impl; } + + DefinitionImpl m_impl; +}; + +class DefinitionAliasImpl { public: - DefinitionAliasImpl(const Definition *scope,const Definition *alias); + DefinitionAliasImpl(Definition *def,const Definition *alias); virtual ~DefinitionAliasImpl(); + private: + Definition *m_def; +}; + +template<class Base> +class DefinitionAliasMixin : public Base +{ + public: + DefinitionAliasMixin(const Definition *scope,const Definition *alias) + : m_impl(this,alias), m_scope(scope), m_alias(alias), m_cookie(0) {} + virtual ~DefinitionAliasMixin() = default; virtual bool isAlias() const { return TRUE; } virtual const QCString &name() const - { return m_def->name(); } + { return m_alias->name(); } virtual bool isAnonymous() const - { return m_def->isAnonymous(); } + { return m_alias->isAnonymous(); } virtual QCString localName() const - { return m_def->localName(); } + { return m_alias->localName(); } virtual QCString qualifiedName() const - { return m_def->qualifiedName(); } + { return m_alias->qualifiedName(); } virtual QCString symbolName() const - { return m_def->symbolName(); } + { return m_alias->symbolName(); } virtual QCString getSourceFileBase() const - { return m_def->getSourceFileBase(); } + { return m_alias->getSourceFileBase(); } virtual QCString getSourceAnchor() const - { return m_def->getSourceAnchor(); } + { return m_alias->getSourceAnchor(); } virtual QCString documentation() const - { return m_def->documentation(); } + { return m_alias->documentation(); } virtual int docLine() const - { return m_def->docLine(); } + { return m_alias->docLine(); } virtual QCString docFile() const - { return m_def->docFile(); } + { return m_alias->docFile(); } virtual QCString briefDescription(bool abbreviate=FALSE) const - { return m_def->briefDescription(abbreviate); } + { return m_alias->briefDescription(abbreviate); } virtual QCString briefDescriptionAsTooltip() const - { return m_def->briefDescriptionAsTooltip(); } + { return m_alias->briefDescriptionAsTooltip(); } virtual int briefLine() const - { return m_def->briefLine(); } + { return m_alias->briefLine(); } virtual QCString inbodyDocumentation() const - { return m_def->inbodyDocumentation(); } + { return m_alias->inbodyDocumentation(); } virtual QCString inbodyFile() const - { return m_def->inbodyFile(); } + { return m_alias->inbodyFile(); } virtual int inbodyLine() const - { return m_def->inbodyLine(); } + { return m_alias->inbodyLine(); } virtual QCString briefFile() const - { return m_def->briefFile(); } + { return m_alias->briefFile(); } virtual QCString getDefFileName() const - { return m_def->getDefFileName(); } + { return m_alias->getDefFileName(); } virtual QCString getDefFileExtension() const - { return m_def->getDefFileExtension(); } + { return m_alias->getDefFileExtension(); } virtual int getDefLine() const - { return m_def->getDefLine(); } + { return m_alias->getDefLine(); } virtual int getDefColumn() const - { return m_def->getDefColumn(); } + { return m_alias->getDefColumn(); } virtual bool hasDocumentation() const - { return m_def->hasDocumentation(); } + { return m_alias->hasDocumentation(); } virtual bool hasUserDocumentation() const - { return m_def->hasUserDocumentation(); } + { return m_alias->hasUserDocumentation(); } virtual bool isVisibleInProject() const - { return m_def->isVisibleInProject(); } + { return m_alias->isVisibleInProject(); } virtual bool isVisible() const - { return m_def->isVisible(); } + { return m_alias->isVisible(); } virtual bool isHidden() const - { return m_def->isHidden(); } + { return m_alias->isHidden(); } virtual bool isArtificial() const - { return m_def->isArtificial(); } + { return m_alias->isArtificial(); } virtual QCString getReference() const - { return m_def->getReference(); } + { return m_alias->getReference(); } virtual bool isReference() const - { return m_def->isReference(); } + { return m_alias->isReference(); } virtual QCString externalReference(const QCString &relPath) const - { return m_def->externalReference(relPath); } + { return m_alias->externalReference(relPath); } virtual int getStartDefLine() const - { return m_def->getStartDefLine(); } + { return m_alias->getStartDefLine(); } virtual int getStartBodyLine() const - { return m_def->getStartBodyLine(); } + { return m_alias->getStartBodyLine(); } virtual int getEndBodyLine() const - { return m_def->getEndBodyLine(); } + { return m_alias->getEndBodyLine(); } virtual FileDef *getBodyDef() const - { return m_def->getBodyDef(); } + { return m_alias->getBodyDef(); } virtual SrcLangExt getLanguage() const - { return m_def->getLanguage(); } + { return m_alias->getLanguage(); } virtual GroupList *partOfGroups() const - { return m_def->partOfGroups(); } + { return m_alias->partOfGroups(); } virtual bool isLinkableViaGroup() const - { return m_def->isLinkableViaGroup(); } + { return m_alias->isLinkableViaGroup(); } virtual const RefItemVector &xrefListItems() const - { return m_def->xrefListItems(); } + { return m_alias->xrefListItems(); } virtual const Definition *findInnerCompound(const char *name) const - { return m_def->findInnerCompound(name); } + { return m_alias->findInnerCompound(name); } virtual Definition *getOuterScope() const { return const_cast<Definition*>(m_scope); } virtual std::vector<const MemberDef *> getReferencesMembers() const - { return m_def->getReferencesMembers(); } + { return m_alias->getReferencesMembers(); } virtual std::vector<const MemberDef *> getReferencedByMembers() const - { return m_def->getReferencedByMembers(); } + { return m_alias->getReferencedByMembers(); } virtual bool hasSections() const - { return m_def->hasSections(); } + { return m_alias->hasSections(); } virtual bool hasSources() const - { return m_def->hasSources(); } + { return m_alias->hasSources(); } virtual bool hasBriefDescription() const - { return m_def->hasBriefDescription(); } + { return m_alias->hasBriefDescription(); } virtual QCString id() const - { return m_def->id(); } + { return m_alias->id(); } virtual const SectionRefs &getSectionRefs() const - { return m_def->getSectionRefs(); } + { return m_alias->getSectionRefs(); } virtual QCString navigationPathAsString() const - { return m_def->navigationPathAsString(); } + { return m_alias->navigationPathAsString(); } virtual QCString pathFragment() const - { return m_def->pathFragment(); } + { return m_alias->pathFragment(); } protected: - const Definition *getAlias() const { return m_def; } + const Definition *getAlias() const { return m_alias; } const Definition *getScope() const { return m_scope; } private: - virtual void setCookie(Cookie *cookie) const { delete m_cookie; m_cookie = cookie; } - virtual Cookie *cookie() const { return m_cookie; } + virtual Definition *toDefinition_() { return this; } + virtual DefinitionMutable *toDefinitionMutable_() { return 0; } + virtual const DefinitionImpl *toDefinitionImpl_() const { return 0; } + + virtual void setCookie(Definition::Cookie *cookie) const { delete m_cookie; m_cookie = cookie; } + virtual Definition::Cookie *cookie() const { return m_cookie; } virtual void _setSymbolName(const QCString &name) { m_symbolName = name; } virtual QCString _symbolName() const { return m_symbolName; } + DefinitionAliasImpl m_impl; const Definition *m_scope; - const Definition *m_def; - mutable Cookie *m_cookie; + const Definition *m_alias; + mutable Definition::Cookie *m_cookie; QCString m_symbolName; }; |