Hi
Attached patch converts various places in the editeng, sc and sw modules
from using tools/table.hxx to using std::map
The one place I was not sure of was the naming the new typedefs in
sc/inc/chartpos.hxx, mostly because I have only a vague idea what the
code is trying to accomplish.
Updates from V1 of the patch
- don't use the square brackets indexing method on std::map if trying
to query the existence of a key
Code is contributed under MPL+/LGPL+/GPL+
Regards, Noel Grandin
Disclaimer: http://www.peralex.com/disclaimer.html
diff --git a/editeng/inc/editeng/forbiddencharacterstable.hxx
b/editeng/inc/editeng/forbiddencharacterstable.hxx
index 5d499e8..762548a 100644
--- a/editeng/inc/editeng/forbiddencharacterstable.hxx
+++ b/editeng/inc/editeng/forbiddencharacterstable.hxx
@@ -29,8 +29,7 @@
#ifndef _FORBIDDENCHARACTERSTABLE_HXX
#define _FORBIDDENCHARACTERSTABLE_HXX
-#include <tools/table.hxx>
-
+#include <map>
#include <salhelper/simplereferenceobject.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/i18n/ForbiddenCharacters.hpp>
@@ -49,18 +48,23 @@ struct ForbiddenCharactersInfo
sal_Bool bTemporary;
};
-DECLARE_TABLE( SvxForbiddenCharactersTableImpl, ForbiddenCharactersInfo* )
-class EDITENG_DLLPUBLIC SvxForbiddenCharactersTable : public
SvxForbiddenCharactersTableImpl, public salhelper::SimpleReferenceObject
+class EDITENG_DLLPUBLIC SvxForbiddenCharactersTable : public
salhelper::SimpleReferenceObject
{
+public:
+ typedef std::map<int, ForbiddenCharactersInfo*> CharInfoMap;
private:
+ CharInfoMap maCharInfoMap;
::com::sun::star::uno::Reference<
::com::sun::star::lang::XMultiServiceFactory > mxMSF;
+ ForbiddenCharactersInfo* GetCharInfo( sal_uInt16 nLanguage ) const;
public:
- SvxForbiddenCharactersTable( ::com::sun::star::uno::Reference<
::com::sun::star::lang::XMultiServiceFactory > xMSF, sal_uInt16 nISize = 4,
sal_uInt16 nGrow = 4 );
- ~SvxForbiddenCharactersTable();
+ SvxForbiddenCharactersTable( ::com::sun::star::uno::Reference<
::com::sun::star::lang::XMultiServiceFactory > xMSF );
+ ~SvxForbiddenCharactersTable();
+
+ inline CharInfoMap& Map() { return maCharInfoMap; }
- const com::sun::star::i18n::ForbiddenCharacters* GetForbiddenCharacters(
sal_uInt16 nLanuage, sal_Bool bGetDefault ) const;
+ const com::sun::star::i18n::ForbiddenCharacters* GetForbiddenCharacters(
sal_uInt16 nLanguage, sal_Bool bGetDefault );
void SetForbiddenCharacters( sal_uInt16 nLanuage , const
com::sun::star::i18n::ForbiddenCharacters& );
void ClearForbiddenCharacters( sal_uInt16 nLanuage );
};
diff --git a/editeng/inc/editeng/svxrtf.hxx b/editeng/inc/editeng/svxrtf.hxx
index c79f2bd..fb319c2 100644
--- a/editeng/inc/editeng/svxrtf.hxx
+++ b/editeng/inc/editeng/svxrtf.hxx
@@ -29,7 +29,6 @@
#ifndef _SVXRTF_HXX
#define _SVXRTF_HXX
-#include <tools/table.hxx>
#include <tools/string.hxx>
#include <svl/itemset.hxx>
#include <svtools/parrtf.hxx>
@@ -39,6 +38,7 @@
#include <deque>
#include <utility>
#include <vector>
+#include <map>
class Font;
class Color;
class Graphic;
@@ -85,8 +85,8 @@ public:
typedef Color* ColorPtr;
typedef std::deque< ColorPtr > SvxRTFColorTbl;
-DECLARE_TABLE( SvxRTFFontTbl, Font* )
-DECLARE_TABLE( SvxRTFStyleTbl, SvxRTFStyleType* )
+typedef std::map<int, Font*> SvxRTFFontTbl;
+typedef std::map<int, SvxRTFStyleType*> SvxRTFStyleTbl;
typedef SvxRTFItemStackType* SvxRTFItemStackTypePtr;
SV_DECL_PTRARR_DEL( SvxRTFItemStackList, SvxRTFItemStackTypePtr, 1 )
diff --git a/editeng/source/editeng/editdoc.cxx
b/editeng/source/editeng/editdoc.cxx
index 0161eaa0..43cf491 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -2175,27 +2175,39 @@ SvxFontTable::SvxFontTable()
SvxFontTable::~SvxFontTable()
{
- SvxFontItem* pItem = First();
- while( pItem )
- {
- delete pItem;
- pItem = Next();
- }
+ for(FontItemMap::iterator it = maFontItemMap.begin(); it !=
maFontItemMap.end(); ++it)
+ {
+ delete it->second;
+ }
}
-sal_uLong SvxFontTable::GetId( const SvxFontItem& rFontItem )
+sal_uLong SvxFontTable::GetId( const SvxFontItem& rFontItem ) const
{
- SvxFontItem* pItem = First();
- while ( pItem )
- {
+ for(FontItemMap::const_iterator it = maFontItemMap.begin(); it !=
maFontItemMap.end(); ++it)
+ {
+ SvxFontItem* pItem = it->second;
if ( *pItem == rFontItem )
- return GetCurKey();
- pItem = Next();
- }
+ return it->first;
+ }
DBG_WARNING( "Font not found: GetId()" );
return 0;
}
+void SvxFontTable::Insert( sal_uLong nIdx, SvxFontItem *pFontItem)
+{
+ maFontItemMap[ nIdx ] = pFontItem;
+}
+
+int SvxFontTable::Count() const
+{
+ return maFontItemMap.size();
+}
+
+SvxFontItem* SvxFontTable::Get( sal_uLong nIdx )
+{
+ return maFontItemMap[ nIdx ];
+}
+
SvxColorList::SvxColorList()
{
}
diff --git a/editeng/source/editeng/editdoc.hxx
b/editeng/source/editeng/editdoc.hxx
index 2b35c3e..b7d1171 100644
--- a/editeng/source/editeng/editdoc.hxx
+++ b/editeng/source/editeng/editdoc.hxx
@@ -37,7 +37,6 @@
#include <svl/itemset.hxx>
#include <svl/style.hxx>
#include <svl/itempool.hxx>
-#include <tools/table.hxx>
#include <vector>
#include <deque>
@@ -141,15 +140,22 @@ SV_DECL_PTRARR( ContentInfoArray, ContentAttribsInfoPtr,
1 )
// ----------------------------------------------------------------------
// class SvxFontTable
// ----------------------------------------------------------------------
-DECLARE_TABLE( DummyFontTable, SvxFontItem* )
-class SvxFontTable : public DummyFontTable
+class SvxFontTable
{
public:
SvxFontTable();
~SvxFontTable();
- sal_uLong GetId( const SvxFontItem& rFont );
+ sal_uLong GetId( const SvxFontItem& rFont ) const;
+ void Insert( sal_uLong nIdx, SvxFontItem *pFontItem);
+ int Count() const;
+ SvxFontItem* Get( sal_uLong nIdx );
+
+private:
+ typedef std::map<sal_uLong, SvxFontItem*> FontItemMap;
+ FontItemMap maFontItemMap;
+
};
// ----------------------------------------------------------------------
diff --git a/editeng/source/editeng/eertfpar.cxx
b/editeng/source/editeng/eertfpar.cxx
index d508716..70266d0 100644
--- a/editeng/source/editeng/eertfpar.cxx
+++ b/editeng/source/editeng/eertfpar.cxx
@@ -371,7 +371,7 @@ void EditRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet
)
if ( rSet.StyleNo() && pImpEditEngine->GetStyleSheetPool() &&
pImpEditEngine->GetStatus().DoImportRTFStyleSheets() )
{
- SvxRTFStyleType* pS = GetStyleTbl().Get( rSet.StyleNo() );
+ SvxRTFStyleType* pS = GetStyleTbl()[ rSet.StyleNo() ];
DBG_ASSERT( pS, "Template not defined in RTF!" );
if ( pS )
{
@@ -433,9 +433,11 @@ void EditRTFParser::SetAttrInDoc( SvxRTFItemStackType
&rSet )
SvxRTFStyleType* EditRTFParser::FindStyleSheet( const XubString& rName )
{
- SvxRTFStyleType* pS = GetStyleTbl().First();
- while ( pS && ( pS->sName != rName ) )
- pS = GetStyleTbl().Next();
+ SvxRTFStyleTbl aTable = GetStyleTbl();
+ SvxRTFStyleTbl::iterator it = aTable.begin();
+ SvxRTFStyleType* pS = it->second;
+ while ( it != aTable.end() && ( (pS = it->second)->sName != rName ) )
+ ++it;
return pS;
}
@@ -451,7 +453,7 @@ SfxStyleSheet* EditRTFParser::CreateStyleSheet(
SvxRTFStyleType* pRTFStyle )
String aParent;
if ( pRTFStyle->nBasedOn )
{
- SvxRTFStyleType* pS = GetStyleTbl().Get( pRTFStyle->nBasedOn );
+ SvxRTFStyleType* pS = GetStyleTbl()[ pRTFStyle->nBasedOn ];
if ( pS && ( pS !=pRTFStyle ) )
aParent = pS->sName;
}
@@ -484,13 +486,11 @@ void EditRTFParser::CreateStyleSheets()
// the SvxRTFParser haa now created the template...
if ( pImpEditEngine->GetStyleSheetPool() &&
pImpEditEngine->GetStatus().DoImportRTFStyleSheets() )
{
- SvxRTFStyleType* pRTFStyle = GetStyleTbl().First();
- while ( pRTFStyle )
- {
- CreateStyleSheet( pRTFStyle );
-
- pRTFStyle = GetStyleTbl().Next();
- }
+ SvxRTFStyleTbl aTable = GetStyleTbl();
+ for (SvxRTFStyleTbl::iterator it = aTable.begin(); it !=
aTable.end(); ++it)
+ {
+ CreateStyleSheet( it->second );
+ }
}
}
diff --git a/editeng/source/misc/forbiddencharacterstable.cxx
b/editeng/source/misc/forbiddencharacterstable.cxx
index deb8d4d..f01c219 100644
--- a/editeng/source/misc/forbiddencharacterstable.cxx
+++ b/editeng/source/misc/forbiddencharacterstable.cxx
@@ -34,8 +34,8 @@
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-SvxForbiddenCharactersTable::SvxForbiddenCharactersTable(
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory
> xMSF, sal_uInt16 nISize, sal_uInt16 nGrow )
- : SvxForbiddenCharactersTableImpl( nISize, nGrow )
+SvxForbiddenCharactersTable::SvxForbiddenCharactersTable(
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory
> xMSF )
+ : maCharInfoMap()
{
mxMSF = xMSF;
}
@@ -43,21 +43,19 @@ SvxForbiddenCharactersTable::SvxForbiddenCharactersTable(
::com::sun::star::uno:
SvxForbiddenCharactersTable::~SvxForbiddenCharactersTable()
{
- for ( sal_uLong n = Count(); n; )
- delete GetObject( --n );
+ for (CharInfoMap::iterator it = maCharInfoMap.begin(); it !=
maCharInfoMap.end(); ++it)
+ delete it->second;
}
-const com::sun::star::i18n::ForbiddenCharacters*
SvxForbiddenCharactersTable::GetForbiddenCharacters( sal_uInt16 nLanguage,
sal_Bool bGetDefault ) const
+const com::sun::star::i18n::ForbiddenCharacters*
SvxForbiddenCharactersTable::GetForbiddenCharacters( sal_uInt16 nLanguage,
sal_Bool bGetDefault )
{
- ForbiddenCharactersInfo* pInf = Get( nLanguage );
+ ForbiddenCharactersInfo* pInf = GetCharInfo( nLanguage );
if ( !pInf && bGetDefault && mxMSF.is() )
{
- const SvxForbiddenCharactersTableImpl *pConstImpl = dynamic_cast<const
SvxForbiddenCharactersTableImpl*>(this);
- SvxForbiddenCharactersTableImpl* pImpl =
const_cast<SvxForbiddenCharactersTableImpl*>(pConstImpl);
- pInf = new ForbiddenCharactersInfo;
- pImpl->Insert( nLanguage, pInf );
+ pInf = new ForbiddenCharactersInfo;
+ maCharInfoMap[ nLanguage ] = pInf;
pInf->bTemporary = sal_True;
LocaleDataWrapper aWrapper( mxMSF, SvxCreateLocale( nLanguage ) );
@@ -70,11 +68,11 @@ const com::sun::star::i18n::ForbiddenCharacters*
SvxForbiddenCharactersTable::Ge
void SvxForbiddenCharactersTable::SetForbiddenCharacters( sal_uInt16
nLanguage, const com::sun::star::i18n::ForbiddenCharacters& rForbiddenChars )
{
- ForbiddenCharactersInfo* pInf = Get( nLanguage );
+ ForbiddenCharactersInfo* pInf = GetCharInfo( nLanguage );
if ( !pInf )
{
pInf = new ForbiddenCharactersInfo;
- Insert( nLanguage, pInf );
+ maCharInfoMap[ nLanguage ] = pInf;
}
pInf->bTemporary = sal_False;
pInf->aForbiddenChars = rForbiddenChars;
@@ -82,12 +80,20 @@ void SvxForbiddenCharactersTable::SetForbiddenCharacters(
sal_uInt16 nLanguage,
void SvxForbiddenCharactersTable::ClearForbiddenCharacters( sal_uInt16
nLanguage )
{
- ForbiddenCharactersInfo* pInf = Get( nLanguage );
+ ForbiddenCharactersInfo* pInf = GetCharInfo( nLanguage );
if ( pInf )
{
- Remove( nLanguage );
+ maCharInfoMap.erase( nLanguage );
delete pInf;
}
}
+ForbiddenCharactersInfo* SvxForbiddenCharactersTable::GetCharInfo( sal_uInt16
nLanguage ) const
+{
+ CharInfoMap::const_iterator it = maCharInfoMap.find( nLanguage );
+ if ( it == maCharInfoMap.end() )
+ return NULL;
+ return it->second;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index ac726c8..651b9eb 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -29,7 +29,6 @@
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <tools/urlobj.hxx>
-#include <tools/table.hxx>
#include <i18npool/mslangid.hxx>
#include <vcl/svapp.hxx>
#include <sot/storinfo.hxx>
diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx
index 8b9d93c..ffcaf3d 100644
--- a/editeng/source/rtf/svxrtf.cxx
+++ b/editeng/source/rtf/svxrtf.cxx
@@ -77,7 +77,6 @@ SvxRTFParser::SvxRTFParser( SfxItemPool& rPool, SvStream& rIn,
int bReadNewDoc )
: SvRTFParser( rIn, 5 ),
rStrm(rIn),
- aFontTbl( 16, 4 ),
pInsPos( 0 ),
pAttrPool( &rPool ),
m_xDocProps( i_xDocProps ),
@@ -119,9 +118,9 @@ SvxRTFParser::~SvxRTFParser()
{
if( !aColorTbl.empty() )
ClearColorTbl();
- if( aFontTbl.Count() )
+ if( !aFontTbl.empty() )
ClearFontTbl();
- if( aStyleTbl.Count() )
+ if( !aStyleTbl.empty() )
ClearStyleTbl();
if( !aAttrStack.empty() )
ClearAttrStack();
@@ -149,9 +148,9 @@ SvParserState SvxRTFParser::CallParser()
if( !aColorTbl.empty() )
ClearColorTbl();
- if( aFontTbl.Count() )
+ if( !aFontTbl.empty() )
ClearFontTbl();
- if( aStyleTbl.Count() )
+ if( !aStyleTbl.empty() )
ClearStyleTbl();
if( !aAttrStack.empty() )
ClearAttrStack();
@@ -194,7 +193,7 @@ void SvxRTFParser::NextToken( int nToken )
case RTF_DEFF:
if( bNewDoc )
{
- if( aFontTbl.Count() )
+ if( !aFontTbl.empty() )
// Can immediately be set
SetDefault( nToken, nTokenValue );
else
@@ -385,14 +384,18 @@ void SvxRTFParser::ReadStyleTable()
{
pStyle->sName = DelCharAtEnd( aToken, ';' );
- if( aStyleTbl.Count() )
+ if( !aStyleTbl.empty() )
{
- SvxRTFStyleType* pOldSt = aStyleTbl.Remove( nStyleNo );
- if( pOldSt )
+ SvxRTFStyleTbl::iterator it = aStyleTbl.find( nStyleNo );
+ if( it != aStyleTbl.end() )
+ {
+ SvxRTFStyleType* pOldSt = it->second;
+ aStyleTbl.erase( it );
delete pOldSt;
+ }
}
// All data from the font is available, so off to the table
- aStyleTbl.Insert( nStyleNo, pStyle );
+ aStyleTbl[ nStyleNo ] = pStyle;
pStyle = new SvxRTFStyleType( *pAttrPool, &aWhichMap[0] );
pStyle->aAttrSet.Put( GetRTFDefaults() );
nStyleNo = 0;
@@ -596,7 +599,7 @@ void SvxRTFParser::ReadFontTable()
(sFntNm += ';' ) += sAltNm;
pFont->SetName( sFntNm );
- aFontTbl.Insert( nInsFontNo, pFont );
+ aFontTbl[ nInsFontNo ] = pFont;
pFont = new Font();
pFont->SetCharSet( nSystemChar );
sAltNm.Erase();
@@ -798,14 +801,16 @@ void SvxRTFParser::ClearColorTbl()
void SvxRTFParser::ClearFontTbl()
{
- for( sal_uInt32 nCnt = aFontTbl.Count(); nCnt; )
- delete aFontTbl.GetObject( --nCnt );
+ for (SvxRTFFontTbl::iterator it = aFontTbl.begin(); it != aFontTbl.end();
++it)
+ delete it->second;
+ aFontTbl.clear();
}
void SvxRTFParser::ClearStyleTbl()
{
- for( sal_uInt32 nCnt = aStyleTbl.Count(); nCnt; )
- delete aStyleTbl.GetObject( --nCnt );
+ for (SvxRTFStyleTbl::iterator it = aStyleTbl.begin(); it !=
aStyleTbl.end(); ++it)
+ delete it->second;
+ aStyleTbl.clear();
}
void SvxRTFParser::ClearAttrStack()
@@ -833,8 +838,9 @@ String& SvxRTFParser::DelCharAtEnd( String& rStr, const
sal_Unicode cDel )
const Font& SvxRTFParser::GetFont( sal_uInt16 nId )
{
- const Font* pFont = aFontTbl.Get( nId );
- if( !pFont )
+ SvxRTFFontTbl::const_iterator it = aFontTbl.find( nId );
+ const Font* pFont;
+ if( it == aFontTbl.end() )
{
const SvxFontItem& rDfltFont = (const SvxFontItem&)
pAttrPool->GetDefaultItem(
@@ -843,6 +849,8 @@ const Font& SvxRTFParser::GetFont( sal_uInt16 nId )
pDfltFont->SetFamily( rDfltFont.GetFamily() );
pFont = pDfltFont;
}
+ else
+ pFont = it->second;
return *pFont;
}
@@ -872,10 +880,9 @@ void SvxRTFParser::_ClearStyleAttr( SvxRTFItemStackType&
rStkType )
const SfxPoolItem* pItem;
SfxWhichIter aIter( rSet );
- SvxRTFStyleType* pStyle;
if( !IsChkStyleAttr() ||
!rStkType.GetAttrSet().Count() ||
- 0 == ( pStyle = aStyleTbl.Get( rStkType.nStyleNo ) ))
+ aStyleTbl.find( rStkType.nStyleNo ) == aStyleTbl.end() )
{
for( sal_uInt16 nWhich = aIter.GetCurWhich(); nWhich; nWhich =
aIter.NextWhich() )
{
@@ -889,6 +896,7 @@ void SvxRTFParser::_ClearStyleAttr( SvxRTFItemStackType&
rStkType )
{
// Delete all Attributes, which are already defined in the Style,
// from the current AttrSet.
+ SvxRTFStyleType* pStyle = aStyleTbl.find( rStkType.nStyleNo )->second;
SfxItemSet &rStyleSet = pStyle->aAttrSet;
const SfxPoolItem* pSItem;
for( sal_uInt16 nWhich = aIter.GetCurWhich(); nWhich; nWhich =
aIter.NextWhich() )
diff --git a/editeng/source/uno/UnoForbiddenCharsTable.cxx
b/editeng/source/uno/UnoForbiddenCharsTable.cxx
index 5bcbf35..2a704a1 100644
--- a/editeng/source/uno/UnoForbiddenCharsTable.cxx
+++ b/editeng/source/uno/UnoForbiddenCharsTable.cxx
@@ -117,18 +117,19 @@ Sequence< Locale > SAL_CALL
SvxUnoForbiddenCharsTable::getLocales()
{
SolarMutexGuard aGuard;
- const sal_Int32 nCount = mxForbiddenChars.is() ? mxForbiddenChars->Count()
: 0;
+ const sal_Int32 nCount = mxForbiddenChars.is() ?
mxForbiddenChars->Map().size() : 0;
Sequence< Locale > aLocales( nCount );
if( nCount )
{
Locale* pLocales = aLocales.getArray();
- for( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++ )
- {
- const sal_uLong nLanguage = mxForbiddenChars->GetObjectKey( nIndex
);
+ for( SvxForbiddenCharactersTable::CharInfoMap::iterator it =
mxForbiddenChars->Map().begin();
+ it != mxForbiddenChars->Map().end(); ++it)
+ {
+ const sal_uLong nLanguage = it->first;
SvxLanguageToLocale ( *pLocales++, static_cast < LanguageType >
(nLanguage) );
- }
+ }
}
return aLocales;
diff --git a/sc/inc/chartpos.hxx b/sc/inc/chartpos.hxx
index 4d3dccb..d18dd67 100644
--- a/sc/inc/chartpos.hxx
+++ b/sc/inc/chartpos.hxx
@@ -35,7 +35,9 @@
class ScAddress;
-class Table;
+
+typedef ::std::map<int, ScAddress*> RowMap;
+typedef ::std::map<int, RowMap*> ColumnsMap;
class ScChartPositionMap
{
@@ -51,7 +53,7 @@ class ScChartPositionMap
ScChartPositionMap( SCCOL nChartCols, SCROW
nChartRows,
SCCOL nColAdd, // header columns
SCROW nRowAdd, // header rows
- Table& rCols // table with col
tables with address*
+ ColumnsMap& rCols // table with col
tables with address*
);
~ScChartPositionMap(); //! deletes all
ScAddress*
diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx
index 5b7617a..f90da31 100644
--- a/sc/source/core/tool/chartpos.cxx
+++ b/sc/source/core/tool/chartpos.cxx
@@ -29,7 +29,7 @@
// INCLUDE ---------------------------------------------------------------
-#include <tools/table.hxx>
+#include <map>
#include "chartpos.hxx"
#include "document.hxx"
@@ -354,7 +354,6 @@ const ScChartPositionMap*
ScChartPositioner::GetPositionMap()
return pPositionMap;
}
-
void ScChartPositioner::CreatePositionMap()
{
if ( eGlue == SC_CHARTGLUE_NA && pPositionMap )
@@ -383,10 +382,10 @@ void ScChartPositioner::CreatePositionMap()
GlueState();
sal_Bool bNoGlue = (eGlue == SC_CHARTGLUE_NONE);
- Table* pCols = new Table;
- Table* pNewRowTable = new Table;
+ ColumnsMap aCols;
+ RowMap* pNewRowTable;
ScAddress* pNewAddress = new ScAddress;
- Table* pCol;
+ RowMap* pCol;
ScAddress* pPos;
SCROW nNoGlueRow = 0;
for ( size_t i = 0, nRanges = aRangeListRef->size(); i < nRanges; ++i )
@@ -402,30 +401,35 @@ void ScChartPositioner::CreatePositionMap()
{
if ( bNoGlue || eGlue == SC_CHARTGLUE_ROWS )
{ // meistens gleiche Cols
- if ( (pCol = (Table*) pCols->Get( nInsCol ))==NULL )
+ ColumnsMap::iterator it = aCols.find( nInsCol );
+ if ( it == aCols.end() )
{
- pCols->Insert( nInsCol, pNewRowTable );
+ aCols[ nInsCol ] = pNewRowTable;
pCol = pNewRowTable;
- pNewRowTable = new Table;
+ pNewRowTable = new RowMap;
}
+ else
+ pCol = it->second;
}
else
{ // meistens neue Cols
- if ( pCols->Insert( nInsCol, pNewRowTable ) )
+ if ( aCols.count( nInsCol ) == 0)
{
+ aCols[ nInsCol ] = pNewRowTable;
pCol = pNewRowTable;
- pNewRowTable = new Table;
+ pNewRowTable = new RowMap;
}
else
- pCol = (Table*) pCols->Get( nInsCol );
+ pCol = aCols.find( nInsCol )->second;
}
// bei anderer Tabelle wurde bereits neuer ColKey erzeugt,
// die Zeilen muessen fuer's Dummy fuellen gleich sein!
sal_uLong nInsRow = (bNoGlue ? nNoGlueRow : nRow1);
for ( nRow = nRow1; nRow <= nRow2; nRow++, nInsRow++ )
{
- if ( pCol->Insert( nInsRow, pNewAddress ) )
+ if ( pCol->count( nInsRow ) == 0)
{
+ (*pCol)[ nInsRow ] =
pNewAddress;
pNewAddress->Set( nCol, nRow, nTab );
pNewAddress = new ScAddress;
}
@@ -439,15 +443,19 @@ void ScChartPositioner::CreatePositionMap()
delete pNewRowTable;
// Anzahl der Daten
- nColCount = static_cast< SCSIZE >( pCols->Count());
- if ( (pCol = (Table*) pCols->First())!=NULL )
+ nColCount = static_cast< SCSIZE >( aCols.size());
+ if ( nColCount )
{
+ pCol = aCols.begin()->second;
if ( bDummyUpperLeft )
- pCol->Insert( 0, (void*)0 ); // Dummy fuer Beschriftung
- nRowCount = static_cast< SCSIZE >( pCol->Count());
+ (*pCol)[ 0 ] = NULL; // Dummy fuer Beschriftung
+ nRowCount = static_cast< SCSIZE >( pCol->size());
}
else
+ {
+ pCol = NULL;
nRowCount = 0;
+ }
if ( nColCount > 0 )
nColCount -= nColAdd;
if ( nRowCount > 0 )
@@ -455,25 +463,25 @@ void ScChartPositioner::CreatePositionMap()
if ( nColCount==0 || nRowCount==0 )
{ // einen Eintrag ohne Daten erzeugen
- if ( pCols->Count() > 0 )
- pCol = (Table*) pCols->First();
+ if ( !aCols.empty() )
+ pCol = aCols.begin()->second;
else
{
- pCol = new Table;
- pCols->Insert( 0, pCol );
+ pCol = new RowMap;
+ aCols[ 0 ] = pCol;
}
nColCount = 1;
- if ( pCol->Count() > 0 )
+ if ( !pCol->empty() )
{ // kann ja eigentlich nicht sein, wenn nColCount==0 || nRowCount==0
- pPos = (ScAddress*) pCol->First();
+ pPos = pCol->begin()->second;
if ( pPos )
{
delete pPos;
- pCol->Replace( pCol->GetCurKey(), (void*)0 );
+ (*pCol)[ pCol->begin()->first ] = NULL;
}
}
else
- pCol->Insert( 0, (void*)0 );
+ (*pCol)[ 0 ] = NULL;
nRowCount = 1;
nColAdd = 0;
nRowAdd = 0;
@@ -482,33 +490,29 @@ void ScChartPositioner::CreatePositionMap()
{
if ( bNoGlue )
{ // Luecken mit Dummies fuellen, erste Spalte ist Master
- Table* pFirstCol = (Table*) pCols->First();
- sal_uLong nCount = pFirstCol->Count();
- pFirstCol->First();
- for ( sal_uLong n = 0; n < nCount; n++, pFirstCol->Next() )
- {
- sal_uLong nKey = pFirstCol->GetCurKey();
- pCols->First();
- while ( (pCol = (Table*) pCols->Next())!=NULL )
- pCol->Insert( nKey, (void*)0 ); // keine Daten
- }
+ RowMap* pFirstCol = aCols.begin()->second;
+ for (RowMap::iterator it = pFirstCol->begin(); it !=
pFirstCol->end(); ++it)
+ {
+ sal_uLong nKey = it->first;
+ for (ColumnsMap::iterator it2 = aCols.begin();
it2 != aCols.end(); ++it2)
+ (*(it2->second))[ nKey ] = NULL; //
keine Daten
+ }
}
}
pPositionMap = new ScChartPositionMap( static_cast<SCCOL>(nColCount),
static_cast<SCROW>(nRowCount),
- static_cast<SCCOL>(nColAdd), static_cast<SCROW>(nRowAdd), *pCols );
+ static_cast<SCCOL>(nColAdd), static_cast<SCROW>(nRowAdd), aCols );
// Aufraeumen
- for ( pCol = (Table*) pCols->First(); pCol; pCol = (Table*) pCols->Next() )
+ for (ColumnsMap::iterator it = aCols.begin(); it != aCols.end(); ++it)
{ //! nur Tables loeschen, nicht die ScAddress*
- delete pCol;
- }
- delete pCols;
+ delete it->second;
+ }
}
ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows,
- SCCOL nColAdd, SCROW nRowAdd, Table& rCols ) :
+ SCCOL nColAdd, SCROW nRowAdd, ColumnsMap& rCols ) :
ppData( new ScAddress* [ nChartCols * nChartRows ] ),
ppColHeader( new ScAddress* [ nChartCols ] ),
ppRowHeader( new ScAddress* [ nChartRows ] ),
@@ -522,18 +526,23 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols,
SCROW nChartRows,
SCCOL nCol;
SCROW nRow;
- Table* pCol = (Table*) rCols.First();
+ ColumnsMap::iterator aColumnsMapIter = rCols.begin();
+ RowMap::iterator aColIter = aColumnsMapIter->second->begin();
// Zeilen-Header
- pPos = (ScAddress*) pCol->First();
+ pPos = aColIter->second;
if ( nRowAdd )
- pPos = (ScAddress*) pCol->Next();
+ {
+ ++aColIter;
+ pPos = aColIter->second;
+ }
if ( nColAdd )
{ // eigenstaendig
for ( nRow = 0; nRow < nRowCount; nRow++ )
{
ppRowHeader[ nRow ] = pPos;
- pPos = (ScAddress*) pCol->Next();
+ ++aColIter;
+ pPos = aColIter->second;
}
}
else
@@ -541,30 +550,37 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols,
SCROW nChartRows,
for ( nRow = 0; nRow < nRowCount; nRow++ )
{
ppRowHeader[ nRow ] = ( pPos ? new ScAddress( *pPos ) : NULL );
- pPos = (ScAddress*) pCol->Next();
+ ++aColIter;
+ pPos = aColIter->second;
}
}
if ( nColAdd )
- pCol = (Table*) rCols.Next();
+ {
+ ++aColumnsMapIter;
+ aColIter = aColumnsMapIter->second->begin();
+ }
// Daten spaltenweise und Spalten-Header
sal_uLong nIndex = 0;
for ( nCol = 0; nCol < nColCount; nCol++ )
{
- if ( pCol )
+ if ( aColIter != aColumnsMapIter->second->end())
{
- pPos = (ScAddress*) pCol->First();
+ aColIter = aColumnsMapIter->second->begin();
+ pPos = aColIter->second;
if ( nRowAdd )
{
ppColHeader[ nCol ] = pPos; // eigenstaendig
- pPos = (ScAddress*) pCol->Next();
+ ++aColIter;
+ pPos = aColIter->second;
}
else
ppColHeader[ nCol ] = ( pPos ? new ScAddress( *pPos ) : NULL );
for ( nRow = 0; nRow < nRowCount; nRow++, nIndex++ )
{
ppData[ nIndex ] = pPos;
- pPos = (ScAddress*) pCol->Next();
+ ++aColIter;
+ pPos = aColIter->second;
}
}
else
@@ -575,7 +591,8 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols,
SCROW nChartRows,
ppData[ nIndex ] = NULL;
}
}
- pCol = (Table*) rCols.Next();
+ ++aColumnsMapIter;
+ aColIter = aColumnsMapIter->second->begin();
}
}
diff --git a/sc/source/filter/html/htmlpars.cxx
b/sc/source/filter/html/htmlpars.cxx
index 323e1a2..e49eb80 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -229,7 +229,6 @@ ScHTMLLayoutParser::ScHTMLLayoutParser(
aPageSize( aPageSizeP ),
aBaseURL( rBaseURL ),
xLockedList( new ScRangeList ),
- pTables( NULL ),
pColOffset( new ScHTMLColOffset ),
pLocalColOffset( new ScHTMLColOffset ),
nFirstTableCell(0),
@@ -279,11 +278,10 @@ ScHTMLLayoutParser::~ScHTMLLayoutParser()
delete pLocalColOffset;
if ( pColOffset )
delete pColOffset;
- if ( pTables )
+ if ( !maTables.empty() )
{
- for ( Table* pT = (Table*) pTables->First(); pT; pT = (Table*)
pTables->Next() )
- delete pT;
- delete pTables;
+ for ( TablesMap::iterator it = maTables.begin(); it !=
maTables.end(); ++it )
+ delete it->second;
}
}
@@ -331,7 +329,7 @@ sal_uLong ScHTMLLayoutParser::Read( SvStream& rStream,
const String& rBaseURL )
{
aSize.Width() = *pOff - nOff;
aSize = pDefaultDev->PixelToLogic( aSize, MapMode( MAP_TWIP ) );
- pColWidths->Insert( j-1, (void*)aSize.Width() );
+ maColWidths[ j-1 ] = aSize.Width();
nOff = *pOff;
}
return nErr;
@@ -538,7 +536,7 @@ void ScHTMLLayoutParser::Adjust()
SCROW nNextRow = 0;
SCROW nCurRow = 0;
sal_uInt16 nPageWidth = (sal_uInt16) aPageSize.Width();
- Table* pTab = NULL;
+ RowMap* pTab = NULL;
for ( size_t i = 0, nListSize = maList.size(); i < nListSize; ++i )
{
ScEEParseEntry* pE = maList[ i ];
@@ -555,7 +553,7 @@ void ScHTMLLayoutParser::Adjust()
}
delete pS;
nTab = pE->nTab;
- pTab = (pTables ? (Table*) pTables->Get( nTab ) : NULL);
+ pTab = GetRowMap( nTab );
}
SCROW nRow = pE->nRow;
@@ -566,7 +564,7 @@ void ScHTMLLayoutParser::Adjust()
else
nCurRow = nNextRow = pE->nRow;
SCROW nR;
- if ( pTab && ((nR = (SCROW)(sal_uLong)pTab->Get( nCurRow )) != 0) )
+ if ( pTab && ((nR = GetRow( pTab, nCurRow )) != 0) )
nNextRow += nR;
else
nNextRow++;
@@ -579,10 +577,10 @@ void ScHTMLLayoutParser::Adjust()
aStack.push( new ScHTMLAdjustStackEntry(
nLastCol, nNextRow, nCurRow ) );
nTab = pE->nTab;
- pTab = (pTables ? (Table*) pTables->Get( nTab ) : NULL);
+ pTab = GetRowMap( nTab );
// neuer Zeilenabstand
SCROW nR;
- if ( pTab && ((nR = (SCROW)(sal_uLong)pTab->Get( nCurRow )) != 0) )
+ if ( pTab && ((nR = GetRow( pTab, nCurRow )) != 0) )
nNextRow = nCurRow + nR;
else
nNextRow = nCurRow + 1;
@@ -596,7 +594,7 @@ void ScHTMLLayoutParser::Adjust()
SCROW nRowSpan = pE->nRowOverlap;
for ( SCROW j=0; j < nRowSpan; j++ )
{ // aus merged Zeilen resultierendes RowSpan
- SCROW nRows = (SCROW)(sal_uLong)pTab->Get( nRow+j );
+ SCROW nRows = GetRow( pTab, nRow+j );
if ( nRows > 1 )
{
pE->nRowOverlap += nRows - 1;
@@ -1227,14 +1225,12 @@ void ScHTMLLayoutParser::TableOff( ImportInfo* pInfo )
{ // Groesse der Tabelle an dieser Position eintragen
SCROW nRow = pS->nRowCnt;
sal_uInt16 nTab = pS->nTable;
- if ( !pTables )
- pTables = new Table;
// Hoehen der aeusseren Table
- Table* pTab1 = (Table*) pTables->Get( nTab );
+ RowMap* pTab1 = GetRowMap( nTab );
if ( !pTab1 )
{
- pTab1 = new Table;
- pTables->Insert( nTab, pTab1 );
+ pTab1 = new RowMap;
+ maTables[ nTab ] = pTab1;
}
SCROW nRowSpan = pE->nRowOverlap;
SCROW nRowKGV;
@@ -1252,11 +1248,11 @@ void ScHTMLLayoutParser::TableOff( ImportInfo* pInfo )
nRowKGV = nRowsPerRow1 = nRows;
nRowsPerRow2 = 1;
}
- Table* pTab2 = NULL;
+ RowMap* pTab2 = NULL;
if ( nRowsPerRow2 > 1 )
{ // Hoehen der inneren Table
- pTab2 = new Table;
- pTables->Insert( nTable, pTab2 );
+ pTab2 = new RowMap;
+ maTables[ nTable ] = pTab2;
}
// void* Data-Entry der Table-Class fuer das
// Hoehen-Mapping missbrauchen
@@ -1267,11 +1263,11 @@ void ScHTMLLayoutParser::TableOff( ImportInfo* pInfo )
for ( SCROW j=0; j < nRowSpan; j++ )
{
sal_uLong nRowKey = nRow + j;
- SCROW nR = (SCROW)(sal_uLong)pTab1->Get( nRowKey );
+ SCROW nR = GetRow( pTab1, nRowKey );
if ( !nR )
- pTab1->Insert( nRowKey,
(void*)(sal_IntPtr)nRowsPerRow1 );
+ (*pTab1)[ nRowKey ] = nRowsPerRow1;
else if ( nRowsPerRow1 > nR )
- pTab1->Replace( nRowKey,
(void*)(sal_IntPtr)nRowsPerRow1 );
+ (*pTab1)[ nRowKey ] = nRowsPerRow1;
//2do: wie geht das noch besser?
else if ( nRowsPerRow1 < nR && nRowSpan == 1
&& nTable == nMaxTable )
@@ -1280,11 +1276,11 @@ void ScHTMLLayoutParser::TableOff( ImportInfo* pInfo )
nR += nAdd;
if ( (nR % nRows) == 0 )
{ // nur wenn abbildbar
- SCROW nR2 = (SCROW)(sal_uLong)pTab1->Get(
nRowKey+1 );
+ SCROW nR2 = GetRow( pTab1, nRowKey+1 );
if ( nR2 > nAdd )
{ // nur wenn wirklich Platz
- pTab1->Replace( nRowKey,
(void*)(sal_IntPtr)nR );
- pTab1->Replace( nRowKey+1,
(void*)(sal_IntPtr)(nR2 - nAdd) );
+ (*pTab1)[ nRowKey ] = nR;
+ (*pTab1)[ nRowKey+1 ] = nR2 - nAdd;
nRowsPerRow2 = nR / nRows;
}
}
@@ -1295,17 +1291,17 @@ void ScHTMLLayoutParser::TableOff( ImportInfo* pInfo )
{ // innen
if ( !pTab2 )
{ // nRowsPerRow2 kann erhoeht worden sein
- pTab2 = new Table;
- pTables->Insert( nTable, pTab2 );
+ pTab2 = new RowMap;
+ maTables[ nTable ] = pTab2;
}
for ( SCROW j=0; j < nRows; j++ )
{
sal_uLong nRowKey = nRow + j;
- SCROW nR = (SCROW)(sal_uLong)pTab2->Get( nRowKey );
+ SCROW nR = GetRow( pTab2, nRowKey );
if ( !nR )
- pTab2->Insert( nRowKey,
(void*)(sal_IntPtr)nRowsPerRow2 );
+ (*pTab2)[ nRowKey ] = nRowsPerRow2;
else if ( nRowsPerRow2 > nR )
- pTab2->Replace( nRowKey,
(void*)(sal_IntPtr)nRowsPerRow2 );
+ (*pTab2)[ nRowKey ] = nRowsPerRow2;
}
}
}
@@ -1368,6 +1364,21 @@ void ScHTMLLayoutParser::TableOff( ImportInfo* pInfo )
}
}
+ScHTMLLayoutParser::RowMap* ScHTMLLayoutParser::GetRowMap(int nTab) const
+{
+ TablesMap::const_iterator it = maTables.find( nTab );
+ if ( it == maTables.end() )
+ return NULL;
+ return it->second;
+}
+
+SCROW ScHTMLLayoutParser::GetRow(RowMap* pRowMap, SCROW nRow)
+{
+ RowMap::const_iterator it = pRowMap->find( nRow );
+ if ( it == pRowMap->end() )
+ return 0;
+ return it->second;
+}
void ScHTMLLayoutParser::Image( ImportInfo* pInfo )
{
diff --git a/sc/source/filter/inc/eeparser.hxx
b/sc/source/filter/inc/eeparser.hxx
index dc1daf1..88b0a51 100644
--- a/sc/source/filter/inc/eeparser.hxx
+++ b/sc/source/filter/inc/eeparser.hxx
@@ -32,12 +32,12 @@
#include <tools/string.hxx>
#include <tools/gen.hxx>
#include <vcl/graph.hxx>
-#include <tools/table.hxx>
#include <svl/itemset.hxx>
#include <editeng/editdata.hxx>
#include <address.hxx>
#include <boost/ptr_container/ptr_vector.hpp>
#include <vector>
+#include <map>
const sal_Char nHorizontal = 1;
const sal_Char nVertical = 2;
@@ -110,13 +110,15 @@ class EditEngine;
class ScEEParser
{
+public:
+ typedef std::map<int, int> ColumnWidthsMap;
protected:
EditEngine* pEdit;
SfxItemPool* pPool;
SfxItemPool* pDocPool;
::std::vector< ScEEParseEntry* > maList;
ScEEParseEntry* pActEntry;
- Table* pColWidths;
+ ColumnWidthsMap maColWidths;
int nLastToken;
SCCOL nColCnt;
SCROW nRowCnt;
@@ -131,7 +133,7 @@ public:
virtual sal_uLong Read( SvStream&, const String& rBaseURL ) = 0;
- Table* GetColWidths() const { return pColWidths; }
+ ColumnWidthsMap& GetColWidths() { return maColWidths; }
void GetDimensions( SCCOL& nCols, SCROW& nRows ) const
{ nCols = nColMax; nRows = nRowMax; }
diff --git a/sc/source/filter/inc/htmlpars.hxx
b/sc/source/filter/inc/htmlpars.hxx
index b8846c4..5d78221 100644
--- a/sc/source/filter/inc/htmlpars.hxx
+++ b/sc/source/filter/inc/htmlpars.hxx
@@ -167,13 +167,16 @@ class HTMLOption;
class ScHTMLLayoutParser : public ScHTMLParser
{
+public:
+ typedef std::map<SCROW, SCROW> RowMap;
+ typedef std::map<int, RowMap*> TablesMap;
private:
Size aPageSize;
rtl::OUString aBaseURL;
ScHTMLTableStack aTableStack;
rtl::OUString aString;
ScRangeListRef xLockedList; // je Table
- Table* pTables;
+ TablesMap maTables;
ScHTMLColOffset* pColOffset;
ScHTMLColOffset* pLocalColOffset; // je Table
sal_uLong nFirstTableCell; // je Table
@@ -228,6 +231,9 @@ private:
void AnchorOn( ImportInfo* );
void FontOn( ImportInfo* );
+ RowMap* GetRowMap(int nTab) const;
+ static SCROW GetRow(RowMap*, SCROW);
+
public:
ScHTMLLayoutParser( EditEngine*, const String&
rBaseURL, const Size& aPageSize, ScDocument* );
virtual ~ScHTMLLayoutParser();
diff --git a/sc/source/filter/rtf/eeimpars.cxx
b/sc/source/filter/rtf/eeimpars.cxx
index 2fb0484..145958a 100644
--- a/sc/source/filter/rtf/eeimpars.cxx
+++ b/sc/source/filter/rtf/eeimpars.cxx
@@ -431,16 +431,15 @@ void ScEEImport::WriteToDocument( sal_Bool bSizeColsRows,
double nOutputFactor,
if ( bSizeColsRows )
{
// Spaltenbreiten
- Table* pColWidths = mpParser->GetColWidths();
- if ( pColWidths->Count() )
+ ScEEParser::ColumnWidthsMap& rColWidths = mpParser->GetColWidths();
+ if ( !rColWidths.empty() )
{
nProgress = 0;
pProgress->SetState( nProgress, nEndCol - nStartCol + 1 );
for ( SCCOL nCol = nStartCol; nCol <= nEndCol; nCol++ )
{
- sal_uInt16 nWidth = (sal_uInt16)(sal_uLong) pColWidths->Get(
nCol );
- if ( nWidth )
- mpDoc->SetColWidth( nCol, nTab, nWidth );
+ if ( rColWidths.find( nCol ) != rColWidths.end() )
+ mpDoc->SetColWidth( nCol, nTab, rColWidths.find( nCol
)->second );
pProgress->SetState( ++nProgress );
}
}
@@ -513,20 +512,23 @@ sal_Bool ScEEImport::GraphicSize( SCCOL nCol, SCROW nRow,
SCTAB /*nTab*/, ScEEPa
nDir = pI->nDir;
}
// Spaltenbreiten
- Table* pColWidths = mpParser->GetColWidths();
- long nThisWidth = (long) pColWidths->Get( nCol );
+ ScEEParser::ColumnWidthsMap& rColWidths = mpParser->GetColWidths();
+ long nThisWidth = 0;
+ if ( rColWidths.find( nCol ) != rColWidths.end() )
+ nThisWidth = (long) rColWidths.find( nCol )->second;
long nColWidths = nThisWidth;
SCCOL nColSpanCol = nCol + pE->nColOverlap;
for ( SCCOL nC = nCol + 1; nC < nColSpanCol; nC++ )
{
- nColWidths += (long) pColWidths->Get( nC );
+ if ( rColWidths.find( nC ) != rColWidths.end() )
+ nColWidths += (long) rColWidths.find( nC )->second;
}
if ( nWidth > nColWidths )
{ // Differenz nur in der ersten Spalte eintragen
if ( nThisWidth )
- pColWidths->Replace( nCol, (void*)(nWidth - nColWidths +
nThisWidth) );
+ rColWidths[ nCol ] = nWidth - nColWidths + nThisWidth;
else
- pColWidths->Insert( nCol, (void*)(nWidth - nColWidths) );
+ rColWidths[ nCol ] = nWidth - nColWidths;
}
// Zeilenhoehen, Differenz auf alle betroffenen Zeilen verteilen
SCROW nRowSpan = pE->nRowOverlap;
@@ -619,7 +621,6 @@ ScEEParser::ScEEParser( EditEngine* pEditP ) :
pEdit( pEditP ),
pPool( EditEngine::CreatePool() ),
pDocPool( new ScDocumentPool ),
- pColWidths( new Table ),
nLastToken(0),
nColCnt(0),
nRowCnt(0),
@@ -636,7 +637,6 @@ ScEEParser::ScEEParser( EditEngine* pEditP ) :
ScEEParser::~ScEEParser()
{
delete pActEntry;
- delete pColWidths;
if ( !maList.empty() ) maList.clear();
// Pool erst loeschen nachdem die Listen geloescht wurden
diff --git a/sc/source/ui/unoobj/chart2uno.cxx
b/sc/source/ui/unoobj/chart2uno.cxx
index 0317f94..1149b58 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -46,8 +46,9 @@
#include "formula/opcode.hxx"
+#include <map>
+
#include <sfx2/objsh.hxx>
-#include <tools/table.hxx>
#include <vcl/svapp.hxx>
#include <com/sun/star/beans/UnknownPropertyException.hpp>
diff --git a/sw/source/filter/rtf/rtffld.cxx b/sw/source/filter/rtf/rtffld.cxx
index 51741e1..62f5fcb 100644
--- a/sw/source/filter/rtf/rtffld.cxx
+++ b/sw/source/filter/rtf/rtffld.cxx
@@ -595,8 +595,9 @@ int SwRTFParser::MakeFieldInst( String& rFieldStr )
// Font setzen
{
SvxRTFFontTbl& rTbl = GetFontTbl();
- for( Font* pFont = rTbl.First(); pFont;
- pFont = rTbl.Next() )
+
for(SvxRTFFontTbl::iterator it = rTbl.begin(); it != rTbl.end(); ++it)
+ {
+ Font* pFont =
it->second;
if( pFont->GetName() == sParam )
{
rSet.Put( SvxFontItem(
@@ -608,6 +609,7 @@ int SwRTFParser::MakeFieldInst( String& rFieldStr )
RES_CHRATR_FONT ));
break;
}
+ }
}
break;
case 'h': case 'H':
diff --git a/sw/source/filter/rtf/rtfnum.cxx b/sw/source/filter/rtf/rtfnum.cxx
index 07b3319..40b5101 100644
--- a/sw/source/filter/rtf/rtfnum.cxx
+++ b/sw/source/filter/rtf/rtfnum.cxx
@@ -585,7 +585,7 @@ void SwRTFParser::ReadListOverrideTable()
}
// search the outline numrule and set it into the doc
- if( GetStyleTbl().Count() )
+ if( !GetStyleTbl().empty() )
{
if( !bStyleTabValid )
MakeStyleTab();
@@ -594,11 +594,12 @@ void SwRTFParser::ReadListOverrideTable()
std::map<sal_Int32,SwTxtFmtColl*>::const_iterator iterColl;
sal_uInt16 nRulePos( USHRT_MAX );
const SwNumRule *pNumRule = 0;
- SvxRTFStyleType* pStyle = GetStyleTbl().First();
- do {
+ for(SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it !=
GetStyleTbl().end(); ++it)
+ {
+ SvxRTFStyleType* pStyle = it->second;
if ( MAXLEVEL > pStyle->nOutlineNo )
{
- iterColl = aTxtCollTbl.find(
(sal_uInt16)GetStyleTbl().GetCurKey() );
+ iterColl = aTxtCollTbl.find( it->first );
if ( iterColl != aTxtCollTbl.end() )
{
const SfxItemState eItemState =
@@ -634,8 +635,7 @@ void SwRTFParser::ReadListOverrideTable()
}
pStyle->aAttrSet.ClearItem( FN_PARAM_NUM_LEVEL );
-
- } while( 0 != (pStyle = GetStyleTbl().Next()) );
+ }
}
SkipToken( -1 ); // die schliesende Klammer wird "oben" ausgewertet
@@ -723,17 +723,15 @@ void SwRTFParser::RemoveUnusedNumRules()
const Font* SwRTFParser::FindFontOfItem( const SvxFontItem& rItem ) const
{
SvxRTFFontTbl& rFntTbl = ((SwRTFParser*)this)->GetFontTbl();
- const Font* pFnt = rFntTbl.First();
- while( pFnt )
+ for(SvxRTFFontTbl::const_iterator it = rFntTbl.begin(); it !=
rFntTbl.end(); ++it)
{
+ const Font* pFnt = it->second;
if( pFnt->GetFamily() == rItem.GetFamily() &&
pFnt->GetName() == rItem.GetFamilyName() &&
pFnt->GetStyleName() == rItem.GetStyleName() &&
pFnt->GetPitch() == rItem.GetPitch() &&
pFnt->GetCharSet() == rItem.GetCharSet() )
return pFnt;
-
- pFnt = rFntTbl.Next();
}
return 0;
}
diff --git a/sw/source/filter/rtf/swparrtf.cxx
b/sw/source/filter/rtf/swparrtf.cxx
index 81abb16..7c90295 100644
--- a/sw/source/filter/rtf/swparrtf.cxx
+++ b/sw/source/filter/rtf/swparrtf.cxx
@@ -2195,8 +2195,9 @@ void SwRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet
)
((SwFmtCharFmt*)pCharFmt)->GetCharFmt() )
{
const String& rName =
((SwFmtCharFmt*)pCharFmt)->GetCharFmt()->GetName();
- SvxRTFStyleType* pStyle = GetStyleTbl().First();
- do {
+ for(SvxRTFStyleTbl::iterator it =
GetStyleTbl().begin(); it != GetStyleTbl().end(); ++it)
+ {
+ SvxRTFStyleType* pStyle = it->second;
if( pStyle->bIsCharFmt && pStyle->sName == rName )
{
// alle Attribute, die schon vom Style definiert sind, aus
dem
@@ -2218,7 +2219,7 @@ void SwRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet
)
}
break;
}
- } while( 0 != (pStyle = GetStyleTbl().Next()) );
+ }
pDoc->InsertPoolItem(aPam, *pCharFmt, 0);
rSet.GetAttrSet().ClearItem(RES_TXTATR_CHARFMT); //test hack
@@ -2734,7 +2735,7 @@ void SwRTFParser::ReadDocControls( int nToken )
void SwRTFParser::MakeStyleTab()
{
// dann erzeuge aus der SvxStyle-Tabelle die Swg-Collections
- if( GetStyleTbl().Count() )
+ if( !GetStyleTbl().empty() )
{
sal_uInt16 nValidOutlineLevels = 0;
if( !IsNewDoc() )
@@ -2746,9 +2747,10 @@ void SwRTFParser::MakeStyleTab()
nValidOutlineLevels |= 1 << rColls[ n
]->GetAssignedOutlineStyleLevel();//<-end,zhaojianwei
}
- SvxRTFStyleType* pStyle = GetStyleTbl().First();
- do {
- sal_uInt16 nNo = sal_uInt16( GetStyleTbl().GetCurKey() );
+ for(SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it !=
GetStyleTbl().end(); ++it)
+ {
+ SvxRTFStyleType* pStyle = it->second;
+ sal_uInt16 nNo = it->first;
if( pStyle->bIsCharFmt )
{
if(aCharFmtTbl.find( nNo ) == aCharFmtTbl.end())
@@ -2761,7 +2763,7 @@ void SwRTFParser::MakeStyleTab()
MakeStyle( nNo, *pStyle );
}
- } while( 0 != (pStyle = GetStyleTbl().Next()) );
+ }
bStyleTabValid = sal_True;
}
}
@@ -3996,7 +3998,9 @@ SwTxtFmtColl* SwRTFParser::MakeStyle( sal_uInt16 nNo,
const SvxRTFStyleType& rSt
sal_uInt16 nStyleNo = rStyle.nBasedOn;
if( rStyle.bBasedOnIsSet && nStyleNo != nNo )
{
- SvxRTFStyleType* pDerivedStyle = GetStyleTbl().Get( nStyleNo );
+ SvxRTFStyleType* pDerivedStyle = NULL;
+ if ( GetStyleTbl().find( nStyleNo ) != GetStyleTbl().end())
+ pDerivedStyle = GetStyleTbl().find( nStyleNo )->second;
SwTxtFmtColl* pDerivedColl = NULL;
std::map<sal_Int32,SwTxtFmtColl*>::iterator iter =
aTxtCollTbl.find(nStyleNo);
@@ -4041,7 +4045,10 @@ SwTxtFmtColl* SwRTFParser::MakeStyle( sal_uInt16 nNo,
const SvxRTFStyleType& rSt
if( iter == aTxtCollTbl.end()) // noch nicht vorhanden,
also anlegen
{
// ist die ueberhaupt als Style vorhanden ?
- SvxRTFStyleType* pMkStyle = GetStyleTbl().Get( nStyleNo );
+ SvxRTFStyleType* pMkStyle = NULL;
+ if ( GetStyleTbl().find( nStyleNo ) != GetStyleTbl().end() )
+ pMkStyle = GetStyleTbl().find( nStyleNo )->second;
+
pNext = pMkStyle
? MakeStyle( nStyleNo, *pMkStyle )
: pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
@@ -4067,7 +4074,10 @@ SwCharFmt* SwRTFParser::MakeCharStyle( sal_uInt16 nNo,
const SvxRTFStyleType& rS
sal_uInt16 nStyleNo = rStyle.nBasedOn;
if( rStyle.bBasedOnIsSet && nStyleNo != nNo )
{
- SvxRTFStyleType* pDerivedStyle = GetStyleTbl().Get( nStyleNo );
+ SvxRTFStyleType* pDerivedStyle = NULL;
+ if ( GetStyleTbl().find( nStyleNo ) != GetStyleTbl().end() )
+ pDerivedStyle = GetStyleTbl().find( nStyleNo )->second;
+
SwCharFmt* pDerivedFmt = NULL;
std::map<sal_Int32,SwCharFmt*>::iterator iter = aCharFmtTbl.find(
nStyleNo );
diff --git a/sw/source/ui/docvw/srcedtw.cxx b/sw/source/ui/docvw/srcedtw.cxx
index 9bd534c..01166f4 100644
--- a/sw/source/ui/docvw/srcedtw.cxx
+++ b/sw/source/ui/docvw/srcedtw.cxx
@@ -604,16 +604,15 @@ IMPL_LINK( SwSrcEditWindow, SyntaxTimerHdl, Timer *,
pTimer )
nCur -= 40;
else
nCur = 0;
- if(aSyntaxLineTable.Count())
+ if(!maSyntaxLineTable.empty())
for(sal_uInt16 i = 0; i < 80 && nCount < 40; i++, nCur++)
{
- void * p = aSyntaxLineTable.Get(nCur);
- if(p)
+ if( maSyntaxLineTable.find( nCur ) != maSyntaxLineTable.end())
{
DoSyntaxHighlight( nCur );
- aSyntaxLineTable.Remove( nCur );
+ maSyntaxLineTable.erase( nCur );
nCount++;
- if(!aSyntaxLineTable.Count())
+ if(maSyntaxLineTable.empty())
break;
if((Time( Time::SYSTEM ).GetTime() -
aSyntaxCheckStart.GetTime()) > MAX_HIGHLIGHTTIME )
{
@@ -624,14 +623,12 @@ IMPL_LINK( SwSrcEditWindow, SyntaxTimerHdl, Timer *,
pTimer )
}
// when there is still anything left by then, go on from the beginning
- void* p = aSyntaxLineTable.First();
- while ( p && nCount < MAX_SYNTAX_HIGHLIGHT)
+ while ( !maSyntaxLineTable.empty() && nCount < MAX_SYNTAX_HIGHLIGHT)
{
- nLine = (sal_uInt16)aSyntaxLineTable.GetCurKey();
+ SyntaxLineTable::iterator it = maSyntaxLineTable.begin();
+ nLine = *it;
DoSyntaxHighlight( nLine );
- sal_uInt16 nCurKey = (sal_uInt16)aSyntaxLineTable.GetCurKey();
- p = aSyntaxLineTable.Next();
- aSyntaxLineTable.Remove(nCurKey);
+ maSyntaxLineTable.erase(it);
nCount ++;
if(Time( Time::SYSTEM ).GetTime() - aSyntaxCheckStart.GetTime() >
MAX_HIGHLIGHTTIME)
{
@@ -640,7 +637,7 @@ IMPL_LINK( SwSrcEditWindow, SyntaxTimerHdl, Timer *, pTimer
)
}
}
- if(aSyntaxLineTable.Count() && !pTimer->IsActive())
+ if(!maSyntaxLineTable.empty() && !pTimer->IsActive())
pTimer->Start();
// SyntaxTimerHdl is called when text changed
// => good opportunity to determine text width!
@@ -681,7 +678,7 @@ void SwSrcEditWindow::DoDelayedSyntaxHighlight( sal_uInt16
nPara )
{
if ( !bHighlighting && bDoSyntaxHighlight )
{
- aSyntaxLineTable.Insert( nPara, (void*)(sal_uInt16)1 );
+ maSyntaxLineTable.insert( nPara );
aSyntaxIdleTimer.Start();
}
}
diff --git a/sw/source/ui/inc/srcedtw.hxx b/sw/source/ui/inc/srcedtw.hxx
index 3439b19..cdaa2e6 100644
--- a/sw/source/ui/inc/srcedtw.hxx
+++ b/sw/source/ui/inc/srcedtw.hxx
@@ -28,11 +28,12 @@
#ifndef _SRCEDTW_HXX
#define _SRCEDTW_HXX
+#include <set>
+
#include <vcl/window.hxx>
#include <svl/lstner.hxx>
#include <vcl/timer.hxx>
-#include <tools/table.hxx>
#include <svtools/xtextedt.hxx>
namespace com { namespace sun { namespace star { namespace beans {
@@ -96,7 +97,8 @@ private:
sal_Bool bHighlighting;
Timer aSyntaxIdleTimer;
- Table aSyntaxLineTable;
+ typedef std::set<sal_uInt16> SyntaxLineTable;
+ SyntaxLineTable maSyntaxLineTable;
void ImpDoHighlight( const String& rSource, sal_uInt16 nLineOff
);
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice