7ac940d278
There were O(n^2) issues all over the places where we walk these lists. This takes the opening time from 10m+ to 4m. (*) Invalidate the sorting on a much less aggressive basis, by having the SwTextAttr objects tell the SwpHints object when start and end pos changes (*) Add a bool field to indicate when the maps become unsorted, so we can resort them only when we actually need sorted access (*) Add an API for walking the list of SwTextAttr* without triggering sorting, which is particularly important when the RedlineManager starts moving things around. (*) Add various asserts to catch code that tries to iterate over these sorted lists but triggers resorting during the loop. I also moved some of the logic around so that instead of update hint delete hint insert hint it now goes delete hint update hint insert hint which means that the needToSort flag does not get set because the hint is disconnected while it is being updated. Change-Id: Ie153ddafc9ef9e3470d588db2be2457c676232a8 Reviewed-on: https://gerrit.libreoffice.org/73090 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
#ifndef INCLUDED_SW_INC_TXTTXMRK_HXX
|
|
#define INCLUDED_SW_INC_TXTTXMRK_HXX
|
|
|
|
#include "txatbase.hxx"
|
|
|
|
class SwTextNode;
|
|
class SwDoc;
|
|
|
|
// Attribute for indices/tables of contents.
|
|
class SAL_DLLPUBLIC_RTTI SwTextTOXMark : public SwTextAttrEnd
|
|
{
|
|
SwTextNode * m_pTextNode;
|
|
sal_Int32 * m_pEnd; // 0 if SwTOXMark without AlternativeText
|
|
|
|
public:
|
|
SwTextTOXMark( SwTOXMark& rAttr,
|
|
sal_Int32 const nStart, sal_Int32 const*const pEnd);
|
|
virtual ~SwTextTOXMark() override;
|
|
|
|
virtual const sal_Int32 *GetEnd() const override; // SwTextAttr
|
|
virtual void SetEnd(sal_Int32) override; // SwTextAttr
|
|
|
|
void CopyTOXMark( SwDoc* pDestDoc );
|
|
|
|
// get and set TextNode pointer
|
|
const SwTextNode* GetpTextNd() const { return m_pTextNode; }
|
|
inline const SwTextNode& GetTextNode() const;
|
|
void ChgTextNode( SwTextNode* pNew ) { m_pTextNode = pNew; }
|
|
};
|
|
|
|
inline const SwTextNode& SwTextTOXMark::GetTextNode() const
|
|
{
|
|
assert( m_pTextNode );
|
|
return *m_pTextNode;
|
|
}
|
|
|
|
#endif
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|