[Libreoffice-commits] .: Branch 'feature/unlimited-number-of-sheets' - 2 commits - sc/inc sc/source

Markus Mohrhard mmohrhard at kemper.freedesktop.org
Mon May 16 16:39:08 PDT 2011


 sc/inc/document.hxx              |    6 -
 sc/source/core/data/documen2.cxx |   32 +++----
 sc/source/core/data/documen3.cxx |  166 +++++++++++++++++++++------------------
 sc/source/core/data/documen4.cxx |   64 +++++++--------
 sc/source/core/data/documen5.cxx |   18 ++--
 sc/source/core/data/documen7.cxx |    8 -
 sc/source/core/data/documen8.cxx |   16 +--
 sc/source/core/data/documen9.cxx |   23 ++---
 sc/source/core/data/document.cxx |    6 -
 9 files changed, 176 insertions(+), 163 deletions(-)

New commits:
commit 80de68534947104ec4b585e1e8af08abc1102e99
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue May 17 01:37:48 2011 +0200

    rework most of the ScDocument methods
    
    it compiles and the unit test does not fail

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 5b1ebcd..32af539 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -472,7 +472,7 @@ public:
     SC_DLLPUBLIC ScRangeName* GetRangeName() const;
     void SetRangeName(SCTAB nTab, ScRangeName* pNew);
     void SetRangeName( ScRangeName* pNewRangeName );
-    SCTAB			GetMaxTableNumber() { return nMaxTableNumber; }
+    SCTAB			GetMaxTableNumber() { return static_cast<SCTAB>(pTab.size()); }
     void			SetMaxTableNumber(SCTAB nNumber) { nMaxTableNumber = nNumber; }
 
     ScRangePairList*	GetColNameRanges() { return &xColNameRanges; }
@@ -534,7 +534,7 @@ public:
     SC_DLLPUBLIC void            SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData);
     SC_DLLPUBLIC ScDBData*       GetAnonymousDBData(SCTAB nTab);
 
-    SC_DLLPUBLIC inline SCTAB	GetTableCount() const { return nMaxTableNumber; }
+    SC_DLLPUBLIC inline SCTAB	GetTableCount() const { return static_cast<SCTAB>(pTab.size()); }
     SvNumberFormatterIndexTable* GetFormatExchangeList() const { return pFormatExchangeList; }
 
     SC_DLLPUBLIC ScDocProtection* GetDocProtection() const;
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index 4c2ee34..b8a5f81 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -139,7 +139,7 @@ ScDocument::ScDocument( ScDocumentMode	eMode,
         pCondFormList( NULL ),
         pValidationList( NULL ),
         pFormatExchangeList( NULL ),
-        pTab( 10 ),
+        pTab( 0 ),
         pRangeName(NULL),
         pDPCollection( NULL ),
         pLinkManager( NULL ),
@@ -551,7 +551,7 @@ ScNoteEditEngine& ScDocument::GetNoteEngine()
 }
 
 
-void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks )//TODO:FIXME
+void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks )
 {
     if (bIsClip)
     {
@@ -631,7 +631,7 @@ void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
             sal_Bool bExtras = !bIsUndo;		// Spaltenbreiten, Zeilenhoehen, Flags
             if ( nTab >= static_cast<SCTAB>(pTab.size()) )
             {
-                while( nTab > pTab.size() )
+                while( nTab > static_cast<SCTAB>(pTab.size()) )
                 {
                     pTab.push_back( NULL );
                 }
@@ -752,7 +752,7 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos )
     {
         if (pTab[nOldPos])
         {
-            SCTAB nTabCount = pTab.size();
+            SCTAB nTabCount = static_cast<SCTAB>(pTab.size());
             if (nTabCount > 1)
             {
                 sal_Bool bOldAutoCalc = GetAutoCalc();
@@ -796,15 +796,15 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos )
                 for (i = nTabCount - 1; i > nNewPos; i--)
                     pTab[i] = pTab[i - 1];
                 pTab[nNewPos] = pSaveTab;
-                for (i = 0; i < pTab.size(); i++)
+                for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
                     if (pTab[i])
                         pTab[i]->UpdateMoveTab( nOldPos, nNewPos, i, *pProgress );
                 delete pProgress;	// freimachen fuer evtl. andere
-                for (i = 0; i < pTab.size(); i++)
+                for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
                     if (pTab[i])
                         pTab[i]->UpdateCompile();
                 SetNoListening( false );
-                for (i = 0; i < pTab.size(); i++)
+                for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
                     if (pTab[i])
                         pTab[i]->StartAllListeners();
                 // sheet names of references may not be valid until sheet is moved
@@ -824,7 +824,7 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos )
 
 sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyMarked )
 {
-    if (SC_TAB_APPEND == nNewPos ) nNewPos = pTab.size();
+    if (SC_TAB_APPEND == nNewPos ) nNewPos = static_cast<SCTAB>(pTab.size());
     String aName;
     GetName(nOldPos, aName);
 
@@ -846,13 +846,13 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
     SetAutoCalc( false );	// Mehrfachberechnungen vermeiden
     if (bValid)
     {
-        if (nNewPos >= pTab.size())
+        if (nNewPos >= static_cast<SCTAB>(pTab.size()))
         {
             pTab.push_back( new ScTable(this, nMaxTableNumber, aName) );
         }
         else
         {
-            if (VALIDTAB(nNewPos) && (nNewPos < pTab.size()))
+            if (VALIDTAB(nNewPos) && (nNewPos < static_cast<SCTAB>(pTab.size())))
             {
                 SetNoListening( sal_True );
 
@@ -876,7 +876,7 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
                 for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it)
                     if (*it && it != (pTab.begin() + nOldPos))
                         (*it)->UpdateInsertTab(nNewPos);
-                for (i = pTab.size(); i > nNewPos; i--)
+                for (i = static_cast<SCTAB>(pTab.size())-1; i > nNewPos; i--)
                     pTab[i] = pTab[i - 1];
                 if (nNewPos <= nOldPos)
                     nOldPos++;
@@ -958,7 +958,7 @@ sal_uLong ScDocument::TransferTab( ScDocument* pSrcDoc, SCTAB nSrcPos,
     }
     else						// bestehende Tabelle ersetzen
     {
-        if (VALIDTAB(nDestPos) && nDestPos < pTab.size() && pTab[nDestPos])
+        if (VALIDTAB(nDestPos) && nDestPos < static_cast<SCTAB>(pTab.size()) && pTab[nDestPos])
         {
             pTab[nDestPos]->DeleteArea( 0,0, MAXCOL,MAXROW, IDF_ALL );
         }
@@ -1151,7 +1151,7 @@ sal_uLong ScDocument::TransferTab( ScDocument* pSrcDoc, SCTAB nSrcPos,
 
 void ScDocument::SetError( SCCOL nCol, SCROW nRow, SCTAB nTab, const sal_uInt16 nError)
 {
-    if (VALIDTAB(nTab))
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
         if (pTab[nTab])
             pTab[nTab]->SetError( nCol, nRow, nError );
 }
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 17d5bd9..d5fd429 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -91,7 +91,7 @@ using namespace com::sun::star;
 void ScDocument::GetAllTabRangeNames(ScRangeName::TabNameCopyMap& rNames) const
 {
     ScRangeName::TabNameCopyMap aNames;
-    for (SCTAB i = 0; i <= MAXTAB; ++i)
+    for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i)
     {
         if (!pTab[i])
             // no more tables to iterate through.
@@ -110,7 +110,7 @@ void ScDocument::GetAllTabRangeNames(ScRangeName::TabNameCopyMap& rNames) const
 void ScDocument::SetAllTabRangeNames(const ScRangeName::TabNameCopyMap& rNames)
 {
     // Remove all existing range names first.
-    for (SCTAB i = 0; i <= MAXTAB; ++i)
+    for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i)
     {
         if (!pTab[i])
             // no more tables to iterate through.
@@ -126,7 +126,7 @@ void ScDocument::SetAllTabRangeNames(const ScRangeName::TabNameCopyMap& rNames)
 
 ScRangeName* ScDocument::GetRangeName(SCTAB nTab) const
 {
-    if (!ValidTab(nTab) || !pTab[nTab])
+    if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
         return NULL;
 
     return pTab[nTab]->GetRangeName();
@@ -141,7 +141,7 @@ ScRangeName* ScDocument::GetRangeName() const
 
 void ScDocument::SetRangeName(SCTAB nTab, ScRangeName* pNew)
 {
-    if (!ValidTab(nTab) || !pTab[nTab])
+    if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
         return;
 
     return pTab[nTab]->SetRangeName(pNew);
@@ -326,19 +326,19 @@ void ScDocument::SetChartListenerCollection(
 
 void ScDocument::SetScenario( SCTAB nTab, sal_Bool bFlag )
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->SetScenario(bFlag);
 }
 
 sal_Bool ScDocument::IsScenario( SCTAB nTab ) const
 {
-    return ValidTab(nTab) && pTab[nTab] &&pTab[nTab]->IsScenario();
+    return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] &&pTab[nTab]->IsScenario();
 }
 
 void ScDocument::SetScenarioData( SCTAB nTab, const String& rComment,
                                         const Color& rColor, sal_uInt16 nFlags )
 {
-    if (ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsScenario())
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario())
     {
         pTab[nTab]->SetScenarioComment( rComment );
         pTab[nTab]->SetScenarioColor( rColor );
@@ -348,20 +348,20 @@ void ScDocument::SetScenarioData( SCTAB nTab, const String& rComment,
 
 Color ScDocument::GetTabBgColor( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetTabBgColor();
     return Color(COL_AUTO);
 }
 
 void ScDocument::SetTabBgColor( SCTAB nTab, const Color& rColor )
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->SetTabBgColor(rColor);
 }
 
 bool ScDocument::IsDefaultTabBgColor( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetTabBgColor() == COL_AUTO;
     return true;
 }
@@ -369,7 +369,7 @@ bool ScDocument::IsDefaultTabBgColor( SCTAB nTab ) const
 void ScDocument::GetScenarioData( SCTAB nTab, String& rComment,
                                         Color& rColor, sal_uInt16& rFlags ) const
 {
-    if (ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsScenario())
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario())
     {
         pTab[nTab]->GetScenarioComment( rComment );
         rColor = pTab[nTab]->GetScenarioColor();
@@ -379,13 +379,13 @@ void ScDocument::GetScenarioData( SCTAB nTab, String& rComment,
 
 void ScDocument::GetScenarioFlags( SCTAB nTab, sal_uInt16& rFlags ) const
 {
-    if (VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->IsScenario())
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario())
         rFlags = pTab[nTab]->GetScenarioFlags();
 }
 
 sal_Bool ScDocument::IsLinked( SCTAB nTab ) const
 {
-    return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsLinked();
+    return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsLinked();
     // euqivalent to
     //if (ValidTab(nTab) && pTab[nTab])
     //	return pTab[nTab]->IsLinked();
@@ -409,42 +409,42 @@ void ScDocument::SetGrammar( formula::FormulaGrammar::Grammar eGram )
 
 sal_Bool ScDocument::GetLinkMode( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetLinkMode();
     return SC_LINK_NONE;
 }
 
 const String& ScDocument::GetLinkDoc( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetLinkDoc();
     return EMPTY_STRING;
 }
 
 const String& ScDocument::GetLinkFlt( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetLinkFlt();
     return EMPTY_STRING;
 }
 
 const String& ScDocument::GetLinkOpt( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetLinkOpt();
     return EMPTY_STRING;
 }
 
 const String& ScDocument::GetLinkTab( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetLinkTab();
     return EMPTY_STRING;
 }
 
 sal_uLong ScDocument::GetLinkRefreshDelay( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetLinkRefreshDelay();
     return 0;
 }
@@ -453,14 +453,14 @@ void ScDocument::SetLink( SCTAB nTab, sal_uInt8 nMode, const String& rDoc,
                             const String& rFilter, const String& rOptions,
                             const String& rTabName, sal_uLong nRefreshDelay )
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->SetLink( nMode, rDoc, rFilter, rOptions, rTabName, nRefreshDelay );
 }
 
 sal_Bool ScDocument::HasLink( const String& rDoc,
                             const String& rFilter, const String& rOptions ) const
 {
-    SCTAB nCount = GetTableCount();
+    SCTAB nCount = static_cast<SCTAB>(pTab.size());
     for (SCTAB i=0; i<nCount; i++)
         if (pTab[i]->IsLinked()
                 && pTab[i]->GetLinkDoc() == rDoc
@@ -561,20 +561,20 @@ ScFormulaParserPool& ScDocument::GetFormulaParserPool() const
 
 const ScSheetEvents* ScDocument::GetSheetEvents( SCTAB nTab ) const
 {
-    if (VALIDTAB(nTab) && pTab[nTab])
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetSheetEvents();
     return NULL;
 }
 
 void ScDocument::SetSheetEvents( SCTAB nTab, const ScSheetEvents* pNew )
 {
-    if (VALIDTAB(nTab) && pTab[nTab])
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->SetSheetEvents( pNew );
 }
 
 bool ScDocument::HasSheetEventScript( SCTAB nTab, sal_Int32 nEvent, bool bWithVbaEvents ) const
 {
-    if (pTab[nTab])
+    if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
     {
         // check if any event handler script has been configured
         const ScSheetEvents* pEvents = pTab[nTab]->GetSheetEvents();
@@ -598,7 +598,7 @@ bool ScDocument::HasSheetEventScript( SCTAB nTab, sal_Int32 nEvent, bool bWithVb
 
 bool ScDocument::HasAnySheetEventScript( sal_Int32 nEvent, bool bWithVbaEvents ) const
 {
-    for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++)
+    for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++)
         if (HasSheetEventScript( nTab, nEvent, bWithVbaEvents ))
             return true;
     return false;
@@ -606,7 +606,7 @@ bool ScDocument::HasAnySheetEventScript( sal_Int32 nEvent, bool bWithVbaEvents )
 
 bool ScDocument::HasAnyCalcNotification() const
 {
-    for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++)
+    for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++)
         if (pTab[nTab] && pTab[nTab]->GetCalcNotification())
             return true;
     return false;
@@ -614,7 +614,7 @@ bool ScDocument::HasAnyCalcNotification() const
 
 sal_Bool ScDocument::HasCalcNotification( SCTAB nTab ) const
 {
-    if (VALIDTAB(nTab) && pTab[nTab])
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetCalcNotification();
     return false;
 }
@@ -622,13 +622,13 @@ sal_Bool ScDocument::HasCalcNotification( SCTAB nTab ) const
 void ScDocument::SetCalcNotification( SCTAB nTab )
 {
     // set only if not set before
-    if (VALIDTAB(nTab) && pTab[nTab] && !pTab[nTab]->GetCalcNotification())
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && !pTab[nTab]->GetCalcNotification())
         pTab[nTab]->SetCalcNotification(sal_True);
 }
 
 void ScDocument::ResetCalcNotifications()
 {
-    for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++)
+    for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++)
         if (pTab[nTab] && pTab[nTab]->GetCalcNotification())
             pTab[nTab]->SetCalcNotification(false);
 }
@@ -637,7 +637,7 @@ ScOutlineTable* ScDocument::GetOutlineTable( SCTAB nTab, sal_Bool bCreate )
 {
     ScOutlineTable* pVal = NULL;
 
-    if (VALIDTAB(nTab))
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
         if (pTab[nTab])
         {
             pVal = pTab[nTab]->GetOutlineTable();
@@ -654,30 +654,30 @@ ScOutlineTable* ScDocument::GetOutlineTable( SCTAB nTab, sal_Bool bCreate )
 
 sal_Bool ScDocument::SetOutlineTable( SCTAB nTab, const ScOutlineTable* pNewOutline )
 {
-    return VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->SetOutlineTable(pNewOutline);
+    return VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->SetOutlineTable(pNewOutline);
 }
 
 void ScDocument::DoAutoOutline( SCCOL nStartCol, SCROW nStartRow,
                                 SCCOL nEndCol, SCROW nEndRow, SCTAB nTab )
 {
-    if (VALIDTAB(nTab) && pTab[nTab])
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->DoAutoOutline( nStartCol, nStartRow, nEndCol, nEndRow );
 }
 
 sal_Bool ScDocument::TestRemoveSubTotals( SCTAB nTab, const ScSubTotalParam& rParam )
 {
-    return VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->TestRemoveSubTotals( rParam );
+    return VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->TestRemoveSubTotals( rParam );
 }
 
 void ScDocument::RemoveSubTotals( SCTAB nTab, ScSubTotalParam& rParam )
 {
-    if ( VALIDTAB(nTab) && pTab[nTab] )
+    if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         pTab[nTab]->RemoveSubTotals( rParam );
 }
 
 sal_Bool ScDocument::DoSubTotals( SCTAB nTab, ScSubTotalParam& rParam )
 {
-    return VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->DoSubTotals( rParam );
+    return VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->DoSubTotals( rParam );
 }
 
 sal_Bool ScDocument::HasSubTotalCells( const ScRange& rRange )
@@ -699,7 +699,7 @@ sal_Bool ScDocument::HasSubTotalCells( const ScRange& rRange )
 
 void ScDocument::CopyUpdated( ScDocument* pPosDoc, ScDocument* pDestDoc )
 {
-    SCTAB nCount = GetTableCount();
+    SCTAB nCount = static_cast<SCTAB>(pTab.size());
     for (SCTAB nTab=0; nTab<nCount; nTab++)
         if (pTab[nTab] && pPosDoc->pTab[nTab] && pDestDoc->pTab[nTab])
             pTab[nTab]->CopyUpdated( pPosDoc->pTab[nTab], pDestDoc->pTab[nTab] );
@@ -707,7 +707,8 @@ void ScDocument::CopyUpdated( ScDocument* pPosDoc, ScDocument* pDestDoc )
 
 void ScDocument::CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, sal_Bool bNewScenario )
 {
-    if (ValidTab(nSrcTab) && ValidTab(nDestTab) && pTab[nSrcTab] && pTab[nDestTab])
+    if (ValidTab(nSrcTab) && ValidTab(nDestTab) && nSrcTab < static_cast<SCTAB>(pTab.size())
+                && nDestTab < static_cast<SCTAB>(pTab.size()) && pTab[nSrcTab] && pTab[nDestTab])
     {
         //	Flags fuer aktive Szenarios richtig setzen
         //	und aktuelle Werte in bisher aktive Szenarios zurueckschreiben
@@ -716,7 +717,7 @@ void ScDocument::CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, sal_Bool bNewScena
 
         //	nDestTab ist die Zieltabelle
         for ( SCTAB nTab = nDestTab+1;
-                nTab<=MAXTAB && pTab[nTab] && pTab[nTab]->IsScenario();
+                nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario();
                 nTab++ )
         {
             if ( pTab[nTab]->IsActiveScenario() )		// auch wenn's dasselbe Szenario ist
@@ -755,7 +756,7 @@ void ScDocument::MarkScenario( SCTAB nSrcTab, SCTAB nDestTab, ScMarkData& rDestM
     if (bResetMark)
         rDestMark.ResetMark();
 
-    if (ValidTab(nSrcTab) && pTab[nSrcTab])
+    if (ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(pTab.size()) && pTab[nSrcTab])
         pTab[nSrcTab]->MarkScenarioIn( rDestMark, nNeededBits );
 
     rDestMark.SetAreaTab( nDestTab );
@@ -763,12 +764,12 @@ void ScDocument::MarkScenario( SCTAB nSrcTab, SCTAB nDestTab, ScMarkData& rDestM
 
 sal_Bool ScDocument::HasScenarioRange( SCTAB nTab, const ScRange& rRange ) const
 {
-    return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->HasScenarioRange( rRange );
+    return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->HasScenarioRange( rRange );
 }
 
 const ScRangeList* ScDocument::GetScenarioRanges( SCTAB nTab ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetScenarioRanges();
 
     return NULL;
@@ -776,18 +777,19 @@ const ScRangeList* ScDocument::GetScenarioRanges( SCTAB nTab ) const
 
 sal_Bool ScDocument::IsActiveScenario( SCTAB nTab ) const
 {
-    return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsActiveScenario(  );
+    return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsActiveScenario(  );
 }
 
 void ScDocument::SetActiveScenario( SCTAB nTab, sal_Bool bActive )
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->SetActiveScenario( bActive );
 }
 
 sal_Bool ScDocument::TestCopyScenario( SCTAB nSrcTab, SCTAB nDestTab ) const
 {
-    if (ValidTab(nSrcTab) && ValidTab(nDestTab))
+    if (ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(pTab.size())
+                && nDestTab < static_cast<SCTAB>(pTab.size())&& ValidTab(nDestTab))
         return pTab[nSrcTab]->TestCopyScenarioTo( pTab[nDestTab] );
 
     OSL_FAIL("falsche Tabelle bei TestCopyScenario");
@@ -954,9 +956,9 @@ void ScDocument::UpdateReference( UpdateRefMode eUpdateRefMode,
                 pUnoBroadcaster->Broadcast( ScUpdateRefHint(
                                     eUpdateRefMode, aRange, nDx, nDy, nDz ) );
             i = 0;
-            iMax = MAXTAB;
+            iMax = static_cast<SCTAB>(pTab.size())-1;
         }
-        for ( ; i<=iMax; i++)
+        for ( ; i<=iMax && i < static_cast<SCTAB>(pTab.size()); i++)
             if (pTab[i])
                 pTab[i]->UpdateReference(
                     eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2,
@@ -1006,7 +1008,7 @@ void ScDocument::UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDo
     ScAddress aDest = rDestPos;
 
     SCTAB nClipTab = 0;
-    for (SCTAB nDestTab=0; nDestTab<=MAXTAB && pTab[nDestTab]; nDestTab++)
+    for (SCTAB nDestTab=0; nDestTab< static_cast<SCTAB>(pTab.size()) && pTab[nDestTab]; nDestTab++)
         if (rMark.GetTableSelect(nDestTab))
         {
             while (!pClipDoc->pTab[nClipTab]) nClipTab = (nClipTab+1) % (MAXTAB+1);
@@ -1017,7 +1019,7 @@ void ScDocument::UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDo
             //	wie UpdateReference
             if (pRangeName)
                 pRangeName->UpdateTranspose( aSource, aDest );		// vor den Zellen!
-            for (SCTAB i=0; i<=MAXTAB; i++)
+            for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
                 if (pTab[i])
                     pTab[i]->UpdateTranspose( aSource, aDest, pUndoDoc );
 
@@ -1034,7 +1036,7 @@ void ScDocument::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY )
     if (pRangeName)
         pRangeName->UpdateGrow( rArea, nGrowX, nGrowY );
 
-    for (SCTAB i=0; i<=MAXTAB && pTab[i]; i++)
+    for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && pTab[i]; i++)
         pTab[i]->UpdateGrow( rArea, nGrowX, nGrowY );
 }
 
@@ -1044,7 +1046,7 @@ void ScDocument::Fill(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const
 {
     PutInOrder( nCol1, nCol2 );
     PutInOrder( nRow1, nRow2 );
-    for (SCTAB i=0; i <= MAXTAB; i++)
+    for (SCTAB i=0; i < static_cast<SCTAB>(pTab.size()); i++)
         if (pTab[i])
             if (rMark.GetTableSelect(i))
                 pTab[i]->Fill(nCol1, nRow1, nCol2, nRow2,
@@ -1055,7 +1057,7 @@ void ScDocument::Fill(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const
 String ScDocument::GetAutoFillPreview( const ScRange& rSource, SCCOL nEndX, SCROW nEndY )
 {
     SCTAB nTab = rSource.aStart.Tab();
-    if (pTab[nTab])
+    if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetAutoFillPreview( rSource, nEndX, nEndY );
 
     return EMPTY_STRING;
@@ -1066,7 +1068,7 @@ void ScDocument::AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SC
 {
     PutInOrder( nStartCol, nEndCol );
     PutInOrder( nStartRow, nEndRow );
-    for (SCTAB i=0; i <= MAXTAB; i++)
+    for (SCTAB i=0; i < static_cast<SCTAB>(pTab.size()); i++)
         if (pTab[i])
             if (rMark.GetTableSelect(i))
                 pTab[i]->AutoFormat( nStartCol, nStartRow, nEndCol, nEndRow, nFormatNo );
@@ -1075,7 +1077,7 @@ void ScDocument::AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SC
 void ScDocument::GetAutoFormatData(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow,
                                     ScAutoFormatData& rData)
 {
-    if (VALIDTAB(nTab))
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
     {
         if (pTab[nTab])
         {
@@ -1182,6 +1184,8 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem,
     rMark.MarkToMulti();
 
     sal_Bool bFound = false;
+    if (rTab >= static_cast<SCTAB>(pTab.size()))
+        OSL_FAIL("table out of range");
     if (VALIDTAB(rTab))
     {
         SCCOL nCol;
@@ -1191,7 +1195,7 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem,
         if ( nCommand == SVX_SEARCHCMD_FIND_ALL ||
              nCommand == SVX_SEARCHCMD_REPLACE_ALL )
         {
-            for (nTab = 0; nTab <= MAXTAB; nTab++)
+            for (nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++)
                 if (pTab[nTab])
                 {
                     if (rMark.GetTableSelect(nTab))
@@ -1232,7 +1236,7 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem,
             }
             else
             {
-                for (nTab = rTab; (nTab <= MAXTAB) && !bFound; nTab++)
+                for (nTab = rTab; (nTab < static_cast<SCTAB>(pTab.size())) && !bFound; nTab++)
                     if (pTab[nTab])
                     {
                         if (rMark.GetTableSelect(nTab))
@@ -1260,7 +1264,7 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem,
 
 sal_Bool ScDocument::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, sal_Bool bShow )
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         return pTab[nTab]->UpdateOutlineCol( nStartCol, nEndCol, bShow );
 
     OSL_FAIL("missing tab");
@@ -1269,7 +1273,7 @@ sal_Bool ScDocument::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTa
 
 sal_Bool ScDocument::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_Bool bShow )
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         return pTab[nTab]->UpdateOutlineRow( nStartRow, nEndRow, bShow );
 
     OSL_FAIL("missing tab");
@@ -1278,7 +1282,7 @@ sal_Bool ScDocument::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTa
 
 void ScDocument::Sort(SCTAB nTab, const ScSortParam& rSortParam, sal_Bool bKeepQuery)
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
     {
         sal_Bool bOldDisableIdle = IsIdleDisabled();
         DisableIdle( sal_True );
@@ -1289,7 +1293,7 @@ void ScDocument::Sort(SCTAB nTab, const ScSortParam& rSortParam, sal_Bool bKeepQ
 
 SCSIZE ScDocument::Query(SCTAB nTab, const ScQueryParam& rQueryParam, sal_Bool bKeepSub)
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         return pTab[nTab]->Query((ScQueryParam&)rQueryParam, bKeepSub);
 
     OSL_FAIL("missing tab");
@@ -1299,7 +1303,7 @@ SCSIZE ScDocument::Query(SCTAB nTab, const ScQueryParam& rQueryParam, sal_Bool b
 
 void ScDocument::GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, String& rStr)
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         pTab[nTab]->GetUpperCellString( nCol, nRow, rStr );
     else
         rStr.Erase();
@@ -1307,7 +1311,7 @@ void ScDocument::GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, String&
 
 sal_Bool ScDocument::CreateQueryParam(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCTAB nTab, ScQueryParam& rQueryParam)
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         return pTab[nTab]->CreateQueryParam(nCol1, nRow1, nCol2, nRow2, rQueryParam);
 
     OSL_FAIL("missing tab");
@@ -1367,7 +1371,7 @@ sal_Bool ScDocument::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndC
 sal_Bool ScDocument::GetFilterEntries(
     SCCOL nCol, SCROW nRow, SCTAB nTab, bool bFilter, TypedScStrCollection& rStrings, bool& rHasDates)
 {
-    if ( ValidTab(nTab) && pTab[nTab] && pDBCollection )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pDBCollection )
     {
         ScDBData* pDBData = pDBCollection->GetDBAtCursor(nCol, nRow, nTab, false);	//!??
         if (pDBData)
@@ -1425,7 +1429,7 @@ sal_Bool ScDocument::GetFilterEntries(
 sal_Bool ScDocument::GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow,
                                         SCTAB nTab, TypedScStrCollection& rStrings, bool& rHasDates )
 {
-    if ( ValidTab(nTab) && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
     {
         pTab[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates );
         return sal_True;
@@ -1455,7 +1459,7 @@ sal_Bool ScDocument::GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
         }
     }
 
-    return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->GetDataEntries( nCol, nRow, rStrings, bLimit );
+    return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->GetDataEntries( nCol, nRow, rStrings, bLimit );
 }
 
 //
@@ -1544,7 +1548,11 @@ void ScDocument::GetEmbedded( ScRange& rRange ) const
 Rectangle ScDocument::GetEmbeddedRect() const						// 1/100 mm
 {
     Rectangle aRect;
-    ScTable* pTable = pTab[aEmbedRange.aStart.Tab()];
+    ScTable* pTable = NULL;
+    if ( aEmbedRange.aStart.Tab() < static_cast<SCTAB>(pTab.size()) )
+        pTable = pTab[aEmbedRange.aStart.Tab()];
+    else
+        OSL_FAIL("table out of range");
     if (!pTable)
     {
         OSL_FAIL("GetEmbeddedRect ohne Tabelle");
@@ -1632,7 +1640,11 @@ bool lcl_AddTwipsWhile( long & rTwips, long nStopTwips, SCROW & rPosY, SCROW nEn
 
 ScRange ScDocument::GetRange( SCTAB nTab, const Rectangle& rMMRect ) const
 {
-    ScTable* pTable = pTab[nTab];
+    ScTable* pTable = NULL;
+    if (nTab < static_cast<SCTAB>(pTab.size()))
+        pTable = pTab[nTab];
+    else
+        OSL_FAIL("table out of range");
     if (!pTable)
     {
         OSL_FAIL("GetRange ohne Tabelle");
@@ -1766,7 +1778,11 @@ void lcl_SnapVer( ScTable* pTable, long& rVal, SCROW& rStartRow )
 
 void ScDocument::SnapVisArea( Rectangle& rRect ) const
 {
-    ScTable* pTable = pTab[nVisibleTab];
+    ScTable* pTable = NULL;
+    if (nVisibleTab < static_cast<SCTAB>(pTab.size()))
+        pTable = pTab[nVisibleTab];
+    else
+        OSL_FAIL("table out of range");
     if (!pTable)
     {
         OSL_FAIL("SetEmbedded ohne Tabelle");
@@ -1817,7 +1833,7 @@ sal_Bool ScDocument::IsDocEditable() const
 
 sal_Bool ScDocument::IsTabProtected( SCTAB nTab ) const
 {
-    if (VALIDTAB(nTab) && pTab[nTab])
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->IsProtected();
 
     OSL_FAIL("Falsche Tabellennummer");
@@ -1826,7 +1842,7 @@ sal_Bool ScDocument::IsTabProtected( SCTAB nTab ) const
 
 ScTableProtection* ScDocument::GetTabProtection( SCTAB nTab ) const
 {
-    if (VALIDTAB(nTab) && pTab[nTab])
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetProtection();
 
     return NULL;
@@ -1834,7 +1850,7 @@ ScTableProtection* ScDocument::GetTabProtection( SCTAB nTab ) const
 
 void ScDocument::SetTabProtection(SCTAB nTab, const ScTableProtection* pProtect)
 {
-    if (!ValidTab(nTab))
+    if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()))
         return;
 
     pTab[nTab]->SetProtection(pProtect);
@@ -1842,7 +1858,7 @@ void ScDocument::SetTabProtection(SCTAB nTab, const ScTableProtection* pProtect)
 
 void ScDocument::CopyTabProtection(SCTAB nTabSrc, SCTAB nTabDest)
 {
-    if (!ValidTab(nTabSrc) || !ValidTab(nTabDest))
+    if (!ValidTab(nTabSrc) || nTabSrc >= static_cast<SCTAB>(pTab.size()) || nTabDest >= static_cast<SCTAB>(pTab.size()) || !ValidTab(nTabDest))
         return;
 
     pTab[nTabDest]->SetProtection( pTab[nTabSrc]->GetProtection() );
@@ -1932,7 +1948,7 @@ void ScDocument::SetDrawDefaults()
 
 Rectangle ScDocument::GetMMRect( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) const
 {
-    if (!ValidTab(nTab) || !pTab[nTab])
+    if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
     {
         OSL_FAIL("GetMMRect: falsche Tabelle");
         return Rectangle(0,0,0,0);
@@ -2036,19 +2052,19 @@ void ScDocument::RemoveMerge( SCCOL nCol, SCROW nRow, SCTAB nTab )
 void ScDocument::ExtendPrintArea( OutputDevice* pDev, SCTAB nTab,
                     SCCOL nStartCol, SCROW nStartRow, SCCOL& rEndCol, SCROW nEndRow )
 {
-    if ( ValidTab(nTab)  && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         pTab[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow );
 }
 
 void ScDocument::IncSizeRecalcLevel( SCTAB nTab )
 {
-    if ( ValidTab(nTab)  && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         pTab[nTab]->IncRecalcLevel();
 }
 
 void ScDocument::DecSizeRecalcLevel( SCTAB nTab, bool bUpdateNoteCaptionPos )
 {
-    if ( ValidTab(nTab)  && pTab[nTab] )
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
         pTab[nTab]->DecRecalcLevel( bUpdateNoteCaptionPos );
 }
 
diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx
index 85dc636..42ceef9 100644
--- a/sc/source/core/data/documen4.cxx
+++ b/sc/source/core/data/documen4.cxx
@@ -62,7 +62,7 @@ using namespace formula;
 // -----------------------------------------------------------------------
 
 // Nach der Regula Falsi Methode
-sal_Bool ScDocument::Solver(SCCOL nFCol, SCROW nFRow, SCTAB nFTab,
+sal_Bool ScDocument::Solver(SCCOL nFCol, SCROW nFRow, SCTAB nFTab,//TODO:REWORK
                         SCCOL nVCol, SCROW nVRow, SCTAB nVTab,
                         const String& sValStr, double& nX)
 {
@@ -135,16 +135,17 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1,
     SCCOL j;
     SCROW k;
     i = 0;
-    sal_Bool bStop = false;
-    while (i <= MAXTAB && !bStop)				// erste markierte Tabelle finden
+    bool bStop = false;
+    for (;i < static_cast<SCTAB>(pTab.size()); ++i)
     {
         if (pTab[i] && rMark.GetTableSelect(i))
-            bStop = sal_True;
-        else
-            i++;
+        {
+            bStop = true;
+            break;
+        }
     }
     nTab1 = i;
-    if (i == MAXTAB + 1)
+    if (!bStop)
     {
         Sound::Beep();
         OSL_FAIL("ScDocument::InsertMatrixFormula Keine Tabelle markiert");
@@ -158,7 +159,7 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1,
     else
         pCell = new ScFormulaCell( this, aPos, rFormula, eGram, MM_FORMULA );
     pCell->SetMatColsRows( nCol2 - nCol1 + 1, nRow2 - nRow1 + 1 );
-    for (i = 0; i <= MAXTAB; i++)
+    for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
     {
         if (pTab[i] && rMark.GetTableSelect(i))
         {
@@ -182,7 +183,7 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1,
     ScTokenArray aArr;
     ScToken* t = static_cast<ScToken*>(aArr.AddMatrixSingleReference( aRefData));
 
-    for (i = 0; i <= MAXTAB; i++)
+    for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
     {
         if (pTab[i] && rMark.GetTableSelect(i))
         {
@@ -222,16 +223,17 @@ void ScDocument::InsertTableOp(const ScTabOpParam& rParam,      // Mehrfachopera
     SCCOL j;
     SCROW k;
     i = 0;
-    sal_Bool bStop = false;
-    while (i <= MAXTAB && !bStop)				// erste markierte Tabelle finden
+    bool bStop = false;
+    for (;i < static_cast<SCTAB>(pTab.size()); ++i)
     {
         if (pTab[i] && rMark.GetTableSelect(i))
-            bStop = sal_True;
-        else
-            i++;
+        {
+            bStop = true;
+            break;
+        }
     }
     nTab1 = i;
-    if (i == MAXTAB + 1)
+    if (!bStop)
     {
         Sound::Beep();
         OSL_FAIL("ScDocument::InsertTableOp: Keine Tabelle markiert");
@@ -291,7 +293,7 @@ void ScDocument::InsertTableOp(const ScTabOpParam& rParam,      // Mehrfachopera
            formula::FormulaGrammar::GRAM_NATIVE, MM_NONE );
     for( j = nCol1; j <= nCol2; j++ )
         for( k = nRow1; k <= nRow2; k++ )
-            for (i = 0; i <= MAXTAB; i++)
+            for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
                 if( pTab[i] && rMark.GetTableSelect(i) )
                     pTab[i]->PutCell( j, k, aRefCell.CloneWithoutNote( *this, ScAddress( j, k, i ), SC_CLONECELL_STARTLISTENING ) );
 }
@@ -370,7 +372,7 @@ bool ScDocument::MarkUsedExternalReferences( ScTokenArray & rArr )
 sal_Bool ScDocument::GetNextSpellingCell(SCCOL& nCol, SCROW& nRow, SCTAB nTab,
                         sal_Bool bInSel, const ScMarkData& rMark) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetNextSpellingCell( nCol, nRow, bInSel, rMark );
     else
         return false;
@@ -379,7 +381,7 @@ sal_Bool ScDocument::GetNextSpellingCell(SCCOL& nCol, SCROW& nRow, SCTAB nTab,
 sal_Bool ScDocument::GetNextMarkedCell( SCCOL& rCol, SCROW& rRow, SCTAB nTab,
                                         const ScMarkData& rMark )
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetNextMarkedCell( rCol, rRow, rMark );
     else
         return false;
@@ -390,7 +392,7 @@ sal_Bool ScDocument::ReplaceStyle(const SvxSearchItem& rSearchItem,
                               ScMarkData& rMark,
                               sal_Bool bIsUndoP)
 {
-    if (pTab[nTab])
+    if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->ReplaceStyle(rSearchItem, nCol, nRow, rMark, bIsUndoP);
     else
         return false;
@@ -398,7 +400,7 @@ sal_Bool ScDocument::ReplaceStyle(const SvxSearchItem& rSearchItem,
 
 void ScDocument::CompileDBFormula()
 {
-    for (SCTAB i=0; i<=MAXTAB; i++)
+    for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
     {
         if (pTab[i]) pTab[i]->CompileDBFormula();
     }
@@ -406,7 +408,7 @@ void ScDocument::CompileDBFormula()
 
 void ScDocument::CompileDBFormula( sal_Bool bCreateFormulaString )
 {
-    for (SCTAB i=0; i<=MAXTAB; i++)
+    for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
     {
         if (pTab[i]) pTab[i]->CompileDBFormula( bCreateFormulaString );
     }
@@ -417,7 +419,7 @@ void ScDocument::CompileNameFormula( sal_Bool bCreateFormulaString )
     if ( pCondFormList )
         pCondFormList->CompileAll();	// nach ScNameDlg noetig
 
-    for (SCTAB i=0; i<=MAXTAB; i++)
+    for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
     {
         if (pTab[i]) pTab[i]->CompileNameFormula( bCreateFormulaString );
     }
@@ -425,7 +427,7 @@ void ScDocument::CompileNameFormula( sal_Bool bCreateFormulaString )
 
 void ScDocument::CompileColRowNameFormula()
 {
-    for (SCTAB i=0; i<=MAXTAB; i++)
+    for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
     {
         if (pTab[i]) pTab[i]->CompileColRowNameFormula();
     }
@@ -433,7 +435,7 @@ void ScDocument::CompileColRowNameFormula()
 
 void ScDocument::DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd )
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->DoColResize( nCol1, nCol2, nAdd );
     else
     {
@@ -443,7 +445,7 @@ void ScDocument::DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd
 
 void ScDocument::InvalidateTableArea()
 {
-    for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++)
+    for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++)
     {
         pTab[nTab]->InvalidateTableArea();
         if ( pTab[nTab]->IsScenario() )
@@ -454,7 +456,7 @@ void ScDocument::InvalidateTableArea()
 sal_Int32 ScDocument::GetMaxStringLen( SCTAB nTab, SCCOL nCol,
         SCROW nRowStart, SCROW nRowEnd, CharSet eCharSet ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetMaxStringLen( nCol, nRowStart, nRowEnd, eCharSet );
     else
         return 0;
@@ -464,7 +466,7 @@ xub_StrLen ScDocument::GetMaxNumberStringLen( sal_uInt16& nPrecision, SCTAB nTab
                                     SCCOL nCol,
                                     SCROW nRowStart, SCROW nRowEnd ) const
 {
-    if (ValidTab(nTab) && pTab[nTab])
+    if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetMaxNumberStringLen( nPrecision, nCol,
             nRowStart, nRowEnd );
     else
@@ -486,7 +488,7 @@ sal_Bool ScDocument::GetSelectionFunction( ScSubTotalFunc eFunc,
     SCCOL nEndCol = aSingle.aEnd.Col();
     SCROW nEndRow = aSingle.aEnd.Row();
 
-    for (SCTAB nTab=0; nTab<=MAXTAB && !aData.bError; nTab++)
+    for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && !aData.bError; nTab++)
         if (pTab[nTab] && rMark.GetTableSelect(nTab))
             pTab[nTab]->UpdateSelectionFunction( aData,
                             nStartCol, nStartRow, nEndCol, nEndRow, rMark );
@@ -712,13 +714,13 @@ const ScValidationData*	ScDocument::GetValidationEntry( sal_uLong nIndex ) const
 
 void ScDocument::FindConditionalFormat( sal_uLong nKey, ScRangeList& rRanges )
 {
-    for (SCTAB i=0; i<=MAXTAB && pTab[i]; i++)
+    for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && pTab[i]; i++)
         pTab[i]->FindConditionalFormat( nKey, rRanges );
 }
 
 void ScDocument::FindConditionalFormat( sal_uLong nKey, ScRangeList& rRanges, SCTAB nTab )
 {
-    if(VALIDTAB(nTab) && pTab[nTab])
+    if(VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->FindConditionalFormat( nKey, rRanges );
 }
 
@@ -960,7 +962,7 @@ void ScDocument::FindOrder( SCCOLROW* pOtherRows, SCCOLROW nThisEndRow, SCCOLROW
     }
 }
 
-void ScDocument::CompareDocument( ScDocument& rOtherDoc )
+void ScDocument::CompareDocument( ScDocument& rOtherDoc )//TODO:REWORK
 {
     if (!pChangeTrack)
         return;
diff --git a/sc/source/core/data/documen5.cxx b/sc/source/core/data/documen5.cxx
index 59b84eb..f07fdd3 100644
--- a/sc/source/core/data/documen5.cxx
+++ b/sc/source/core/data/documen5.cxx
@@ -136,7 +136,7 @@ void ScDocument::UpdateAllCharts()
 
     sal_uInt16 nPos;
 
-    for (SCTAB nTab=0; nTab<=MAXTAB; nTab++)
+    for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++)
     {
         if (pTab[nTab])
         {
@@ -206,9 +206,9 @@ void ScDocument::UpdateAllCharts()
 
 sal_Bool ScDocument::HasChartAtPoint( SCTAB nTab, const Point& rPos, String* pName )
 {
-    if (pDrawLayer && pTab[nTab])
+    if (pDrawLayer && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
     {
-        SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
+        SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));//TODO:REWORK
         DBG_ASSERT(pPage,"Page ?");
 
         SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
@@ -252,7 +252,7 @@ uno::Reference< chart2::XChartDocument > ScDocument::GetChartByName( const Strin
     if (pDrawLayer)
     {
         sal_uInt16 nCount = pDrawLayer->GetPageCount();
-        for (sal_uInt16 nTab=0; nTab<nCount; nTab++)
+        for (sal_uInt16 nTab=0; nTab<nCount&& nTab < static_cast<SCTAB>(pTab.size()); nTab++)
         {
             SdrPage* pPage = pDrawLayer->GetPage(nTab);
             DBG_ASSERT(pPage,"Page ?");
@@ -317,7 +317,7 @@ void ScDocument::GetOldChartParameters( const String& rName,
         return;
 
     sal_uInt16 nCount = pDrawLayer->GetPageCount();
-    for (sal_uInt16 nTab=0; nTab<nCount; nTab++)
+    for (sal_uInt16 nTab=0; nTab<nCount && nTab < static_cast<SCTAB>(pTab.size()); nTab++)
     {
         SdrPage* pPage = pDrawLayer->GetPage(nTab);
         DBG_ASSERT(pPage,"Page ?");
@@ -364,7 +364,7 @@ void ScDocument::UpdateChartArea( const String& rChartName,
     if (!pDrawLayer)
         return;
 
-    for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++)
+    for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++)
     {
         SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
         DBG_ASSERT(pPage,"Page ?");
@@ -599,7 +599,7 @@ void ScDocument::SetChartRangeList( const String& rChartName,
     if (!pDrawLayer)
         return;
 
-    for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++)
+    for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++)
     {
         SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
         DBG_ASSERT(pPage,"Page ?");
@@ -639,7 +639,7 @@ void ScDocument::SetChartRangeList( const String& rChartName,
 
 sal_Bool ScDocument::HasData( SCCOL nCol, SCROW nRow, SCTAB nTab )
 {
-    if (pTab[nTab])
+    if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->HasData( nCol, nRow );
     else
         return false;
@@ -701,7 +701,7 @@ void ScDocument::UpdateChartListenerCollection()
         ScRange aRange;
         // Range for searching is not important
         ScChartListener aCLSearcher( EMPTY_STRING, this, aRange );
-        for (SCTAB nTab=0; nTab<=MAXTAB; nTab++)
+        for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++)
         {
             if (pTab[nTab])
             {
diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx
index 89be732..88955a4 100644
--- a/sc/source/core/data/documen7.cxx
+++ b/sc/source/core/data/documen7.cxx
@@ -116,7 +116,7 @@ void ScDocument::Broadcast( const ScHint& rHint )
     if ( rHint.GetAddress() != BCA_BRDCST_ALWAYS )
     {
         SCTAB nTab = rHint.GetAddress().Tab();
-        if (pTab[nTab] && pTab[nTab]->IsStreamValid())
+        if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsStreamValid())
             pTab[nTab]->SetStreamValid(false);
     }
 }
@@ -193,7 +193,7 @@ void ScDocument::StartListeningCell( const ScAddress& rAddress,
 {
     DBG_ASSERT(pListener, "StartListeningCell: pListener Null");
     SCTAB nTab = rAddress.Tab();
-    if (pTab[nTab])
+    if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->StartListening( rAddress, pListener );
 }
 
@@ -202,7 +202,7 @@ void ScDocument::EndListeningCell( const ScAddress& rAddress,
 {
     DBG_ASSERT(pListener, "EndListeningCell: pListener Null");
     SCTAB nTab = rAddress.Tab();
-    if (pTab[nTab])
+    if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->EndListening( rAddress, pListener );
 }
 
@@ -488,7 +488,7 @@ void ScDocument::TrackFormulas( sal_uLong nHintId )
 
 void ScDocument::StartAllListeners()
 {
-    for ( SCTAB i = 0; i <= MAXTAB; ++i )
+    for ( SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i )
         if ( pTab[i] )
             pTab[i]->StartAllListeners();
 }
diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx
index 7820315..ac4c482 100644
--- a/sc/source/core/data/documen8.cxx
+++ b/sc/source/core/data/documen8.cxx
@@ -429,7 +429,7 @@ void ScDocument::InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress
     {
         const SCTAB nTab = pAdrFrom->Tab();
 
-        if ( pTab[nTab] )
+        if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
             pTab[nTab]->InvalidateTextWidth( pAdrFrom, NULL, bNumFormatChanged, bBroadcast );
     }
     else
@@ -437,7 +437,7 @@ void ScDocument::InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress
         const SCTAB nTabStart = pAdrFrom ? pAdrFrom->Tab() : 0;
         const SCTAB nTabEnd   = pAdrTo   ? pAdrTo->Tab()   : MAXTAB;
 
-        for ( SCTAB nTab=nTabStart; nTab<=nTabEnd; nTab++ )
+        for ( SCTAB nTab=nTabStart; nTab<=nTabEnd && nTab < static_cast<SCTAB>(pTab.size()); nTab++ )
             if ( pTab[nTab] )
                 pTab[nTab]->InvalidateTextWidth( pAdrFrom, pAdrTo, bNumFormatChanged, bBroadcast );
     }
@@ -472,7 +472,7 @@ sal_Bool ScDocument::IdleCalcTextWidth()			// sal_True = demnaechst wieder versu
         nRow = 0, nCol--;
     if ( nCol < 0 )
         nCol = MAXCOL, nTab++;
-    if ( !ValidTab(nTab) || !pTab[nTab] )
+    if ( !ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] )
         nTab = 0;
 
     //	SearchMask/Family muss gemerkt werden,
@@ -551,7 +551,7 @@ sal_Bool ScDocument::IdleCalcTextWidth()			// sal_True = demnaechst wieder versu
                     bNewTab = sal_True;
                 }
 
-                if ( !ValidTab(nTab) || !pTab[nTab] )
+                if ( !ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] )
                 {
                     nTab = 0;
                     nRestart++;
@@ -671,11 +671,11 @@ sal_Bool ScDocument::OnlineSpellInRange( const ScRange& rSpellRange, ScAddress&
     SCCOL nCol = rSpellRange.aStart.Col();		// iterator always starts on the left edge
     SCROW nRow = rSpellPos.Row();
     SCTAB nTab = rSpellPos.Tab();
-    if ( !pTab[nTab] )							// sheet deleted?
+    if ( nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] )							// sheet deleted?
     {
         nTab = rSpellRange.aStart.Tab();
         nRow = rSpellRange.aStart.Row();
-        if ( !pTab[nTab] )
+        if ( nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] )
         {
             //	may happen for visible range
             return false;
@@ -796,7 +796,7 @@ sal_Bool ScDocument::OnlineSpellInRange( const ScRange& rSpellRange, ScAddress&
     if (!pCell)			// end of range reached -> next sheet
     {
         ++nTab;
-        if ( nTab > rSpellRange.aEnd.Tab() || !pTab[nTab] )
+        if ( nTab > rSpellRange.aEnd.Tab() || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] )
             nTab = rSpellRange.aStart.Tab();
         nCol = rSpellRange.aStart.Col();
         nRow = rSpellRange.aStart.Row();
@@ -888,7 +888,7 @@ void ScDocument::RemoveAutoSpellObj()
 {
     //	alle Spelling-Informationen entfernen
 
-    for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++)
+    for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++)
         pTab[nTab]->RemoveAutoSpellObj();
 }
 
diff --git a/sc/source/core/data/documen9.cxx b/sc/source/core/data/documen9.cxx
index 3d58b87..a5a853d 100644
--- a/sc/source/core/data/documen9.cxx
+++ b/sc/source/core/data/documen9.cxx
@@ -154,14 +154,14 @@ void ScDocument::InitDrawLayer( SfxObjectShell* pDocShell )
 
         SCTAB nDrawPages = 0;
         SCTAB nTab;
-        for (nTab=0; nTab<=MAXTAB; nTab++)
+        for (nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++)
             if (pTab[nTab])
                 nDrawPages = nTab + 1;			// needed number of pages
 
         for (nTab=0; nTab<nDrawPages; nTab++)
         {
             pDrawLayer->ScAddPage( nTab );		// always add page, with or without the table
-            if (pTab[nTab])
+            if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
             {
                 String aTabName;
                 pTab[nTab]->GetName(aTabName);
@@ -219,7 +219,7 @@ void ScDocument::UpdateDrawPrinter()
 
 void ScDocument::SetDrawPageSize(SCTAB nTab)
 {
-    if (!ValidTab(nTab) || !pTab[nTab])
+    if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
         return;
 
     pTab[nTab]->SetDrawPageSize();
@@ -276,7 +276,7 @@ void ScDocument::DeleteObjectsInArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCR
         return;
 
     SCTAB nTabCount = GetTableCount();
-    for (SCTAB nTab=0; nTab<=nTabCount; nTab++)
+    for (SCTAB nTab=0; nTab<nTabCount; nTab++)
         if (pTab[nTab] && rMark.GetTableSelect(nTab))
             pDrawLayer->DeleteObjectsInArea( nTab, nCol1, nRow1, nCol2, nRow2 );
 }
@@ -297,7 +297,7 @@ sal_Bool ScDocument::HasOLEObjectsInArea( const ScRange& rRange, const ScMarkDat
         return false;
 
     SCTAB nStartTab = 0;
-    SCTAB nEndTab = MAXTAB;
+    SCTAB nEndTab = static_cast<SCTAB>(pTab.size());
     if ( !pTabMark )
     {
         nStartTab = rRange.aStart.Tab();
@@ -426,7 +426,7 @@ SdrObject* ScDocument::GetObjectAtPoint( SCTAB nTab, const Point& rPos )
     //	fuer Drag&Drop auf Zeichenobjekt
 
     SdrObject* pFound = NULL;
-    if (pDrawLayer && pTab[nTab])
+    if (pDrawLayer && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
     {
         SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
         DBG_ASSERT(pPage,"Page ?");
@@ -526,12 +526,7 @@ sal_Bool ScDocument::IsPrintEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
 
 void ScDocument::Clear( sal_Bool bFromDestructor )
 {
-    for (SCTAB i=0; i<=MAXTAB; i++)
-        if (pTab[i])
-        {
-            delete pTab[i];
-            pTab[i]=NULL;
-        }
+    pTab.clear();
     delete pSelectionAttr;
     pSelectionAttr = NULL;
 
@@ -679,7 +674,7 @@ bool ScDocument::IsLoadingMedium() const
 void ScDocument::SetLoadingMedium( bool bVal )
 {
     bLoadingMedium = bVal;
-    for (SCTAB nTab = 0; nTab <= MAXTAB; ++nTab)
+    for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); ++nTab)
     {
         if (!pTab[nTab])
             return;
@@ -698,7 +693,7 @@ void ScDocument::SetImportingXML( bool bVal )
     {
         // #i57869# after loading, do the real RTL mirroring for the sheets that have the LoadingRTL flag set
 
-        for ( SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++ )
+        for ( SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++ )
             if ( pTab[nTab]->IsLoadingRTL() )
             {
                 pTab[nTab]->SetLoadingRTL( false );
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 50e6ab4..9f28517 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -138,7 +138,7 @@ typedef std::set<ScDefaultAttr, ScLessDefaultAttr>	ScDefaultAttrSet;
 
 void ScDocument::MakeTable( SCTAB nTab,bool _bNeedsNameCheck )
 {
-    if ( ValidTab(nTab) && ( nTab < static_cast<SCTAB>(pTab.size()) ||!pTab[nTab]) )
+    if ( ValidTab(nTab) && ( nTab >= static_cast<SCTAB>(pTab.size()) ||!pTab[nTab]) )
     {
         String aString = ScGlobal::GetRscString(STR_TABLE_DEF); //"Table"
         aString += String::CreateFromInt32(nTab+1);
@@ -227,14 +227,14 @@ sal_Bool ScDocument::GetTable( const String& rName, SCTAB& rTab ) const
 
 ScDBData* ScDocument::GetAnonymousDBData(SCTAB nTab)
 {
-    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         return pTab[nTab]->GetAnonymousDBData();
     return NULL;
 }
 
 void ScDocument::SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData)
 {
-    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
+    if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
         pTab[nTab]->SetAnonymousDBData(pDBData);
 }
 
commit 114b965d38e3a676738ee20014861b16b2c6028f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon May 16 23:21:30 2011 +0200

    use typedef not at iterator but at container type

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 1b0e303..5b1ebcd 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -186,7 +186,7 @@ namespace com { namespace sun { namespace star {
 #define SC_ASIANCOMPRESSION_INVALID		0xff
 #define SC_ASIANKERNING_INVALID			0xff
 
-typedef ::std::vector<ScTable*>::iterator ScTableIterator;
+typedef ::std::vector<ScTable*> TableContainer;
 
 enum ScDocumentMode
     {
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index db7a76d..4c2ee34 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -846,7 +846,7 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
     SetAutoCalc( false );	// Mehrfachberechnungen vermeiden
     if (bValid)
     {
-        if (nNewPos == pTab.size())
+        if (nNewPos >= pTab.size())
         {
             pTab.push_back( new ScTable(this, nMaxTableNumber, aName) );
         }
@@ -873,7 +873,7 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
                     pUnoBroadcaster->Broadcast( ScUpdateRefHint( URM_INSDEL, aRange, 0,0,1 ) );
 
                 SCTAB i;
-                for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+                for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it)
                     if (*it && it != (pTab.begin() + nOldPos))
                         (*it)->UpdateInsertTab(nNewPos);
                 for (i = pTab.size(); i > nNewPos; i--)
@@ -882,11 +882,11 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
                     nOldPos++;
                 pTab[nNewPos] = new ScTable(this, nNewPos, aName);
                 bValid = sal_True;
-                for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+                for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it)
                     if (*it && it != pTab.begin()+nOldPos && it != pTab.begin() + nNewPos)
                         (*it)->UpdateCompile();
                 SetNoListening( false );
-                for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+                for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it)
                     if (*it && it != pTab.begin()+nOldPos && it != pTab.begin()+nNewPos)
                         (*it)->StartAllListeners();
 


More information about the Libreoffice-commits mailing list