[Libreoffice-commits] .: sw/inc sw/source
Tor Lillqvist
tml at kemper.freedesktop.org
Fri Mar 2 00:04:03 PST 2012
sw/inc/shellio.hxx | 3 -
sw/source/filter/writer/writer.cxx | 82 +++++++++----------------------------
sw/source/filter/ww8/wrtww8.cxx | 8 +--
3 files changed, 27 insertions(+), 66 deletions(-)
New commits:
commit ad9960ffeb25f31ce4b1f819f909f1eb9ad6d7dd
Author: Noel Grandin <noel at peralex.com>
Date: Fri Mar 2 09:18:51 2012 +0200
Convert SvPtrarr usage to std::vector
In GetBookmarks and Writer_Impl pFontRemoveLst field. Remove unused
field pBkmkArr in Writer_Impl class. Convert SwBookmarkNodeTable to
std::multimap, greatly simplifying code.
diff --git a/sw/inc/shellio.hxx b/sw/inc/shellio.hxx
index 68de27e..751f638 100644
--- a/sw/inc/shellio.hxx
+++ b/sw/inc/shellio.hxx
@@ -47,6 +47,7 @@
#include <swtypes.hxx>
#include <docfac.hxx> // SwDocFac
#include <iodetect.hxx>
+#include <IMark.hxx>
class SfxFilterContainer;
class SfxFilter;
@@ -463,7 +464,7 @@ public:
// Search alle Bookmarks in the range and return it in the Array.
sal_uInt16 GetBookmarks( const SwCntntNode& rNd,
xub_StrLen nStt, xub_StrLen nEnd,
- SvPtrarr& rArr );
+ std::vector< const ::sw::mark::IMark* >& rArr );
// Create new PaM at position.
static SwPaM * NewSwPaM(SwDoc & rDoc,
diff --git a/sw/source/filter/writer/writer.cxx b/sw/source/filter/writer/writer.cxx
index d5c19d8..e1c4736 100644
--- a/sw/source/filter/writer/writer.cxx
+++ b/sw/source/filter/writer/writer.cxx
@@ -28,9 +28,6 @@
#include <hintids.hxx>
-#include <svl/svstdarr.hxx>
-#include <tools/table.hxx>
-
#include <sot/storage.hxx>
#include <sfx2/docfile.hxx>
#include <svl/urihelper.hxx>
@@ -53,15 +50,15 @@ using namespace ::com::sun::star;
static sal_Char aNToABuf[] = "0000000000000000000000000";
#define NTOABUFLEN (sizeof(aNToABuf))
-DECLARE_TABLE( SwBookmarkNodeTable, SvPtrarr* )
+typedef std::multimap<sal_uLong, const ::sw::mark::IMark*> SwBookmarkNodeTable;
struct Writer_Impl
{
SvStream * m_pStream;
boost::scoped_ptr< std::map<String, String> > pFileNameMap;
- SvPtrarr* pFontRemoveLst, *pBkmkArr;
- SwBookmarkNodeTable* pBkmkNodePos;
+ std::vector<const SvxFontItem*> aFontRemoveLst;
+ SwBookmarkNodeTable aBkmkNodePos;
Writer_Impl();
~Writer_Impl();
@@ -72,59 +69,33 @@ struct Writer_Impl
Writer_Impl::Writer_Impl()
: m_pStream(0)
- , pFontRemoveLst( 0 )
- , pBkmkArr( 0 ), pBkmkNodePos( 0 )
{
}
Writer_Impl::~Writer_Impl()
{
- delete pFontRemoveLst;
-
- if( pBkmkNodePos )
- {
- for( SvPtrarr* p = pBkmkNodePos->First(); p; p = pBkmkNodePos->Next() )
- delete p;
- delete pBkmkNodePos;
- }
}
void Writer_Impl::RemoveFontList( SwDoc& rDoc )
{
- OSL_ENSURE( pFontRemoveLst, "wo ist die FontListe?" );
- for( sal_uInt16 i = pFontRemoveLst->Count(); i; )
+ for( std::vector<const SvxFontItem*>::const_iterator it = aFontRemoveLst.begin();
+ it != aFontRemoveLst.end(); ++it )
{
- SvxFontItem* pItem = (SvxFontItem*)(*pFontRemoveLst)[ --i ];
- rDoc.GetAttrPool().Remove( *pItem );
+ rDoc.GetAttrPool().Remove( **it );
}
}
void Writer_Impl::InsertBkmk(const ::sw::mark::IMark& rBkmk)
{
- if( !pBkmkNodePos )
- pBkmkNodePos = new SwBookmarkNodeTable;
sal_uLong nNd = rBkmk.GetMarkPos().nNode.GetIndex();
- SvPtrarr* pArr = pBkmkNodePos->Get( nNd );
- if( !pArr )
- {
- pArr = new SvPtrarr( 1 );
- pBkmkNodePos->Insert( nNd, pArr );
- }
- void* p = (void*)&rBkmk;
- pArr->Insert( p, pArr->Count() );
+ aBkmkNodePos.insert( SwBookmarkNodeTable::value_type( nNd, &rBkmk ) );
if(rBkmk.IsExpanded() && rBkmk.GetOtherMarkPos().nNode != nNd)
{
nNd = rBkmk.GetOtherMarkPos().nNode.GetIndex();
- pArr = pBkmkNodePos->Get( nNd );
- if( !pArr )
- {
- pArr = new SvPtrarr( 1 );
- pBkmkNodePos->Insert( nNd, pArr );
- }
- pArr->Insert( p, pArr->Count() );
+ aBkmkNodePos.insert( SwBookmarkNodeTable::value_type( nNd, &rBkmk ));
}
}
@@ -166,10 +137,7 @@ const IDocumentStylePoolAccess* Writer::getIDocumentStylePoolAccess() const { re
void Writer::ResetWriter()
{
- if (m_pImpl->pFontRemoveLst)
- {
- m_pImpl->RemoveFontList( *pDoc );
- }
+ m_pImpl->RemoveFontList( *pDoc );
m_pImpl.reset(new Writer_Impl);
if( pCurPam )
@@ -471,13 +439,7 @@ void Writer::_AddFontItem( SfxItemPool& rPool, const SvxFontItem& rFont )
rPool.Remove( *pItem );
else
{
- if (!m_pImpl->pFontRemoveLst)
- {
- m_pImpl->pFontRemoveLst = new SvPtrarr( 0 );
- }
-
- void* p = (void*)pItem;
- m_pImpl->pFontRemoveLst->Insert( p, m_pImpl->pFontRemoveLst->Count() );
+ m_pImpl->aFontRemoveLst.push_back( pItem );
}
}
@@ -497,44 +459,42 @@ void Writer::CreateBookmarkTbl()
// search alle Bookmarks in the range and return it in the Array
sal_uInt16 Writer::GetBookmarks(const SwCntntNode& rNd, xub_StrLen nStt,
- xub_StrLen nEnd, SvPtrarr& rArr)
+ xub_StrLen nEnd, std::vector< const ::sw::mark::IMark* >& rArr)
{
OSL_ENSURE( !rArr.Count(), "es sind noch Eintraege vorhanden" );
sal_uLong nNd = rNd.GetIndex();
- SvPtrarr* pArr = (m_pImpl->pBkmkNodePos) ?
- m_pImpl->pBkmkNodePos->Get( nNd ) : 0;
- if( pArr )
+ SwBookmarkNodeTable::const_iterator it = m_pImpl->aBkmkNodePos.find( nNd );
+ if( it != m_pImpl->aBkmkNodePos.end() )
{
// there exist some bookmarks, search now all which is in the range
if( !nStt && nEnd == rNd.Len() )
// all
- rArr.Insert( pArr, 0 );
+ for( ; it != m_pImpl->aBkmkNodePos.end(); ++it )
+ rArr.push_back( it->second );
else
{
- sal_uInt16 n;
- xub_StrLen nCntnt;
- for( n = 0; n < pArr->Count(); ++n )
+ for( ; it != m_pImpl->aBkmkNodePos.end(); ++it )
{
- void* p = (*pArr)[ n ];
- const ::sw::mark::IMark& rBkmk = *(::sw::mark::IMark *)p;
+ const ::sw::mark::IMark& rBkmk = *(it->second);
+ xub_StrLen nCntnt;
if( rBkmk.GetMarkPos().nNode == nNd &&
(nCntnt = rBkmk.GetMarkPos().nContent.GetIndex() ) >= nStt &&
nCntnt < nEnd )
{
- rArr.Insert( p, rArr.Count() );
+ rArr.push_back( &rBkmk );
}
else if( rBkmk.IsExpanded() && nNd ==
rBkmk.GetOtherMarkPos().nNode.GetIndex() && (nCntnt =
rBkmk.GetOtherMarkPos().nContent.GetIndex() ) >= nStt &&
nCntnt < nEnd )
{
- rArr.Insert( p, rArr.Count() );
+ rArr.push_back( &rBkmk );
}
}
}
}
- return rArr.Count();
+ return rArr.size();
}
////////////////////////////////////////////////////////////////////////////
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index edee204..d7170af 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -1377,16 +1377,16 @@ void WW8_WrtBookmarks::MoveFieldMarks(sal_uLong nFrom, sal_uLong nTo)
void WW8Export::AppendBookmarks( const SwTxtNode& rNd,
xub_StrLen nAktPos, xub_StrLen nLen )
{
- SvPtrarr aArr( 8 );
+ std::vector< const ::sw::mark::IMark* > aArr;
sal_uInt16 nCntnt;
xub_StrLen nAktEnd = nAktPos + nLen;
if( GetWriter().GetBookmarks( rNd, nAktPos, nAktEnd, aArr ))
{
sal_uLong nNd = rNd.GetIndex(), nSttCP = Fc2Cp( Strm().Tell() );
- for( sal_uInt16 n = 0; n < aArr.Count(); ++n )
+ for( sal_uInt16 n = 0; n < aArr.size(); ++n )
{
- ::sw::mark::IMark& rBkmk = *(::sw::mark::IMark*)aArr[ n ];
- if(dynamic_cast< ::sw::mark::IFieldmark *>(&rBkmk))
+ const ::sw::mark::IMark& rBkmk = *(aArr[ n ]);
+ if(dynamic_cast< const ::sw::mark::IFieldmark *>(&rBkmk))
continue;
const SwPosition* pPos = &rBkmk.GetMarkPos();
More information about the Libreoffice-commits
mailing list