From 05d3a649521e0e8524209ae9deae75c30ff01e93 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Sat, 21 Jul 2018 23:58:47 +0200 Subject: [PATCH] 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 2daac53224..3bb4d07758 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 536dcc17a6..f8bb0fa6aa 100644 --- a/src/Counters.h +++ b/src/Counters.h @@ -239,6 +239,9 @@ private: std::vector counter_stack_; /// Same, but for last layout. std::vector layout_stack_; + + /// + friend void swap(Counters &, Counters &); }; } // namespace lyx diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp index 74f60e422e..d00935784d 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); } } -- 2.39.2