[Libreoffice-commits] core.git: sw/inc sw/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Tue Jun 22 18:49:57 UTC 2021


 sw/inc/frameformats.hxx       |   16 +++++-----------
 sw/source/core/doc/docfmt.cxx |   12 ++++++------
 sw/source/core/doc/doclay.cxx |   33 ++++++++++++++++-----------------
 3 files changed, 27 insertions(+), 34 deletions(-)

New commits:
commit c85d8b23c2339958f59dbc66a9ba4ec114125514
Author:     Noel Grandin <noelgrandin at gmail.com>
AuthorDate: Tue Jun 22 19:59:00 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Jun 22 20:49:22 2021 +0200

    SwFrameFormats::rangeFind does not, in fact return a range
    
    because the index it relies on, is a unique index.
    
    So make this explicit in the method call by returning a normal
    iterator.
    
    Change-Id: I428d1b14d1274079955eb4f893ca91d1745264e7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117673
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sw/inc/frameformats.hxx b/sw/inc/frameformats.hxx
index 54ad87fa87f8..8ad02559a79b 100644
--- a/sw/inc/frameformats.hxx
+++ b/sw/inc/frameformats.hxx
@@ -49,17 +49,18 @@ class SW_DLLPUBLIC SwFrameFormats final : public SwFormatsBase
     // function updating ByName index via modify
     friend void SwFrameFormat::SetName(const OUString&, bool);
 
+public:
     typedef SwFrameFormatsBase::nth_index<0>::type ByPos;
     typedef SwFrameFormatsBase::nth_index<1>::type ByTypeAndName;
     typedef ByPos::iterator iterator;
 
+private:
     SwFrameFormatsBase m_Array;
     ByPos& m_PosIndex;
     ByTypeAndName& m_TypeAndNameIndex;
 
 public:
     typedef ByPos::const_iterator const_iterator;
-    typedef ByTypeAndName::const_iterator const_range_iterator;
     typedef SwFrameFormatsBase::size_type size_type;
     typedef SwFrameFormatsBase::value_type value_type;
 
@@ -83,19 +84,12 @@ public:
     // There is also ContainsFormat, if you don't need the position.
     const_iterator find(const value_type& x) const;
 
-    // As this array is non-unique related to type and name,
-    // we always get ranges for the "key" values.
-    std::pair<const_range_iterator, const_range_iterator> rangeFind(sal_uInt16 type,
-                                                                    const OUString& name) const;
+    ByTypeAndName::const_iterator findByTypeAndName(sal_uInt16 type, const OUString& name) const;
     // Convenience function, which just uses type and name!
     // To look for the exact object use find.
-    std::pair<const_range_iterator, const_range_iterator> rangeFind(const value_type& x) const;
+    ByTypeAndName::const_iterator findSimilar(const value_type& x) const;
     // So we can actually check for end()
-    const_range_iterator rangeEnd() const { return m_TypeAndNameIndex.end(); }
-    const_iterator rangeProject(const_range_iterator const& position)
-    {
-        return m_Array.project<0>(position);
-    }
+    ByTypeAndName::const_iterator typeAndNameEnd() const { return m_TypeAndNameIndex.end(); }
 
     const value_type& operator[](size_t index_) const { return m_PosIndex.operator[](index_); }
     const value_type& front() const { return m_PosIndex.front(); }
diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx
index bd0fb7dff196..f3c4b71653ac 100644
--- a/sw/source/core/doc/docfmt.cxx
+++ b/sw/source/core/doc/docfmt.cxx
@@ -2085,16 +2085,16 @@ SwFrameFormats::const_iterator SwFrameFormats::find( const value_type& x ) const
     return m_Array.project<0>( it );
 }
 
-std::pair<SwFrameFormats::const_range_iterator,SwFrameFormats::const_range_iterator>
-SwFrameFormats::rangeFind( sal_uInt16 type, const OUString& name ) const
+SwFrameFormats::ByTypeAndName::const_iterator
+SwFrameFormats::findByTypeAndName( sal_uInt16 type, const OUString& name ) const
 {
-    return m_TypeAndNameIndex.equal_range( boost::make_tuple(type, name) );
+    return m_TypeAndNameIndex.find( boost::make_tuple(type, name) );
 }
 
-std::pair<SwFrameFormats::const_range_iterator,SwFrameFormats::const_range_iterator>
-SwFrameFormats::rangeFind( const value_type& x ) const
+SwFrameFormats::ByTypeAndName::const_iterator
+SwFrameFormats::findSimilar( const value_type& x ) const
 {
-    return rangeFind( x->Which(), x->GetName() );
+    return findByTypeAndName( x->Which(), x->GetName() );
 }
 
 void SwFrameFormats::DeleteAndDestroyAll( bool keepDefault )
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index 556ff77fdb78..a566ee51e112 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -1393,27 +1393,26 @@ OUString SwDoc::GetUniqueDrawObjectName() const
 
 const SwFlyFrameFormat* SwDoc::FindFlyByName( const OUString& rName, SwNodeType nNdTyp ) const
 {
-    auto range = GetSpzFrameFormats()->rangeFind( RES_FLYFRMFMT, rName );
-    for( auto it = range.first; it != range.second; it++ )
+    auto it = GetSpzFrameFormats()->findByTypeAndName( RES_FLYFRMFMT, rName );
+    if( it == GetSpzFrameFormats()->typeAndNameEnd() )
+        return nullptr;
+
+    const SwFrameFormat* pFlyFormat = *it;
+    assert( RES_FLYFRMFMT == pFlyFormat->Which() && pFlyFormat->GetName() == rName );
+    const SwNodeIndex* pIdx = pFlyFormat->GetContent().GetContentIdx();
+    if( pIdx && pIdx->GetNode().GetNodes().IsDocNodes() )
     {
-        const SwFrameFormat* pFlyFormat = *it;
-        if( RES_FLYFRMFMT != pFlyFormat->Which() || pFlyFormat->GetName() != rName )
-            continue;
-        const SwNodeIndex* pIdx = pFlyFormat->GetContent().GetContentIdx();
-        if( pIdx && pIdx->GetNode().GetNodes().IsDocNodes() )
+        if( nNdTyp != SwNodeType::NONE )
         {
-            if( nNdTyp != SwNodeType::NONE )
-            {
-                // query for the right NodeType
-                const SwNode* pNd = GetNodes()[ pIdx->GetIndex()+1 ];
-                if( nNdTyp == SwNodeType::Text
-                        ? !pNd->IsNoTextNode()
-                        : nNdTyp == pNd->GetNodeType() )
-                    return static_cast<const SwFlyFrameFormat*>(pFlyFormat);
-            }
-            else
+            // query for the right NodeType
+            const SwNode* pNd = GetNodes()[ pIdx->GetIndex()+1 ];
+            if( nNdTyp == SwNodeType::Text
+                    ? !pNd->IsNoTextNode()
+                    : nNdTyp == pNd->GetNodeType() )
                 return static_cast<const SwFlyFrameFormat*>(pFlyFormat);
         }
+        else
+            return static_cast<const SwFlyFrameFormat*>(pFlyFormat);
     }
     return nullptr;
 }


More information about the Libreoffice-commits mailing list