summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-06-22 19:59:00 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-06-22 20:49:22 +0200
commitc85d8b23c2339958f59dbc66a9ba4ec114125514 (patch)
treece720d1a66191f2369bde1da484c9acbe2931660 /sw
parent5ce23ef129182e670ba2c16b65cc44510086b591 (diff)
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@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/frameformats.hxx16
-rw-r--r--sw/source/core/doc/docfmt.cxx12
-rw-r--r--sw/source/core/doc/doclay.cxx33
3 files changed, 27 insertions, 34 deletions
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;
}