sw/Library_sw.mk | 1 sw/inc/ndarr.hxx | 11 +- sw/inc/ndindex.hxx | 121 ++++++++++++++++++++++++++------ sw/inc/ring.hxx | 2 sw/source/core/docnode/ndindex.cxx | 138 ------------------------------------- sw/source/core/docnode/nodes.cxx | 64 +---------------- 6 files changed, 108 insertions(+), 229 deletions(-)
New commits: commit a6c0583675b6fe4210ae8249728fe5d4df125f5c Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Mon Dec 22 00:03:44 2014 +0100 remove duplicated code Change-Id: Id306d1dc75ef9d5ec5ec2e48be318e0632ea2377 diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index b6e7ca2..2663fcb 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -261,14 +261,7 @@ inline SwNodeIndex& SwNodeIndex::operator=( sal_uLong nWert ) SwNodeIndex& SwNodeIndex::operator=( const SwNodeIndex& rIdx ) { - if( &pNd->GetNodes() != &rIdx.pNd->GetNodes() ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = rIdx.pNd; - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = rIdx.pNd; + *this = *(rIdx.pNd); return *this; } @@ -287,27 +280,13 @@ SwNodeIndex& SwNodeIndex::operator=( const SwNode& rNd ) SwNodeIndex& SwNodeIndex::Assign( SwNodes& rNds, sal_uLong nIdx ) { - if( &pNd->GetNodes() != &rNds ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = rNds[ nIdx ]; - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = rNds[ nIdx ]; + *this = *rNds[ nIdx ]; return *this; } SwNodeIndex& SwNodeIndex::Assign( const SwNode& rNd, long nOffset ) { - if( &pNd->GetNodes() != &rNd.GetNodes() ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = const_cast<SwNode*>(&rNd); - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = const_cast<SwNode*>(&rNd); + *this = rNd; if( nOffset ) pNd = pNd->GetNodes()[ pNd->GetIndex() + nOffset ]; commit 583c949612ac40c21b02886f4d37a45212946138 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Dec 21 23:05:47 2014 +0100 c-style cast to const_cast Change-Id: Ie5d8483305f4ef2d76c291fcb8c707a69ba9cf52 diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index f31c851..b6e7ca2 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -75,7 +75,7 @@ public: if( nDiff ) pNd = rNd.GetNodes()[ rNd.GetIndex() + nDiff ]; else - pNd = (SwNode*)&rNd; + pNd = const_cast<SwNode*>(&rNd); RegisterIndex( pNd->GetNodes() ); } @@ -277,11 +277,11 @@ SwNodeIndex& SwNodeIndex::operator=( const SwNode& rNd ) if( &pNd->GetNodes() != &rNd.GetNodes() ) { DeRegisterIndex( pNd->GetNodes() ); - pNd = (SwNode*)&rNd; + pNd = const_cast<SwNode*>(&rNd); RegisterIndex( pNd->GetNodes() ); } else - pNd = (SwNode*)&rNd; + pNd = const_cast<SwNode*>(&rNd); return *this; } @@ -303,11 +303,11 @@ SwNodeIndex& SwNodeIndex::Assign( const SwNode& rNd, long nOffset ) if( &pNd->GetNodes() != &rNd.GetNodes() ) { DeRegisterIndex( pNd->GetNodes() ); - pNd = (SwNode*)&rNd; + pNd = const_cast<SwNode*>(&rNd); RegisterIndex( pNd->GetNodes() ); } else - pNd = (SwNode*)&rNd; + pNd = const_cast<SwNode*>(&rNd); if( nOffset ) pNd = pNd->GetNodes()[ pNd->GetIndex() + nOffset ]; commit 310eb66522ff30492e8b3cd86dbafaeb52cdff90 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sat Dec 20 16:55:24 2014 +0100 inline stream operator and remove object Change-Id: I9df9a56eca662c6adf0a2cf4ef25a917da8dc609 diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk index f9a4e03..2af35f2 100644 --- a/sw/Library_sw.mk +++ b/sw/Library_sw.mk @@ -224,7 +224,6 @@ $(eval $(call gb_Library_add_exception_objects,sw,\ sw/source/core/docnode/cancellablejob \ sw/source/core/docnode/finalthreadmanager \ sw/source/core/docnode/ndcopy \ - sw/source/core/docnode/ndindex \ sw/source/core/docnode/ndnotxt \ sw/source/core/docnode/ndnum \ sw/source/core/docnode/ndsect \ diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 72f28de..f31c851 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -124,7 +124,10 @@ public: SwNode& GetNode() const { return *pNd; } }; -std::ostream &operator <<(std::ostream& s, const SwNodeIndex& index); +inline std::ostream &operator <<(std::ostream& s, const SwNodeIndex& index) +{ + return s << "SwNodeIndex (node " << index.GetIndex() << ")"; +}; // SwRange diff --git a/sw/source/core/docnode/ndindex.cxx b/sw/source/core/docnode/ndindex.cxx deleted file mode 100644 index eed9080..0000000 --- a/sw/source/core/docnode/ndindex.cxx +++ /dev/null @@ -1,28 +0,0 @@ -/* -*- 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 . - */ - -#include "ndindex.hxx" - - -std::ostream &operator <<(std::ostream& s, const SwNodeIndex& index) -{ - return s << "SwNodeIndex (node " << index.GetIndex() << ")"; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 96c7fff36eb2ed21bba604b3c0c376559e14539c Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sat Dec 20 16:53:29 2014 +0100 inline Assign Change-Id: Ibeb8d7b8e83d432a502707f83a8fde7900596aec diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 51ae682..72f28de 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -114,8 +114,8 @@ public: inline sal_uLong GetIndex() const; // Enables assignments without creation of a temporary object. - SwNodeIndex& Assign( SwNodes& rNds, sal_uLong ); - SwNodeIndex& Assign( const SwNode& rNd, long nOffset = 0 ); + inline SwNodeIndex& Assign( SwNodes& rNds, sal_uLong ); + inline SwNodeIndex& Assign( const SwNode& rNd, long nOffset = 0 ); // Gets pointer on NodesArray. inline const SwNodes& GetNodes() const; @@ -282,6 +282,36 @@ SwNodeIndex& SwNodeIndex::operator=( const SwNode& rNd ) return *this; } +SwNodeIndex& SwNodeIndex::Assign( SwNodes& rNds, sal_uLong nIdx ) +{ + if( &pNd->GetNodes() != &rNds ) + { + DeRegisterIndex( pNd->GetNodes() ); + pNd = rNds[ nIdx ]; + RegisterIndex( pNd->GetNodes() ); + } + else + pNd = rNds[ nIdx ]; + return *this; +} + +SwNodeIndex& SwNodeIndex::Assign( const SwNode& rNd, long nOffset ) +{ + if( &pNd->GetNodes() != &rNd.GetNodes() ) + { + DeRegisterIndex( pNd->GetNodes() ); + pNd = (SwNode*)&rNd; + RegisterIndex( pNd->GetNodes() ); + } + else + pNd = (SwNode*)&rNd; + + if( nOffset ) + pNd = pNd->GetNodes()[ pNd->GetIndex() + nOffset ]; + + return *this; +} + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/docnode/ndindex.cxx b/sw/source/core/docnode/ndindex.cxx index 4f563a2..eed9080 100644 --- a/sw/source/core/docnode/ndindex.cxx +++ b/sw/source/core/docnode/ndindex.cxx @@ -19,61 +19,6 @@ #include "ndindex.hxx" -SwNodeIndex& SwNodeIndex::operator=( const SwNodeIndex& rIdx ) -{ - if( &pNd->GetNodes() != &rIdx.pNd->GetNodes() ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = rIdx.pNd; - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = rIdx.pNd; - return *this; -} - -SwNodeIndex& SwNodeIndex::operator=( const SwNode& rNd ) -{ - if( &pNd->GetNodes() != &rNd.GetNodes() ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = (SwNode*)&rNd; - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = (SwNode*)&rNd; - return *this; -} - -SwNodeIndex& SwNodeIndex::Assign( SwNodes& rNds, sal_uLong nIdx ) -{ - if( &pNd->GetNodes() != &rNds ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = rNds[ nIdx ]; - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = rNds[ nIdx ]; - return *this; -} - -SwNodeIndex& SwNodeIndex::Assign( const SwNode& rNd, long nOffset ) -{ - if( &pNd->GetNodes() != &rNd.GetNodes() ) - { - DeRegisterIndex( pNd->GetNodes() ); - pNd = (SwNode*)&rNd; - RegisterIndex( pNd->GetNodes() ); - } - else - pNd = (SwNode*)&rNd; - - if( nOffset ) - pNd = pNd->GetNodes()[ pNd->GetIndex() + nOffset ]; - - return *this; -} std::ostream &operator <<(std::ostream& s, const SwNodeIndex& index) { commit eaf3774752869e0322a340d5be4ab1b328f3632a Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sat Dec 20 16:51:25 2014 +0100 inline operator= Change-Id: I2a74b9821072025cdf374d5e157411136e08ebec diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index ba3dc47..51ae682 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -107,8 +107,8 @@ public: inline bool operator!=( sal_uLong nWert ) const; inline SwNodeIndex& operator=( sal_uLong ); - SwNodeIndex& operator=( const SwNodeIndex& ); - SwNodeIndex& operator=( const SwNode& ); + inline SwNodeIndex& operator=( const SwNodeIndex& ); + inline SwNodeIndex& operator=( const SwNode& ); // Return value of index as sal_uLong. inline sal_uLong GetIndex() const; @@ -256,6 +256,32 @@ inline SwNodeIndex& SwNodeIndex::operator=( sal_uLong nWert ) return *this; } +SwNodeIndex& SwNodeIndex::operator=( const SwNodeIndex& rIdx ) +{ + if( &pNd->GetNodes() != &rIdx.pNd->GetNodes() ) + { + DeRegisterIndex( pNd->GetNodes() ); + pNd = rIdx.pNd; + RegisterIndex( pNd->GetNodes() ); + } + else + pNd = rIdx.pNd; + return *this; +} + +SwNodeIndex& SwNodeIndex::operator=( const SwNode& rNd ) +{ + if( &pNd->GetNodes() != &rNd.GetNodes() ) + { + DeRegisterIndex( pNd->GetNodes() ); + pNd = (SwNode*)&rNd; + RegisterIndex( pNd->GetNodes() ); + } + else + pNd = (SwNode*)&rNd; + return *this; +} + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit b74fc841445c92ce458619bbf73a5c6e08e2b640 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sat Dec 20 16:49:36 2014 +0100 remove Remove() Change-Id: Ic1854d5e8cd76825290a3af94d8884e93dd7f0da diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 254dd29..ba3dc47 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -36,9 +36,6 @@ class SW_DLLPUBLIC SwNodeIndex SAL_FINAL : public sw::Ring<SwNodeIndex> { SwNode* pNd; - void Remove() - { DeRegisterIndex( pNd->GetNodes() ); }; - // These are not allowed! SwNodeIndex( SwNodes& rNds, sal_uInt16 nIdx ); SwNodeIndex( SwNodes& rNds, int nIdx ); @@ -82,7 +79,8 @@ public: RegisterIndex( pNd->GetNodes() ); } - ~SwNodeIndex() { Remove(); } + ~SwNodeIndex() + { DeRegisterIndex( pNd->GetNodes() ); }; inline sal_uLong operator++(); inline sal_uLong operator--(); commit d5d46849714d4749467b409f6e9c7758b80e1b63 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sat Dec 20 16:48:18 2014 +0100 Make SwNodeIndex constructors inline Change-Id: Ib29bcd5e2028c4e644621af4294c193f5b0aa14e diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 1bc358f..254dd29 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -36,7 +36,8 @@ class SW_DLLPUBLIC SwNodeIndex SAL_FINAL : public sw::Ring<SwNodeIndex> { SwNode* pNd; - void Remove(); + void Remove() + { DeRegisterIndex( pNd->GetNodes() ); }; // These are not allowed! SwNodeIndex( SwNodes& rNds, sal_uInt16 nIdx ); @@ -57,9 +58,30 @@ class SW_DLLPUBLIC SwNodeIndex SAL_FINAL : public sw::Ring<SwNodeIndex> } public: - SwNodeIndex( SwNodes& rNds, sal_uLong nIdx = 0 ); - SwNodeIndex( const SwNodeIndex &, long nDiff = 0 ); - SwNodeIndex( const SwNode&, long nDiff = 0 ); + SwNodeIndex( SwNodes& rNds, sal_uLong nIdx = 0 ) + : pNd( rNds[ nIdx ] ) + { + RegisterIndex( rNds ); + }; + SwNodeIndex( const SwNodeIndex& rIdx, long nDiff = 0 ) + : sw::Ring<SwNodeIndex>() + { + if( nDiff ) + pNd = rIdx.GetNodes()[ rIdx.GetIndex() + nDiff ]; + else + pNd = rIdx.pNd; + RegisterIndex( pNd->GetNodes() ); + } + + SwNodeIndex( const SwNode& rNd, long nDiff = 0 ) + { + if( nDiff ) + pNd = rNd.GetNodes()[ rNd.GetIndex() + nDiff ]; + else + pNd = (SwNode*)&rNd; + RegisterIndex( pNd->GetNodes() ); + } + ~SwNodeIndex() { Remove(); } inline sal_uLong operator++(); @@ -114,14 +136,18 @@ public: SwNodeIndex aStart; SwNodeIndex aEnd; - SwNodeRange( const SwNodeIndex &rS, const SwNodeIndex &rE ); - SwNodeRange( const SwNodeRange &rRange ); + SwNodeRange( const SwNodeIndex &rS, const SwNodeIndex &rE ) + : aStart( rS ), aEnd( rE ) {}; + SwNodeRange( const SwNodeRange &rRange ) + : aStart( rRange.aStart ), aEnd( rRange.aEnd ) {}; + + SwNodeRange( SwNodes& rNds, sal_uLong nSttIdx = 0, sal_uLong nEndIdx = 0 ) + : aStart( rNds, nSttIdx ), aEnd( rNds, nEndIdx ) {}; - SwNodeRange( SwNodes& rArr, sal_uLong nSttIdx = 0, sal_uLong nEndIdx = 0 ); - SwNodeRange( const SwNodeIndex& rS, long nSttDiff, - const SwNodeIndex& rE, long nEndDiff = 0 ); - SwNodeRange( const SwNode& rS, long nSttDiff, - const SwNode& rE, long nEndDiff = 0 ); + SwNodeRange( const SwNodeIndex& rS, long nSttDiff, const SwNodeIndex& rE, long nEndDiff = 0 ) + : aStart( rS, nSttDiff ), aEnd( rE, nEndDiff ) {}; + SwNodeRange( const SwNode& rS, long nSttDiff, const SwNode& rE, long nEndDiff = 0 ) + : aStart( rS, nSttDiff ), aEnd( rE, nEndDiff ) {}; }; // For inlines node.hxx is needed which in turn needs this one. diff --git a/sw/source/core/docnode/ndindex.cxx b/sw/source/core/docnode/ndindex.cxx index f70b92e..4f563a2 100644 --- a/sw/source/core/docnode/ndindex.cxx +++ b/sw/source/core/docnode/ndindex.cxx @@ -19,60 +19,6 @@ #include "ndindex.hxx" -SwNodeRange::SwNodeRange( const SwNodeIndex &rS, const SwNodeIndex &rE ) - : aStart( rS ), aEnd( rE ) -{} - -SwNodeRange::SwNodeRange( const SwNodeRange &rRange ) - : aStart( rRange.aStart ), aEnd( rRange.aEnd ) -{} - -SwNodeRange::SwNodeRange( SwNodes& rNds, sal_uLong nSttIdx, sal_uLong nEndIdx ) - : aStart( rNds, nSttIdx ), aEnd( rNds, nEndIdx ) -{} - -SwNodeRange::SwNodeRange( const SwNodeIndex& rS, long nSttDiff, - const SwNodeIndex& rE, long nEndDiff ) - : aStart( rS, nSttDiff ), aEnd( rE, nEndDiff ) -{} - -SwNodeRange::SwNodeRange( const SwNode& rS, long nSttDiff, - const SwNode& rE, long nEndDiff ) - : aStart( rS, nSttDiff ), aEnd( rE, nEndDiff ) -{} - -SwNodeIndex::SwNodeIndex( SwNodes& rNds, sal_uLong nIdx ) - : pNd( rNds[ nIdx ] ) -{ - RegisterIndex( rNds ); -} - -SwNodeIndex::SwNodeIndex( const SwNodeIndex& rIdx, long nDiff ) - : sw::Ring<SwNodeIndex>() -{ - if( nDiff ) - pNd = rIdx.GetNodes()[ rIdx.GetIndex() + nDiff ]; - else - pNd = rIdx.pNd; - - RegisterIndex( pNd->GetNodes() ); -} - -SwNodeIndex::SwNodeIndex( const SwNode& rNd, long nDiff ) -{ - if( nDiff ) - pNd = rNd.GetNodes()[ rNd.GetIndex() + nDiff ]; - else - pNd = (SwNode*)&rNd; - - RegisterIndex( pNd->GetNodes() ); -} - -void SwNodeIndex::Remove() -{ - DeRegisterIndex( pNd->GetNodes() ); -} - SwNodeIndex& SwNodeIndex::operator=( const SwNodeIndex& rIdx ) { if( &pNd->GetNodes() != &rIdx.pNd->GetNodes() ) commit 7a6639fc9d0bfc3481744a6de648ccbf754a109d Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sat Dec 20 16:29:47 2014 +0100 Move Register/DeRegister functions to SwNodeIndex - allows more inlining - allows removing another friendliness - belongs there anyway Change-Id: I5d0d24f60caa06533efcd3f41f313fe55dd365e1 diff --git a/sw/inc/ndarr.hxx b/sw/inc/ndarr.hxx index c7979da..a4c83c6 100644 --- a/sw/inc/ndarr.hxx +++ b/sw/inc/ndarr.hxx @@ -96,6 +96,7 @@ class SW_DLLPUBLIC SwNodes friend class ::sw::DocumentContentOperationsManager; SwNodeIndex* vIndices; ///< ring of all indices on nodes. + void RemoveNode( sal_uLong nDelPos, sal_uLong nLen, bool bDel ); void InsertNode( const SwNodePtr pNode, const SwNodeIndex& rPos ); @@ -115,11 +116,6 @@ class SW_DLLPUBLIC SwNodes bool bInDelUpdOutl : 1; ///< Flag for updating of Outline. bool bInDelUpdNum : 1; ///< Flag for updating of Outline. - /// For administering indices. - void RegisterIndex( SwNodeIndex& rIdx ); - void DeRegisterIndex( SwNodeIndex& rIdx ); - void RemoveNode( sal_uLong nDelPos, sal_uLong nLen, bool bDel ); - // Actions on the nodes. void SectionUpDown( const SwNodeIndex & aStart, const SwNodeIndex & aEnd ); void DelNodes( const SwNodeIndex& rStart, sal_uLong nCnt = 1 ); @@ -337,6 +333,7 @@ public: void dumpAsXml( xmlTextWriterPtr writer = NULL ) const; }; + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index e0439cc..1bc358f 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -26,6 +26,7 @@ #include <node.hxx> #include <ring.hxx> +#include <ndarr.hxx> class SwNode; class SwNodes; @@ -33,7 +34,6 @@ class SwNodes; /// Marks a node in the document model. class SW_DLLPUBLIC SwNodeIndex SAL_FINAL : public sw::Ring<SwNodeIndex> { - friend void SwNodes::DeRegisterIndex( SwNodeIndex& ); SwNode* pNd; void Remove(); @@ -41,6 +41,20 @@ class SW_DLLPUBLIC SwNodeIndex SAL_FINAL : public sw::Ring<SwNodeIndex> // These are not allowed! SwNodeIndex( SwNodes& rNds, sal_uInt16 nIdx ); SwNodeIndex( SwNodes& rNds, int nIdx ); + void RegisterIndex( SwNodes& rNodes ) + { + if(!rNodes.vIndices) + rNodes.vIndices = this; + MoveTo(rNodes.vIndices); + } + void DeRegisterIndex( SwNodes& rNodes ) + { + if(rNodes.vIndices == this) + rNodes.vIndices = GetNextInRing(); + MoveTo(nullptr); + if(rNodes.vIndices == this) + rNodes.vIndices = nullptr; + } public: SwNodeIndex( SwNodes& rNds, sal_uLong nIdx = 0 ); diff --git a/sw/source/core/docnode/ndindex.cxx b/sw/source/core/docnode/ndindex.cxx index 3656000..f70b92e 100644 --- a/sw/source/core/docnode/ndindex.cxx +++ b/sw/source/core/docnode/ndindex.cxx @@ -44,7 +44,7 @@ SwNodeRange::SwNodeRange( const SwNode& rS, long nSttDiff, SwNodeIndex::SwNodeIndex( SwNodes& rNds, sal_uLong nIdx ) : pNd( rNds[ nIdx ] ) { - rNds.RegisterIndex( *this ); + RegisterIndex( rNds ); } SwNodeIndex::SwNodeIndex( const SwNodeIndex& rIdx, long nDiff ) @@ -55,7 +55,7 @@ SwNodeIndex::SwNodeIndex( const SwNodeIndex& rIdx, long nDiff ) else pNd = rIdx.pNd; - pNd->GetNodes().RegisterIndex( *this ); + RegisterIndex( pNd->GetNodes() ); } SwNodeIndex::SwNodeIndex( const SwNode& rNd, long nDiff ) @@ -65,21 +65,21 @@ SwNodeIndex::SwNodeIndex( const SwNode& rNd, long nDiff ) else pNd = (SwNode*)&rNd; - pNd->GetNodes().RegisterIndex( *this ); + RegisterIndex( pNd->GetNodes() ); } void SwNodeIndex::Remove() { - pNd->GetNodes().DeRegisterIndex( *this ); + DeRegisterIndex( pNd->GetNodes() ); } SwNodeIndex& SwNodeIndex::operator=( const SwNodeIndex& rIdx ) { if( &pNd->GetNodes() != &rIdx.pNd->GetNodes() ) { - pNd->GetNodes().DeRegisterIndex( *this ); + DeRegisterIndex( pNd->GetNodes() ); pNd = rIdx.pNd; - pNd->GetNodes().RegisterIndex( *this ); + RegisterIndex( pNd->GetNodes() ); } else pNd = rIdx.pNd; @@ -90,9 +90,9 @@ SwNodeIndex& SwNodeIndex::operator=( const SwNode& rNd ) { if( &pNd->GetNodes() != &rNd.GetNodes() ) { - pNd->GetNodes().DeRegisterIndex( *this ); + DeRegisterIndex( pNd->GetNodes() ); pNd = (SwNode*)&rNd; - pNd->GetNodes().RegisterIndex( *this ); + RegisterIndex( pNd->GetNodes() ); } else pNd = (SwNode*)&rNd; @@ -103,9 +103,9 @@ SwNodeIndex& SwNodeIndex::Assign( SwNodes& rNds, sal_uLong nIdx ) { if( &pNd->GetNodes() != &rNds ) { - pNd->GetNodes().DeRegisterIndex( *this ); + DeRegisterIndex( pNd->GetNodes() ); pNd = rNds[ nIdx ]; - pNd->GetNodes().RegisterIndex( *this ); + RegisterIndex( pNd->GetNodes() ); } else pNd = rNds[ nIdx ]; @@ -116,9 +116,9 @@ SwNodeIndex& SwNodeIndex::Assign( const SwNode& rNd, long nOffset ) { if( &pNd->GetNodes() != &rNd.GetNodes() ) { - pNd->GetNodes().DeRegisterIndex( *this ); + DeRegisterIndex( pNd->GetNodes() ); pNd = (SwNode*)&rNd; - pNd->GetNodes().RegisterIndex( *this ); + RegisterIndex( pNd->GetNodes() ); } else pNd = (SwNode*)&rNd; diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx index 3167f8a..b9c91ad 100644 --- a/sw/source/core/docnode/nodes.cxx +++ b/sw/source/core/docnode/nodes.cxx @@ -2313,18 +2313,4 @@ bool SwNodes::IsDocNodes() const return this == &pMyDoc->GetNodes(); } -void SwNodes::RegisterIndex( SwNodeIndex& rIdx ) -{ - if(!vIndices) - vIndices = &rIdx; - rIdx.MoveTo(vIndices); -} -void SwNodes::DeRegisterIndex( SwNodeIndex& rIdx ) -{ - if(vIndices == &rIdx) - vIndices = vIndices->GetNextInRing(); - rIdx.MoveTo(nullptr); - if(vIndices == &rIdx) - vIndices = nullptr; -} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 82ef5f9eab317171d4b08f5471222cce8f1fcdbf Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Fri Dec 19 02:05:44 2014 +0100 use sw::Ring instead diff --git a/sw/inc/ndarr.hxx b/sw/inc/ndarr.hxx index e60b9ee..c7979da 100644 --- a/sw/inc/ndarr.hxx +++ b/sw/inc/ndarr.hxx @@ -21,6 +21,7 @@ #define INCLUDED_SW_INC_NDARR_HXX #include <vector> +#include <memory> #include <boost/utility.hpp> @@ -31,6 +32,7 @@ #include <bparr.hxx> #include <ndtyp.hxx> #include <o3tl/sorted_vector.hxx> +#include <ring.hxx> class Graphic; class GraphicObject; @@ -93,7 +95,7 @@ class SW_DLLPUBLIC SwNodes friend class SwStartNode; friend class ::sw::DocumentContentOperationsManager; - SwNodeIndex* pRoot; ///< List of all indices on nodes. + SwNodeIndex* vIndices; ///< ring of all indices on nodes. void InsertNode( const SwNodePtr pNode, const SwNodeIndex& rPos ); diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 836e4b8..e0439cc 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -25,19 +25,16 @@ #include <tools/solar.h> #include <node.hxx> +#include <ring.hxx> class SwNode; class SwNodes; /// Marks a node in the document model. -class SW_DLLPUBLIC SwNodeIndex SAL_FINAL +class SW_DLLPUBLIC SwNodeIndex SAL_FINAL : public sw::Ring<SwNodeIndex> { - friend void SwNodes::RegisterIndex( SwNodeIndex& ); friend void SwNodes::DeRegisterIndex( SwNodeIndex& ); - friend void SwNodes::RemoveNode( sal_uLong, sal_uLong, bool ); - SwNode* pNd; - SwNodeIndex *pNext, *pPrev; void Remove(); diff --git a/sw/inc/ring.hxx b/sw/inc/ring.hxx index e4c62f5..85f62bd 100644 --- a/sw/inc/ring.hxx +++ b/sw/inc/ring.hxx @@ -216,7 +216,7 @@ namespace sw private: friend class boost::iterator_core_access; void increment() - { m_pCurrent = m_pCurrent ? m_pCurrent->GetNextInRing() : m_pStart->GetNext(); } + { m_pCurrent = m_pCurrent ? m_pCurrent->GetNextInRing() : m_pStart->GetNextInRing(); } bool equal(RingIterator const& other) const { // we never want to compare iterators from diff --git a/sw/source/core/docnode/ndindex.cxx b/sw/source/core/docnode/ndindex.cxx index 03e98be..3656000 100644 --- a/sw/source/core/docnode/ndindex.cxx +++ b/sw/source/core/docnode/ndindex.cxx @@ -42,13 +42,13 @@ SwNodeRange::SwNodeRange( const SwNode& rS, long nSttDiff, {} SwNodeIndex::SwNodeIndex( SwNodes& rNds, sal_uLong nIdx ) - : pNd( rNds[ nIdx ] ), pNext( 0 ), pPrev( 0 ) + : pNd( rNds[ nIdx ] ) { rNds.RegisterIndex( *this ); } SwNodeIndex::SwNodeIndex( const SwNodeIndex& rIdx, long nDiff ) - : pNext( 0 ), pPrev( 0 ) + : sw::Ring<SwNodeIndex>() { if( nDiff ) pNd = rIdx.GetNodes()[ rIdx.GetIndex() + nDiff ]; @@ -59,7 +59,6 @@ SwNodeIndex::SwNodeIndex( const SwNodeIndex& rIdx, long nDiff ) } SwNodeIndex::SwNodeIndex( const SwNode& rNd, long nDiff ) - : pNext( 0 ), pPrev( 0 ) { if( nDiff ) pNd = rNd.GetNodes()[ rNd.GetIndex() + nDiff ]; diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx index 00b9a87..3167f8a 100644 --- a/sw/source/core/docnode/nodes.cxx +++ b/sw/source/core/docnode/nodes.cxx @@ -57,7 +57,7 @@ sal_uInt16 HighestLevel( SwNodes & rNodes, const SwNodeRange & rRange ); * @param pDocument TODO: provide documentation */ SwNodes::SwNodes( SwDoc* pDocument ) - : pRoot( 0 ), pMyDoc( pDocument ) + : vIndices(nullptr), pMyDoc( pDocument ) { bInNodesDel = bInDelUpdOutl = bInDelUpdNum = false; @@ -2212,29 +2212,11 @@ void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, bool bDel ) sal_uLong nEnd = nDelPos + nSz; SwNode* pNew = (*this)[ nEnd ]; - if( pRoot ) + for(SwNodeIndex& rIndex : vIndices->GetRingContainer()) { - SwNodeIndex *p = pRoot; - while( p ) - { - sal_uLong nIdx = p->GetIndex(); - SwNodeIndex* pNext = p->pNext; - if( nDelPos <= nIdx && nIdx < nEnd ) - (*p) = *pNew; - - p = pNext; - } - - p = pRoot->pPrev; - while( p ) - { - sal_uLong nIdx = p->GetIndex(); - SwNodeIndex* pPrev = p->pPrev; - if( nDelPos <= nIdx && nIdx < nEnd ) - (*p) = *pNew; - - p = pPrev; - } + sal_uLong nIdx = rIndex.GetIndex(); + if( nDelPos <= nIdx && nIdx < nEnd ) + rIndex = *pNew; } { @@ -2288,42 +2270,6 @@ void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, bool bDel ) BigPtrArray::Remove( nDelPos, nSz ); } -void SwNodes::RegisterIndex( SwNodeIndex& rIdx ) -{ - if( !pRoot ) // no root set, yet? - { - pRoot = &rIdx; - pRoot->pPrev = 0; - pRoot->pNext = 0; - } - else - { - // add always after root - rIdx.pNext = pRoot->pNext; - pRoot->pNext = &rIdx; - rIdx.pPrev = pRoot; - if( rIdx.pNext ) - rIdx.pNext->pPrev = &rIdx; - } -} - -void SwNodes::DeRegisterIndex( SwNodeIndex& rIdx ) -{ - SwNodeIndex* pN = rIdx.pNext; - SwNodeIndex* pP = rIdx.pPrev; - - if( pRoot == &rIdx ) - pRoot = pP ? pP : pN; - - if( pP ) - pP->pNext = pN; - if( pN ) - pN->pPrev = pP; - - rIdx.pNext = 0; - rIdx.pPrev = 0; -} - void SwNodes::InsertNode( const SwNodePtr pNode, const SwNodeIndex& rPos ) { @@ -2367,4 +2313,18 @@ bool SwNodes::IsDocNodes() const return this == &pMyDoc->GetNodes(); } +void SwNodes::RegisterIndex( SwNodeIndex& rIdx ) +{ + if(!vIndices) + vIndices = &rIdx; + rIdx.MoveTo(vIndices); +} +void SwNodes::DeRegisterIndex( SwNodeIndex& rIdx ) +{ + if(vIndices == &rIdx) + vIndices = vIndices->GetNextInRing(); + rIdx.MoveTo(nullptr); + if(vIndices == &rIdx) + vIndices = nullptr; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits