commit 05d3a649521e0e8524209ae9deae75c30ff01e93
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Sat Jul 21 23:58:47 2018 +0200
Use swap in InsetText::updateBuffer for notes ad friends
Avoid as much as possible to do full copies of all counters, since
that can be exensive. Unfortunately, it is just posible when we want
to restore the saved counters.
Explanations why we use friend swap is here:
https://stackoverflow.com/questions/5695548/public-friend-swap-member-function
Part of bug #5973.
---
src/Counters.cpp | 8 ++++++++
src/Counters.h | 3 +++
src/insets/InsetText.cpp | 4 ++--
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/Counters.cpp b/src/Counters.cpp
index 2daac53..3bb4d07 100644
--- a/src/Counters.cpp
+++ b/src/Counters.cpp
@@ -697,4 +697,12 @@ void Counters::endEnvironment()
}
+void swap(Counters & c1, Counters & c2)
+{
+ Counters tmp = move(c1);
+ c1 = move(c2);
+ c2 = move(tmp);
+}
+
+
} // namespace lyx
diff --git a/src/Counters.h b/src/Counters.h
index 536dcc1..f8bb0fa 100644
--- a/src/Counters.h
+++ b/src/Counters.h
@@ -239,6 +239,9 @@ private:
std::vector<docstring> counter_stack_;
/// Same, but for last layout.
std::vector<Layout const *> layout_stack_;
+
+ ///
+ friend void swap(Counters &, Counters &);
};
} // namespace lyx
diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp
index 74f60e4..d009357 100644
--- a/src/insets/InsetText.cpp
+++ b/src/insets/InsetText.cpp
@@ -814,13 +814,13 @@ void InsetText::updateBuffer(ParIterator const & it,
UpdateType utype)
// Note that we do not need to call:
// tclass.counters().clearLastLayout()
// since we are saving and restoring the existing counters, etc.
- Counters const savecnt = tclass.counters();
+ Counters savecnt = tclass.counters();
tclass.counters().reset();
// we need float information even in note insets (#9760)
tclass.counters().current_float(savecnt.current_float());
tclass.counters().isSubfloat(savecnt.isSubfloat());
buffer().updateBuffer(it2, utype);
- tclass.counters() = savecnt;
+ swap(tclass.counters(), savecnt);
}
}