[LyX features/cleanup/updateMacros] Some comments and some minor re-organization
Richard Kimberly Heck
rikiheck at lyx.org
Mon Nov 9 20:26:57 UTC 2020
The branch, cleanup/updateMacros, has been updated.
- Log -----------------------------------------------------------------
commit 4a6d50251a59f6f817ecbbbdb0d3295ee6a3bf5b
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date: Mon Nov 9 15:56:01 2020 -0500
Some comments and some minor re-organization
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 7ed1685..7237737 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -214,7 +214,6 @@ public:
NamePositionScopeMacroMap macros;
/// positions of child buffers in the buffer
- typedef map<Buffer const * const, DocIterator> BufferPositionMap;
struct ScopeBuffer {
ScopeBuffer() : buffer(nullptr) {}
ScopeBuffer(DocIterator const & s, Buffer const * b)
@@ -222,10 +221,11 @@ public:
DocIterator scope;
Buffer const * buffer;
};
- typedef map<DocIterator, ScopeBuffer> PositionScopeBufferMap;
/// position of children buffers in this buffer
+ typedef map<Buffer const * const, DocIterator> BufferPositionMap;
BufferPositionMap children_positions;
/// map from children inclusion positions to their scope and their buffer
+ typedef map<DocIterator, ScopeBuffer> PositionScopeBufferMap;
PositionScopeBufferMap position_to_children;
/// Contains the old buffer filePath() while saving-as, or the
diff --git a/src/mathed/MacroTable.h b/src/mathed/MacroTable.h
index ab3c6b4..a6996da 100644
--- a/src/mathed/MacroTable.h
+++ b/src/mathed/MacroTable.h
@@ -112,6 +112,10 @@ private:
void updateData() const;
///
Buffer const * buffer_;
+ // FIXME This is probably a large part of why updateMacros is
+ // so expensive. We are, it would seem, recreating these objects
+ // from scratch each time through. That seems unnecessary, if what
+ // usually needs updating is just the pos_ member.
/// The position of the definition in the buffer.
/// There is no guarantee it stays valid if the buffer
/// changes. But it (normally) exists only until the
@@ -121,13 +125,20 @@ private:
/// returns its defaults values and the user sees unfolded
/// macros.
mutable DocIterator pos_;
- ///
+ /// flag that tells us whether our cached info is valid. used
+ /// with lazy version.
mutable bool queried_ = false;
- ///
+ // At the moment, it seems to me as if most of the other members
+ // could be replaced by a pointer to the associated macro (and so
+ // that one eliminated. I.e.:
+ // InsetMathMacroTemplate const * const ourmacro_;
+ // docstring definition() { return ourmacro_->definition(); }
+ // etc.
+ /// the macro definition
mutable docstring definition_;
///
mutable size_t numargs_ = 0;
- ///
+ /// what we use (a kind of LyX macro) for display in the work area
mutable docstring display_;
///
latexkeys const * sym_ = nullptr;
commit 3dddcefc3c8ee388003d3af67dc825163c6ed456
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date: Mon Nov 9 15:39:20 2020 -0500
Properly implement the singleton pattern
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 44b3178..7ed1685 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -3686,7 +3686,7 @@ MacroData const * Buffer::getMacro(docstring const & name,
}
if (global) {
- data = MacroTable::globalMacros().get(name);
+ data = MacroTable::get().getMacro(name);
if (data != nullptr)
return data;
}
diff --git a/src/mathed/InsetMathMacro.cpp b/src/mathed/InsetMathMacro.cpp
index 57294c0..600562f 100644
--- a/src/mathed/InsetMathMacro.cpp
+++ b/src/mathed/InsetMathMacro.cpp
@@ -938,7 +938,7 @@ MacroData const * InsetMathMacro::macroBackup() const
{
if (macro())
return &d->macroBackup_;
- if (MacroData const * data = MacroTable::globalMacros().get(name()))
+ if (MacroData const * data = MacroTable::get().getMacro(name()))
return data;
return nullptr;
}
@@ -957,7 +957,7 @@ void InsetMathMacro::validate(LaTeXFeatures & features) const
features.require(d->required_);
else if (!d->macro_) {
// Update requires for known global macros.
- MacroData const * data = MacroTable::globalMacros().get(name());
+ MacroData const * data = MacroTable::get().getMacro(name());
if (data && !data->required().empty())
features.require(data->required());
}
diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp
index ada0400..19aa745 100644
--- a/src/mathed/InsetMathNest.cpp
+++ b/src/mathed/InsetMathNest.cpp
@@ -2106,7 +2106,7 @@ MathCompletionList::MathCompletionList(Cursor const & cur)
// fill in global macros
macros.clear();
- MacroTable::globalMacros().getMacroNames(macros, false);
+ MacroTable::get().getMacroNames(macros, false);
//lyxerr << "Globals completion macros: ";
for (it = macros.begin(); it != macros.end(); ++it) {
//lyxerr << "\\" + *it << " ";
diff --git a/src/mathed/MacroTable.cpp b/src/mathed/MacroTable.cpp
index 218c849..2bc427b 100644
--- a/src/mathed/MacroTable.cpp
+++ b/src/mathed/MacroTable.cpp
@@ -215,14 +215,14 @@ int MacroData::write(odocstream & os, bool overwriteRedefinition) const
//
/////////////////////////////////////////////////////////////////////
-MacroTable & MacroTable::globalMacros()
+MacroTable & MacroTable::get()
{
static MacroTable theGlobalMacros;
return theGlobalMacros;
}
-MacroData const * MacroTable::get(docstring const & name) const
+MacroData const * MacroTable::getMacro(docstring const & name) const
{
const_iterator it = find(name);
return it == end() ? 0 : &it->second;
diff --git a/src/mathed/MacroTable.h b/src/mathed/MacroTable.h
index 77b306f..ab3c6b4 100644
--- a/src/mathed/MacroTable.h
+++ b/src/mathed/MacroTable.h
@@ -160,19 +160,22 @@ class MacroSet : public std::set<MacroData const *> {};
class MacroTable : public std::map<docstring, MacroData>
{
public:
+ /// We are a singleton
+ MacroTable() = default;
+ MacroTable(MacroTable const &) = delete;
+ void operator=(MacroTable const &) = delete;
+ /// the global list: our unique instance
+ static MacroTable & get();
/// Parse full "\\def..." or "\\newcommand..." or ...
iterator insert(Buffer * buf, docstring const & definition);
/// Insert pre-digested macro definition
iterator insert(docstring const & name, MacroData const & data);
///
- MacroData const * get(docstring const & name) const;
+ MacroData const * getMacro(docstring const & name) const;
///
void dump();
///
void getMacroNames(std::set<docstring> & names, bool gethidden) const;
-
- /// the global list
- static MacroTable & globalMacros();
};
diff --git a/src/mathed/MathFactory.cpp b/src/mathed/MathFactory.cpp
index 54fe012..f956973 100644
--- a/src/mathed/MathFactory.cpp
+++ b/src/mathed/MathFactory.cpp
@@ -202,7 +202,7 @@ void initSymbols()
required = "";
} else
htmlname = xmlname = "";
- MacroTable::iterator it = MacroTable::globalMacros().insert(
+ MacroTable::iterator it = MacroTable::get().insert(
0, from_utf8(macro));
if (!extra.empty() || !htmlname.empty() || !xmlname.empty() || !required.empty()) {
MathWordList::iterator wit = theMathWordList.find(it->first);
-----------------------------------------------------------------------
Summary of changes:
src/Buffer.cpp | 6 +++---
src/mathed/InsetMathMacro.cpp | 4 ++--
src/mathed/InsetMathNest.cpp | 2 +-
src/mathed/MacroTable.cpp | 4 ++--
src/mathed/MacroTable.h | 28 +++++++++++++++++++++-------
src/mathed/MathFactory.cpp | 2 +-
6 files changed, 30 insertions(+), 16 deletions(-)
hooks/post-receive
--
Repository for new features
More information about the lyx-cvs
mailing list