diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2020-11-12 18:41:11 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2020-11-13 19:43:43 (GMT) |
commit | 784313b82442747843145429d39e5d257256b7b0 (patch) | |
tree | 195922e2d73dce62f125221bf1f30e0bf4b37f02 /src/definition.h | |
parent | 075229e586b391c3ec7ad79597aaeae392ca64e5 (diff) | |
download | Doxygen-784313b82442747843145429d39e5d257256b7b0.zip Doxygen-784313b82442747843145429d39e5d257256b7b0.tar.gz Doxygen-784313b82442747843145429d39e5d257256b7b0.tar.bz2 |
Refactoring: replacing dynamic_cast by static_cast to improve performance
Diffstat (limited to 'src/definition.h')
-rw-r--r-- | src/definition.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/definition.h b/src/definition.h index 94c95b8..50a481d 100644 --- a/src/definition.h +++ b/src/definition.h @@ -41,6 +41,7 @@ class GroupList; class SectionInfo; class Definition; class DefinitionMutable; +class DefinitionImpl; class FTextStream; /** Data associated with a detailed description. */ @@ -95,7 +96,6 @@ class Definition TypeDir = 7 }; - static DefinitionMutable *make_mutable(const Definition *); //----------------------------------------------------------------------------------- // ---- getters ----- @@ -300,11 +300,20 @@ class Definition // --------------------------------- virtual ~Definition() = default; + + private: + friend class DefinitionImpl; + friend DefinitionMutable* toDefinitionMutable(Definition *); + friend DefinitionMutable* toDefinitionMutable(const Definition *); + virtual DefinitionMutable *toDefinitionMutable_() = 0; + virtual const DefinitionImpl *toDefinitionImpl_() const = 0; }; -class DefinitionMutable : virtual public Definition +class DefinitionMutable { public: + + //----------------------------------------------------------------------------------- // ---- setters ----- //----------------------------------------------------------------------------------- @@ -380,11 +389,17 @@ class DefinitionMutable : virtual public Definition virtual void writeDocAnchorsToTagFile(FTextStream &) const = 0; virtual void writeToc(OutputList &ol, const LocalToc <) const = 0; + // --------------------------------- + virtual ~DefinitionMutable() = default; + private: + friend Definition* toDefinition(DefinitionMutable *); + virtual Definition *toDefinition_() = 0; }; -inline DefinitionMutable *Definition::make_mutable(const Definition *def) -{ return dynamic_cast<DefinitionMutable*>(const_cast<Definition*>(def)); } +Definition *toDefinition(DefinitionMutable *dm); +DefinitionMutable *toDefinitionMutable(Definition *d); +DefinitionMutable *toDefinitionMutable(const Definition *d); /** Reads a fragment from file \a fileName starting with line \a startLine * and ending with line \a endLine. The result is returned as a string |