summaryrefslogtreecommitdiffstats
path: root/src/definition.h
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-11-12 18:41:11 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-11-13 19:43:43 (GMT)
commit784313b82442747843145429d39e5d257256b7b0 (patch)
tree195922e2d73dce62f125221bf1f30e0bf4b37f02 /src/definition.h
parent075229e586b391c3ec7ad79597aaeae392ca64e5 (diff)
downloadDoxygen-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.h23
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 &lt) 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