[PATCH] Final stretch of converting SV_DECL_PTRARR to STL containers stage 3/3
Noel Grandin
noel at peralex.com
Mon Jul 23 00:34:56 PDT 2012
Hi
These patches convert various places from SV_DECL_PTRARR to STL containers.
Patches 18-21 have passed a full make check.
The others have various issues, but I'm posting them since they're the
last surviving remnants, and maybe somebody feels like tracking down the
bug:
bad-FILTER-Convert-SV_DECL_PTRARR_SORT_DEL_VISIBILITY-SvxMSDffS.patch
gives me a link error when making the SW module which I'm not sure
how to solve
bad-SVL-untested-svdde.diff
is untested because it only compiles on windows, and I don't
currently have a working windows build box.
bad-SVL-SfxListener.diff
bad-SW-Convert-SV_DECL_PTRARR_SORT_DEL-InsCapOptArr-to-boos.patch
bad-SW-Convert-SV_DECL_PTRARR_SORT-SwSortElements-to-std-ve.patch
bad-SW-NdHints.diff
crashes nowhere near the changed code, so I have no idea what I'm
doing wrong
Regards, Noel Grandin
Disclaimer: http://www.peralex.com/disclaimer.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0020-Convert-SV_DECL_PTRARR_SORT-SwBlockNames-to-o3tl-sor.patch
Type: application/mbox
Size: 9913 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0007.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0021-Convert-SV_DECL_PTRARR_SORT_DEL-_SwRedlineTbl-to-o3t.patch
Type: application/mbox
Size: 74019 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0008.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bad-FILTER-Convert-SV_DECL_PTRARR_SORT_DEL_VISIBILITY-SvxMSDffS.patch
Type: application/mbox
Size: 7778 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0009.bin>
-------------- next part --------------
diff --git a/svl/inc/svl/brdcst.hxx b/svl/inc/svl/brdcst.hxx
index 007d4c0..5b0e7f1 100644
--- a/svl/inc/svl/brdcst.hxx
+++ b/svl/inc/svl/brdcst.hxx
@@ -21,14 +21,12 @@
#include "svl/svldllapi.h"
#include <tools/rtti.hxx>
-#include <svl/svarray.hxx>
+#include <vector>
class SfxListener;
class SfxHint;
-#ifndef _SFX_BRDCST_CXX
-typedef SvPtrarr SfxListenerArr_Impl;
-#endif
+typedef std::vector<SfxListener*> SfxListenerArr_Impl;
//-------------------------------------------------------------------------
@@ -39,8 +37,8 @@ friend class SfxListener;
SfxListenerArr_Impl aListeners;
private:
- sal_Bool AddListener( SfxListener& rListener );
- void RemoveListener( SfxListener& rListener );
+ void AddListener( SfxListener& rListener );
+ void RemoveListener( const SfxListener& rListener );
const SfxBroadcaster& operator=(const SfxBroadcaster &); // verboten
protected:
@@ -55,10 +53,10 @@ public:
virtual ~SfxBroadcaster();
void Broadcast( const SfxHint &rHint );
- sal_Bool HasListeners() const;
- sal_uInt16 GetListenerCount() const { return aListeners.Count(); }
+ bool HasListeners() const;
+ sal_uInt16 GetListenerCount() const { return aListeners.size(); }
SfxListener* GetListener( sal_uInt16 nNo ) const
- { return (SfxListener*) aListeners[nNo]; }
+ { return aListeners[nNo]; }
};
#endif
diff --git a/svl/source/notify/brdcst.cxx b/svl/source/notify/brdcst.cxx
index 7cd424b..058aec4 100644
--- a/svl/source/notify/brdcst.cxx
+++ b/svl/source/notify/brdcst.cxx
@@ -24,12 +24,11 @@
#include <svl/hint.hxx>
#include <svl/smplhint.hxx>
#include <svl/lstner.hxx>
+#include <vector>
-SV_DECL_PTRARR( SfxListenerArr_Impl, SfxListener*, 0 )
-
-#define _SFX_BRDCST_CXX
#include <svl/brdcst.hxx>
+
//====================================================================
DBG_NAME(SfxBroadcaster)
TYPEINIT0(SfxBroadcaster);
@@ -45,13 +44,13 @@ void SfxBroadcaster::Broadcast( const SfxHint &rHint )
DBG_CHKTHIS(SfxBroadcaster, 0);
// is anybody to notify?
- if ( aListeners.Count() /*! || aGlobListeners.Count() */ )
+ if ( !aListeners.empty() )
{
// notify all registered listeners exactly once
- for ( sal_uInt16 n = 0; n < aListeners.Count(); ++n )
+ for( SfxListenerArr_Impl::iterator it = aListeners.begin(); it != aListeners.end(); ++it )
{
- SfxListener* pListener = aListeners[n];
- if ( pListener )
+ SfxListener* pListener = *it;
+ if( pListener )
pListener->Notify( *this, rHint );
}
}
@@ -66,10 +65,10 @@ SfxBroadcaster::~SfxBroadcaster()
Broadcast( SfxSimpleHint(SFX_HINT_DYING) );
// remove all still registered listeners
- for ( sal_uInt16 nPos = 0; nPos < aListeners.Count(); ++nPos )
+ for( SfxListenerArr_Impl::iterator it = aListeners.begin(); it != aListeners.end(); ++it )
{
- SfxListener *pListener = aListeners[nPos];
- if ( pListener )
+ SfxListener *pListener = *it;
+ if( pListener )
pListener->RemoveBroadcaster_Impl(*this);
}
}
@@ -88,14 +87,14 @@ SfxBroadcaster::SfxBroadcaster()
// copy ctor of class SfxBroadcaster
-SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC )
+SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rOther )
{
DBG_CTOR(SfxBroadcaster, 0);
- for ( sal_uInt16 n = 0; n < rBC.aListeners.Count(); ++n )
+ for( SfxListenerArr_Impl::const_iterator it = rOther.aListeners.begin(); it != rOther.aListeners.end(); ++it )
{
- SfxListener *pListener = rBC.aListeners[n];
- if ( pListener )
+ SfxListener *pListener = (SfxListener *)*it;
+ if( pListener )
pListener->StartListening( *this );
}
}
@@ -104,25 +103,26 @@ SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC )
// add a new SfxListener to the list
-sal_Bool SfxBroadcaster::AddListener( SfxListener& rListener )
+void SfxBroadcaster::AddListener( SfxListener& rListener )
{
DBG_CHKTHIS(SfxBroadcaster, 0);
- const SfxListener *pListener = &rListener;
- const SfxListener *pNull = 0;
- sal_uInt16 nFreePos = aListeners.GetPos( pNull );
- if ( nFreePos < aListeners.Count() )
- aListeners.GetData()[nFreePos] = pListener;
- else if ( aListeners.Count() < (USHRT_MAX-1) )
- aListeners.Insert( pListener, aListeners.Count() );
- else
+ SfxListener *pListener = &rListener;
+
+ for( SfxListenerArr_Impl::iterator it = aListeners.begin(); it != aListeners.end(); ++it )
{
- OSL_FAIL( "array overflow" );
- return sal_False;
+ if( *it == 0 )
+ {
+ *it = pListener;
+ return;
+ }
}
- DBG_ASSERT( USHRT_MAX != aListeners.GetPos(pListener),
- "AddListener failed" );
- return sal_True;
+ // not really an array overflow, but it's nice to check that someone isn't going bezerk
+ // adding listeners
+ if ( aListeners.size() >= (USHRT_MAX-1) )
+ OSL_FAIL( "array overflow" );
+
+ aListeners.push_back( pListener );
}
//--------------------------------------------------------------------
@@ -140,10 +140,9 @@ void SfxBroadcaster::ListenersGone()
void SfxBroadcaster::Forward(SfxBroadcaster& rBC, const SfxHint& rHint)
{
- const sal_uInt16 nCount = aListeners.Count();
- for ( sal_uInt16 i = 0; i < nCount; ++i )
+ for( SfxListenerArr_Impl::iterator it = aListeners.begin(); it != aListeners.end(); ++it )
{
- SfxListener *pListener = aListeners[i];
+ SfxListener *pListener = *it;
if ( pListener )
pListener->Notify( rBC, rHint );
}
@@ -153,25 +152,31 @@ void SfxBroadcaster::Forward(SfxBroadcaster& rBC, const SfxHint& rHint)
// remove one SfxListener from the list
-void SfxBroadcaster::RemoveListener( SfxListener& rListener )
+void SfxBroadcaster::RemoveListener( const SfxListener& rListener )
{
{DBG_CHKTHIS(SfxBroadcaster, 0);}
- const SfxListener *pListener = &rListener;
- sal_uInt16 nPos = aListeners.GetPos(pListener);
- DBG_ASSERT( nPos != USHRT_MAX, "RemoveListener: Listener unknown" );
- aListeners.GetData()[nPos] = 0;
- if ( !HasListeners() )
- ListenersGone();
+
+ // search from the end, its more likely to be there
+ for( SfxListenerArr_Impl::reverse_iterator it = aListeners.rbegin(); it != aListeners.rend(); ++it )
+ {
+ SfxListener *pListener = *it;
+ if( pListener == &rListener )
+ {
+ *it = 0;
+ if ( !HasListeners() )
+ ListenersGone();
+ return;
+ }
+ }
+
+ DBG_ASSERT( false, "RemoveListener: Listener unknown" );
}
//--------------------------------------------------------------------
-sal_Bool SfxBroadcaster::HasListeners() const
+bool SfxBroadcaster::HasListeners() const
{
- for ( sal_uInt16 n = 0; n < aListeners.Count(); ++n )
- if ( aListeners.GetObject(n) != 0 )
- return sal_True;
- return sal_False;
+ return !aListeners.empty();
}
//--------------------------------------------------------------------
diff --git a/svl/source/notify/lstner.cxx b/svl/source/notify/lstner.cxx
index 5d3d6b8..79a9dc5 100644
--- a/svl/source/notify/lstner.cxx
+++ b/svl/source/notify/lstner.cxx
@@ -85,13 +85,11 @@ sal_Bool SfxListener::StartListening( SfxBroadcaster& rBroadcaster, sal_Bool bPr
if ( !bPreventDups || !IsListening( rBroadcaster ) )
{
- if ( rBroadcaster.AddListener(*this) )
- {
- aBCs.push_back( &rBroadcaster );
+ rBroadcaster.AddListener(*this);
+ aBCs.push_back( &rBroadcaster );
- DBG_ASSERT( IsListening(rBroadcaster), "StartListening failed" );
- return sal_True;
- }
+ DBG_ASSERT( IsListening(rBroadcaster), "StartListening failed" );
+ return sal_True;
}
return sal_False;
-------------- next part --------------
diff --git a/svl/source/svdde/ddesvr.cxx b/svl/source/svdde/ddesvr.cxx
index 0e4dbd1..809df16 100644
--- a/svl/source/svdde/ddesvr.cxx
+++ b/svl/source/svdde/ddesvr.cxx
@@ -23,9 +23,9 @@
#include <algorithm>
#include <comphelper/string.hxx>
#include <svl/svdde.hxx>
-#include <svl/svarray.hxx>
#include <tools/debug.hxx>
#include <osl/thread.h>
+#include <o3tl/sorted_vector.hxx>
enum DdeItemType
{
@@ -41,8 +41,7 @@ struct DdeItemImpData
DdeItemImpData( sal_uLong nH ) : nHCnv( nH ), nCnt( 1 ) {}
};
-SV_DECL_VARARR( DdeItemImp, DdeItemImpData, 1 )
-SV_IMPL_VARARR( DdeItemImp, DdeItemImpData )
+typedef std::vector<DdeItemImpData> DdeItemImp;
// --- DdeInternat::SvrCallback() ----------------------------------
@@ -864,7 +863,7 @@ void DdeItem::IncMonitor( sal_uLong nHCnv )
}
else
{
- for( sal_uInt16 n = pImpData->Count(); n; )
+ for( sal_uInt16 n = pImpData->size(); n; )
if( (*pImpData)[ --n ].nHCnv == nHCnv )
{
++(*pImpData)[ n ].nHCnv;
@@ -872,7 +871,7 @@ void DdeItem::IncMonitor( sal_uLong nHCnv )
}
}
- pImpData->Insert( DdeItemImpData( nHCnv ), pImpData->Count() );
+ pImpData->push_back( DdeItemImpData( nHCnv ) );
}
// --- DdeItem::DecMonitor() ------------------------------------------
@@ -881,14 +880,14 @@ void DdeItem::DecMonitor( sal_uLong nHCnv )
{
if( pImpData )
{
- DdeItemImpData* pData = (DdeItemImpData*)pImpData->GetData();
- for( sal_uInt16 n = pImpData->Count(); n; --n, ++pData )
+ for( sal_uInt16 n = 0; n < pImpData->size(); ++n )
+ DdeItemImpData* pData = &(*pImpData)[n];
if( pData->nHCnv == nHCnv )
{
if( !pData->nCnt || !--pData->nCnt )
{
- if( 1 < pImpData->Count() )
- pImpData->Remove( pImpData->Count() - n );
+ if( 1 < pImpData->size() )
+ pImpData->erase( n );
else
{
delete pImpData, pImpData = 0;
@@ -907,7 +906,7 @@ short DdeItem::GetLinks()
{
short nCnt = 0;
if( pImpData )
- for( sal_uInt16 n = pImpData->Count(); n; )
+ for( sal_uInt16 n = pImpData->size(); n; )
nCnt = nCnt + (*pImpData)[ --n ].nCnt;
return nCnt;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bad-SW-Convert-SV_DECL_PTRARR_SORT_DEL-InsCapOptArr-to-boos.patch
Type: application/mbox
Size: 6496 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0010.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bad-SW-Convert-SV_DECL_PTRARR_SORT-SwSortElements-to-std-ve.patch
Type: application/mbox
Size: 4707 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0011.bin>
-------------- next part --------------
diff --git a/sw/inc/ndhints.hxx b/sw/inc/ndhints.hxx
index 6f0d896..75df3f7 100644
--- a/sw/inc/ndhints.hxx
+++ b/sw/inc/ndhints.hxx
@@ -29,8 +29,8 @@
#define _NDHINTS_HXX
-#include <svl/svarray.hxx>
#include <tools/mempool.hxx>
+#include <o3tl/sorted_vector.hxx>
#include "swtypes.hxx"
@@ -71,9 +71,17 @@ MakeRedlineTxtAttr( SwDoc & rDoc, SfxPoolItem& rAttr );
// Class SwpHtStart/End
+struct CompareSwpHtStart
+{
+ bool operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const;
+};
+class SwpHtStart : public o3tl::sorted_vector<SwTxtAttr*, CompareSwpHtStart> {};
-SV_DECL_PTRARR_SORT(SwpHtStart,SwTxtAttr*,1)
-SV_DECL_PTRARR_SORT(SwpHtEnd,SwTxtAttr*,1)
+struct CompareSwpHtEnd
+{
+ bool operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const;
+};
+class SwpHtEnd : public o3tl::sorted_vector<SwTxtAttr*, CompareSwpHtEnd> {};
// Class SwpHintsArr
@@ -102,18 +110,17 @@ public:
inline SwTxtAttr * GetEnd ( const sal_uInt16 nPos )
{ return m_HintEnds [nPos]; }
- inline sal_uInt16 GetEndCount() const { return m_HintEnds .Count(); }
- inline sal_uInt16 GetStartCount() const { return m_HintStarts.Count(); }
+ inline sal_uInt16 GetEndCount() const { return m_HintEnds .size(); }
+ inline sal_uInt16 GetStartCount() const { return m_HintStarts.size(); }
inline sal_uInt16 GetStartOf( const SwTxtAttr *pHt ) const;
- inline sal_uInt16 GetPos( const SwTxtAttr *pHt ) const
- { return m_HintStarts.GetPos( pHt ); }
+ sal_uInt16 GetPos( const SwTxtAttr *pHt ) const;
inline SwTxtAttr * GetTextHint( const sal_uInt16 nIdx )
{ return GetStart(nIdx); }
inline const SwTxtAttr * operator[]( const sal_uInt16 nIdx ) const
{ return m_HintStarts[nIdx]; }
- inline sal_uInt16 Count() const { return m_HintStarts.Count(); }
+ inline sal_uInt16 Count() const { return m_HintStarts.size(); }
#ifdef DBG_UTIL
bool Check() const;
@@ -205,12 +212,12 @@ SvStream &operator<<(SvStream &aS, const SwpHints &rHints); //$ ostream
inline sal_uInt16 SwpHintsArray::GetStartOf( const SwTxtAttr *pHt ) const
{
- sal_uInt16 nPos;
- if ( !m_HintStarts.Seek_Entry( pHt, &nPos ) )
+ SwpHtStart::const_iterator it = m_HintStarts.find( (SwTxtAttr*)pHt );
+ if ( it == m_HintStarts.end() )
{
- nPos = USHRT_MAX;
+ return USHRT_MAX;
}
- return nPos;
+ return it - m_HintStarts.begin();
}
inline SwTxtAttr *SwpHintsArray::Cut( const sal_uInt16 nPosInStart )
diff --git a/sw/source/core/text/redlnitr.cxx b/sw/source/core/text/redlnitr.cxx
index 621930e..ede99bf 100644
--- a/sw/source/core/text/redlnitr.cxx
+++ b/sw/source/core/text/redlnitr.cxx
@@ -275,7 +275,7 @@ short SwRedlineItr::_Seek( SwFont& rFnt, xub_StrLen nNew, xub_StrLen nOld )
const_cast<SwDoc&>(rDoc),
*const_cast<SfxPoolItem*>(pItem) );
pAttr->SetPriorityAttr( sal_True );
- aHints.C40_INSERT( SwTxtAttr, pAttr, aHints.Count());
+ aHints.insert( pAttr );
rAttrHandler.PushAndChg( *pAttr, rFnt );
if( RES_CHRATR_COLOR == nWhich )
rFnt.SetNoCol( sal_True );
@@ -338,10 +338,10 @@ void SwRedlineItr::_Clear( SwFont* pFnt )
{
OSL_ENSURE( bOn, "SwRedlineItr::Clear: Off?" );
bOn = sal_False;
- while( aHints.Count() )
+ while( !aHints.empty() )
{
SwTxtAttr *pPos = aHints[ 0 ];
- aHints.Remove(0);
+ aHints.erase((size_t)0);
if( pFnt )
rAttrHandler.PopAndChg( *pPos, *pFnt );
else
@@ -377,7 +377,7 @@ sal_Bool SwRedlineItr::_ChkSpecialUnderline() const
// Wenn die Unterstreichung oder das Escapement vom Redling kommt,
// wenden wir immer das SpecialUnderlining, d.h. die Unterstreichung
// unter der Grundlinie an.
- for( MSHORT i = 0; i < aHints.Count(); ++i )
+ for( MSHORT i = 0; i < aHints.size(); ++i )
{
MSHORT nWhich = aHints[i]->Which();
if( RES_CHRATR_UNDERLINE == nWhich ||
diff --git a/sw/source/core/text/redlnitr.hxx b/sw/source/core/text/redlnitr.hxx
index 8cbc117..6d84d12 100644
--- a/sw/source/core/text/redlnitr.hxx
+++ b/sw/source/core/text/redlnitr.hxx
@@ -66,7 +66,7 @@ public:
class SwRedlineItr
{
- SwpHtStart_SAR aHints;
+ SwpHtStart aHints;
const SwDoc& rDoc;
const SwTxtNode& rNd;
SwAttrHandler& rAttrHandler;
diff --git a/sw/source/core/txtnode/ndhints.cxx b/sw/source/core/txtnode/ndhints.cxx
index 8b495c2..0d3f6eb 100644
--- a/sw/source/core/txtnode/ndhints.cxx
+++ b/sw/source/core/txtnode/ndhints.cxx
@@ -36,9 +36,6 @@
#endif
-_SV_IMPL_SORTAR_ALG( SwpHtStart, SwTxtAttr* )
-_SV_IMPL_SORTAR_ALG( SwpHtEnd, SwTxtAttr* )
-
inline void DumpHints(const SwpHtStart &, const SwpHtEnd &) { }
/*************************************************************************
@@ -129,76 +126,14 @@ static sal_Bool lcl_IsLessEnd( const SwTxtAttr &rHt1, const SwTxtAttr &rHt2 )
return ( nHt1 < nHt2 );
}
-/*************************************************************************
- * SwpHtStart::Seek_Entry()
- *************************************************************************/
-
-sal_Bool SwpHtStart::Seek_Entry( const SwTxtAttr *pElement, sal_uInt16 *pPos ) const
+bool CompareSwpHtStart::operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const
{
- sal_uInt16 nOben = Count(), nMitte, nUnten = 0;
- if( nOben > 0 )
- {
- nOben--;
- while( nUnten <= nOben )
- {
- nMitte = nUnten + ( nOben - nUnten ) / 2;
- const SwTxtAttr *pMitte = (*this)[nMitte];
- if( IsEqual( *pMitte, *pElement ) )
- {
- *pPos = nMitte;
- return sal_True;
- }
- else
- if( lcl_IsLessStart( *pMitte, *pElement ) )
- nUnten = nMitte + 1;
- else
- if( nMitte == 0 )
- {
- *pPos = nUnten;
- return sal_False;
- }
- else
- nOben = nMitte - 1;
- }
- }
- *pPos = nUnten;
- return sal_False;
+ return lcl_IsLessStart( *lhs, *rhs );
}
-/*************************************************************************
- * SwpHtEnd::Seek_Entry()
- *************************************************************************/
-
-sal_Bool SwpHtEnd::Seek_Entry( const SwTxtAttr *pElement, sal_uInt16 *pPos ) const
+bool CompareSwpHtEnd::operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const
{
- sal_uInt16 nOben = Count(), nMitte, nUnten = 0;
- if( nOben > 0 )
- {
- nOben--;
- while( nUnten <= nOben )
- {
- nMitte = nUnten + ( nOben - nUnten ) / 2;
- const SwTxtAttr *pMitte = (*this)[nMitte];
- if( IsEqual( *pMitte, *pElement ) )
- {
- *pPos = nMitte;
- return sal_True;
- }
- else
- if( lcl_IsLessEnd( *pMitte, *pElement ) )
- nUnten = nMitte + 1;
- else
- if( nMitte == 0 )
- {
- *pPos = nUnten;
- return sal_False;
- }
- else
- nOben = nMitte - 1;
- }
- }
- *pPos = nUnten;
- return sal_False;
+ return lcl_IsLessEnd( *lhs, *rhs );
}
/*************************************************************************
@@ -209,27 +144,32 @@ void SwpHintsArray::Insert( const SwTxtAttr *pHt )
{
Resort();
#if OSL_DEBUG_LEVEL > 0
- sal_uInt16 nPos;
- OSL_ENSURE(!m_HintStarts.Seek_Entry( pHt, &nPos ),
+ OSL_ENSURE(m_HintStarts.find( (SwTxtAttr*)pHt ) == m_HintStarts.end(),
"Insert: hint already in HtStart");
- OSL_ENSURE(!m_HintEnds.Seek_Entry( pHt, &nPos ),
+ OSL_ENSURE(m_HintEnds.find( (SwTxtAttr*)pHt ) == m_HintEnds.end(),
"Insert: hint already in HtEnd");
#endif
- m_HintStarts.Insert( pHt );
- m_HintEnds.Insert( pHt );
+ m_HintStarts.insert( (SwTxtAttr*)pHt );
+ m_HintEnds.insert( (SwTxtAttr*)pHt );
}
void SwpHintsArray::DeleteAtPos( const sal_uInt16 nPos )
{
// optimization: nPos is the position in the Starts array
- const SwTxtAttr *pHt = m_HintStarts[ nPos ];
- m_HintStarts.Remove( nPos );
+ SwTxtAttr *pHt = m_HintStarts[ nPos ];
+ m_HintStarts.erase( m_HintStarts.begin() + nPos );
Resort();
- sal_uInt16 nEndPos;
- m_HintEnds.Seek_Entry( pHt, &nEndPos );
- m_HintEnds.Remove( nEndPos );
+ m_HintEnds.erase( pHt );
+}
+
+sal_uInt16 SwpHintsArray::GetPos( const SwTxtAttr *pHt ) const
+{
+ SwpHtStart::const_iterator it = m_HintStarts.find( (SwTxtAttr*)pHt );
+ if( it == m_HintStarts.end() )
+ return USHRT_MAX;
+ return it - m_HintStarts.begin();
}
#ifdef DBG_UTIL
@@ -250,7 +190,7 @@ void SwpHintsArray::DeleteAtPos( const sal_uInt16 nPos )
bool SwpHintsArray::Check() const
{
// 1) gleiche Anzahl in beiden Arrays
- CHECK_ERR( m_HintStarts.Count() == m_HintEnds.Count(),
+ CHECK_ERR( m_HintStarts.size() == m_HintEnds.size(),
"HintsCheck: wrong sizes" );
xub_StrLen nLastStart = 0;
xub_StrLen nLastEnd = 0;
@@ -298,13 +238,13 @@ bool SwpHintsArray::Check() const
// --- Ueberkreuzungen ---
// 5) gleiche Pointer in beiden Arrays
- if( !m_HintStarts.Seek_Entry( pHt, &nIdx ) )
+ if( m_HintStarts.find( (SwTxtAttr*)pHt ) == m_HintStarts.end() )
nIdx = STRING_LEN;
CHECK_ERR( STRING_LEN != nIdx, "HintsCheck: no GetStartOf" );
// 6) gleiche Pointer in beiden Arrays
- if( !m_HintEnds.Seek_Entry( pHt, &nIdx ) )
+ if( m_HintEnds.find( (SwTxtAttr*)pHt ) == m_HintEnds.end() )
nIdx = STRING_LEN;
CHECK_ERR( STRING_LEN != nIdx, "HintsCheck: no GetEndOf" );
@@ -390,13 +330,13 @@ bool SwpHintsArray::Resort()
const SwTxtAttr *pLast = 0;
sal_uInt16 i;
- for ( i = 0; i < m_HintStarts.Count(); ++i )
+ for ( i = 0; i < m_HintStarts.size(); ++i )
{
- const SwTxtAttr *pHt = m_HintStarts[i];
+ SwTxtAttr *pHt = m_HintStarts[i];
if( pLast && !lcl_IsLessStart( *pLast, *pHt ) )
{
- m_HintStarts.Remove( i );
- m_HintStarts.Insert( pHt );
+ m_HintStarts.erase( m_HintStarts.begin() + i );
+ m_HintStarts.insert( pHt );
pHt = m_HintStarts[i];
if ( pHt != pLast )
--i;
@@ -406,13 +346,13 @@ bool SwpHintsArray::Resort()
}
pLast = 0;
- for ( i = 0; i < m_HintEnds.Count(); ++i )
+ for ( i = 0; i < m_HintEnds.size(); ++i )
{
- const SwTxtAttr *pHt = m_HintEnds[i];
+ SwTxtAttr *pHt = m_HintEnds[i];
if( pLast && !lcl_IsLessEnd( *pLast, *pHt ) )
{
- m_HintEnds.Remove( i );
- m_HintEnds.Insert( pHt );
+ m_HintEnds.erase( m_HintEnds.begin() + i );
+ m_HintEnds.insert( pHt );
pHt = m_HintEnds[i]; // normalerweise == pLast
// Wenn die Unordnung etwas groesser ist (24200),
// muessen wir Position i erneut vergleichen.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0018-Convert-SV_DECL_VARARR_SORT-_CpyTabFrms-to-o3tl-sort.patch
Type: application/mbox
Size: 6971 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0012.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0019-Convert-SV_DECL_VARARR_SORT-_MergePos-to-o3tl-sorted.patch
Type: application/mbox
Size: 4699 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120723/71371d85/attachment-0013.bin>
More information about the LibreOffice
mailing list