summaryrefslogtreecommitdiff
path: root/sw/source
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2021-08-10 14:08:11 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-08-10 15:35:28 +0200
commit4d50939a7b37cbaeceeddebabfc435190e079781 (patch)
tree39b9610fd73fa005e3f852f488d3b94a8d5b3d2a /sw/source
parenteeda1b35a6e87d5349545464da33d997c52f15e3 (diff)
tdf#136991 Open RTF with colored text
We spend most of the time in MergePortions, and the resorting is a significant part of that, so only resort if we actually have to. This shaves 10% off the load time for this document. Change-Id: I2380c5aa744f6d9c82195bb2a17ced2ce7616e9a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120269 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw/source')
-rw-r--r--sw/source/core/txtnode/ndhints.cxx54
1 files changed, 36 insertions, 18 deletions
diff --git a/sw/source/core/txtnode/ndhints.cxx b/sw/source/core/txtnode/ndhints.cxx
index cd136f21a9c5..194aafc95db1 100644
--- a/sw/source/core/txtnode/ndhints.cxx
+++ b/sw/source/core/txtnode/ndhints.cxx
@@ -411,36 +411,54 @@ bool SwpHints::Check(bool bPortionsMerged) const
void SwpHints::Resort() const
{
- auto & rStartMap = const_cast<SwpHints*>(this)->m_HintsByStart;
- std::sort(rStartMap.begin(), rStartMap.end(), CompareSwpHtStart);
- auto & rEndMap = const_cast<SwpHints*>(this)->m_HintsByEnd;
- std::sort(rEndMap.begin(), rEndMap.end(), CompareSwpHtEnd());
- auto & rWhichStartMap = const_cast<SwpHints*>(this)->m_HintsByWhichAndStart;
- std::sort(rWhichStartMap.begin(), rWhichStartMap.end(), CompareSwpHtWhichStart());
- m_bStartMapNeedsSorting = false;
- m_bEndMapNeedsSorting = false;
- m_bWhichMapNeedsSorting = false;
+ if (m_bStartMapNeedsSorting)
+ {
+ auto & rStartMap = const_cast<SwpHints*>(this)->m_HintsByStart;
+ std::sort(rStartMap.begin(), rStartMap.end(), CompareSwpHtStart);
+ m_bStartMapNeedsSorting = false;
+ }
+ if (m_bEndMapNeedsSorting)
+ {
+ auto & rEndMap = const_cast<SwpHints*>(this)->m_HintsByEnd;
+ std::sort(rEndMap.begin(), rEndMap.end(), CompareSwpHtEnd());
+ m_bEndMapNeedsSorting = false;
+ }
+ if (m_bWhichMapNeedsSorting)
+ {
+ auto & rWhichStartMap = const_cast<SwpHints*>(this)->m_HintsByWhichAndStart;
+ std::sort(rWhichStartMap.begin(), rWhichStartMap.end(), CompareSwpHtWhichStart());
+ m_bWhichMapNeedsSorting = false;
+ }
}
void SwpHints::ResortStartMap() const
{
- auto & rStartMap = const_cast<SwpHints*>(this)->m_HintsByStart;
- std::sort(rStartMap.begin(), rStartMap.end(), CompareSwpHtStart);
- m_bStartMapNeedsSorting = false;
+ if (m_bStartMapNeedsSorting)
+ {
+ auto & rStartMap = const_cast<SwpHints*>(this)->m_HintsByStart;
+ std::sort(rStartMap.begin(), rStartMap.end(), CompareSwpHtStart);
+ m_bStartMapNeedsSorting = false;
+ }
}
void SwpHints::ResortEndMap() const
{
- auto & rEndMap = const_cast<SwpHints*>(this)->m_HintsByEnd;
- std::sort(rEndMap.begin(), rEndMap.end(), CompareSwpHtEnd());
- m_bEndMapNeedsSorting = false;
+ if (m_bEndMapNeedsSorting)
+ {
+ auto & rEndMap = const_cast<SwpHints*>(this)->m_HintsByEnd;
+ std::sort(rEndMap.begin(), rEndMap.end(), CompareSwpHtEnd());
+ m_bEndMapNeedsSorting = false;
+ }
}
void SwpHints::ResortWhichMap() const
{
- m_bWhichMapNeedsSorting = false;
- auto & rWhichStartMap = const_cast<SwpHints*>(this)->m_HintsByWhichAndStart;
- std::sort(rWhichStartMap.begin(), rWhichStartMap.end(), CompareSwpHtWhichStart());
+ if (m_bWhichMapNeedsSorting)
+ {
+ auto & rWhichStartMap = const_cast<SwpHints*>(this)->m_HintsByWhichAndStart;
+ std::sort(rWhichStartMap.begin(), rWhichStartMap.end(), CompareSwpHtWhichStart());
+ m_bWhichMapNeedsSorting = false;
+ }
}
size_t SwpHints::GetFirstPosSortedByWhichAndStart( sal_uInt16 nWhich ) const