mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
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.
This commit is contained in:
parent
4549f46a43
commit
05d3a64952
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user