[LyX/master] Cache the MathData version of macro definition
Jean-Marc Lasgouttes <[email protected]> Sat, 06 Jun 2026 19:36:15 +0000
| Newsgroups | gmane.editors.lyx.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit f043262c39126cccdea7e683345cddd0e9ef3962 Author: Jean-Marc Lasgouttes <[email protected]> Date: Sat Jun 6 21:33:21 2026 +0200 Cache the MathData version of macro definition Add a member definition_data_ to MathData to avoid having to convert the string definition over and over. Improves performance. Part of ticket #13321. --- src/mathed/InsetMathMacro.cpp | 7 ++----- src/mathed/MacroTable.cpp | 7 ++++--- src/mathed/MacroTable.h | 8 ++++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mathed/InsetMathMacro.cpp b/src/mathed/InsetMathMacro.cpp index 290b461264..8495b53b2c 100644 --- a/src/mathed/InsetMathMacro.cpp +++ b/src/mathed/InsetMathMacro.cpp @@ -988,11 +988,8 @@ void InsetMathMacro::validate(LaTeXFeatures & features) const if (displayMode() == DISPLAY_NORMAL) d->definition_.validate(features); else if (displayMode() == DISPLAY_INIT) { - if (MacroData const * data = buffer().getMacro(name())) { - MathData md(const_cast<Buffer *>(&buffer())); - asMathData(data->definition(), md); - md.validate(features); - } + if (MacroData const * data = buffer().getMacro(name())) + data->definitionData().validate(features); } } features.activeMacros().erase(name()); diff --git a/src/mathed/MacroTable.cpp b/src/mathed/MacroTable.cpp index f8d4322cde..6ac335a9a2 100644 --- a/src/mathed/MacroTable.cpp +++ b/src/mathed/MacroTable.cpp @@ -39,17 +39,17 @@ namespace lyx { ///////////////////////////////////////////////////////////////////// MacroData::MacroData(const Buffer * buf) - : buffer_(buf), queried_(true) + : buffer_(buf), queried_(true), definition_data_(const_cast<Buffer *>(buf)) {} MacroData::MacroData(Buffer const * buf, DocIterator const & pos) - : buffer_(buf), pos_(pos) + : buffer_(buf), pos_(pos), definition_data_(const_cast<Buffer *>(buf)) {} MacroData::MacroData(Buffer const * buf, InsetMathMacroTemplate const & macro) - : buffer_(buf) + : buffer_(buf), definition_data_(const_cast<Buffer *>(buf)) { queryData(macro); } @@ -146,6 +146,7 @@ void MacroData::queryData(InsetMathMacroTemplate const & macro) const queried_ = true; definition_ = macro.definition(); + asMathData(definition_, definition_data_); numargs_ = macro.numArgs(); display_ = macro.displayDefinition(); redefinition_ = macro.redefinition(); diff --git a/src/mathed/MacroTable.h b/src/mathed/MacroTable.h index 0c905d6c3c..2042280f51 100644 --- a/src/mathed/MacroTable.h +++ b/src/mathed/MacroTable.h @@ -15,6 +15,8 @@ #include "DocIterator.h" +#include "mathed/MathData.h" + #include "support/docstring.h" #include <map> @@ -23,8 +25,6 @@ namespace lyx { -class Buffer; -class MathData; class InsetMathMacroTemplate; class latexkeys; @@ -47,6 +47,8 @@ public: /// docstring const & definition() const { updateData(); return definition_; } /// + MathData const & definitionData() const { updateData(); return definition_data_; } + /// docstring const & display() const { updateData(); return display_; } /// arity including optional arguments (if there is any) size_t numargs() const { updateData(); return numargs_; } @@ -124,6 +126,8 @@ private: /// mutable docstring definition_; /// + mutable MathData definition_data_; + /// mutable size_t numargs_ = 0; /// mutable docstring display_; -- lyx-cvs mailing list [email protected] https://lists.lyx.org/mailman/listinfo/lyx-cvs