diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index 6864e14..da1581d 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -221,8 +221,6 @@ public: // results for a hierarchy dimension // -#define SC_DP_RES_GROW 16 - class ScDPResultDimension; class ScDPDataDimension; class ScDPDataMember; @@ -494,10 +492,7 @@ public: ScDPDataDimension* GetChildDimension() { return pChildDimension; } }; -//! replace PtrArr with 32-bit array ???? - -typedef ScDPDataMember* ScDPDataMemberPtr; -SV_DECL_PTRARR_DEL(ScDPDataMembers, ScDPDataMemberPtr, SC_DP_RES_GROW) +typedef std::vector ScDPDataMembers; // result dimension contains only members @@ -646,7 +641,8 @@ public: void DumpState( const ScDPResultDimension* pRefDim, ScDocument* pDoc, ScAddress& rPos ) const; long GetMemberCount() const; - ScDPDataMember* GetMember(long n) const; + const ScDPDataMember* GetMember(long n) const; + ScDPDataMember* GetMember(long n); }; // ---------------------------------------------------------------------------- diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index 15fd87b..c892cea 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -67,10 +67,6 @@ using ::rtl::OUString; // ----------------------------------------------------------------------- -SV_IMPL_PTRARR( ScDPDataMembers, ScDPDataMemberPtr ); - -// ----------------------------------------------------------------------- - static sal_uInt16 nFuncStrIds[12] = // passend zum enum ScSubTotalFunc { 0, // SUBTOTAL_FUNC_NONE @@ -243,8 +239,8 @@ sal_Bool ScDPRowMembersOrder::operator()( sal_Int32 nIndex1, sal_Int32 nIndex2 ) sal_Bool ScDPColMembersOrder::operator()( sal_Int32 nIndex1, sal_Int32 nIndex2 ) const { - ScDPDataMember* pDataMember1 = rDimension.GetMember(nIndex1); - ScDPDataMember* pDataMember2 = rDimension.GetMember(nIndex2); + const ScDPDataMember* pDataMember1 = rDimension.GetMember(nIndex1); + const ScDPDataMember* pDataMember2 = rDimension.GetMember(nIndex2); sal_Bool bHide1 = pDataMember1 && !pDataMember1->IsVisible(); sal_Bool bHide2 = pDataMember2 && !pDataMember2->IsVisible(); if ( bHide1 || bHide2 ) @@ -2314,7 +2310,7 @@ void ScDPDataMember::UpdateRunningTotals( const ScDPResultMember* pRefMember, sal_Bool bRefDimInCol = ( nRefOrient == sheet::DataPilotFieldOrientation_COLUMN ); sal_Bool bRefDimInRow = ( nRefOrient == sheet::DataPilotFieldOrientation_ROW ); - const ScDPResultDimension* pSelectDim = NULL; + ScDPResultDimension* pSelectDim = NULL; long nRowPos = 0; long nColPos = 0; @@ -3297,7 +3293,7 @@ ScDPDataMember* ScDPResultDimension::GetRowReferenceMember( const ScDPRelativePo const long* pNextColIndex = pColIndexes; while ( *pNextColIndex >= 0 && pColMember ) { - const ScDPDataDimension* pColChild = pColMember->GetChildDimension(); + ScDPDataDimension* pColChild = pColMember->GetChildDimension(); if ( pColChild && *pNextColIndex < pColChild->GetMemberCount() ) pColMember = pColChild->GetMember( *pNextColIndex ); else @@ -3349,7 +3345,7 @@ ScDPDataMember* ScDPResultDimension::GetColReferenceMember( const ScDPRelativePo long nColSkipped = 0; while ( *pNextColIndex >= 0 && pColMember && nColSkipped < nRefDimPos ) { - const ScDPDataDimension* pColChild = pColMember->GetChildDimension(); + ScDPDataDimension* pColChild = pColMember->GetChildDimension(); if ( pColChild && *pNextColIndex < pColChild->GetMemberCount() ) pColMember = pColChild->GetMember( *pNextColIndex ); else @@ -3363,7 +3359,7 @@ ScDPDataMember* ScDPResultDimension::GetColReferenceMember( const ScDPRelativePo if ( pColMember ) { - const ScDPDataDimension* pReferenceDim = pColMember->GetChildDimension(); + ScDPDataDimension* pReferenceDim = pColMember->GetChildDimension(); if ( pReferenceDim ) { long nReferenceCount = pReferenceDim->GetMemberCount(); @@ -3404,7 +3400,7 @@ ScDPDataMember* ScDPResultDimension::GetColReferenceMember( const ScDPRelativePo const long* pNextColIndex = pColIndexes + nRefDimPos + 1; while ( *pNextColIndex >= 0 && pColMember ) { - const ScDPDataDimension* pColChild = pColMember->GetChildDimension(); + ScDPDataDimension* pColChild = pColMember->GetChildDimension(); if ( pColChild && *pNextColIndex < pColChild->GetMemberCount() ) pColMember = pColChild->GetMember( *pNextColIndex ); else @@ -3504,6 +3500,8 @@ ScDPDataDimension::ScDPDataDimension( const ScDPResultData* pData ) : ScDPDataDimension::~ScDPDataDimension() { + for (ScDPDataMembers::iterator it = aMembers.begin(); it != aMembers.end(); ++it) + delete *it; } void ScDPDataDimension::InitFrom( const ScDPResultDimension* pDim ) @@ -3522,7 +3520,7 @@ void ScDPDataDimension::InitFrom( const ScDPResultDimension* pDim ) const ScDPResultMember* pResMem = pDim->GetMember(i); ScDPDataMember* pNew = new ScDPDataMember( pResultData, pResMem ); - aMembers.Insert( pNew, aMembers.Count() ); + aMembers.push_back( pNew); if ( !pResultData->IsLateInit() ) { @@ -3541,7 +3539,7 @@ void ScDPDataDimension::ProcessData( const vector< SCROW >& aDataMembers, const { // the ScDPItemData array must contain enough entries for all dimensions - this isn't checked - long nCount = aMembers.Count(); + long nCount = aMembers.size(); for (long i=0; iIsSortByData() ) { @@ -3664,7 +3662,7 @@ void ScDPDataDimension::SortMembers( ScDPResultDimension* pRefDim ) void ScDPDataDimension::DoAutoShow( ScDPResultDimension* pRefDim ) { - long nCount = aMembers.Count(); + long nCount = aMembers.size(); // handle children first, before changing the visible state @@ -3678,7 +3676,7 @@ void ScDPDataDimension::DoAutoShow( ScDPResultDimension* pRefDim ) ScDPResultMember* pRefMember = pRefDim->GetMember(i); if ( pRefMember->IsVisible() ) //! here or in ScDPDataMember ??? { - ScDPDataMember* pDataMember = aMembers[(sal_uInt16)i]; + ScDPDataMember* pDataMember = aMembers[i]; pDataMember->DoAutoShow( pRefMember ); } } @@ -3699,7 +3697,7 @@ void ScDPDataDimension::DoAutoShow( ScDPResultDimension* pRefDim ) // look for equal values to the last included one long nIncluded = pRefDim->GetAutoCount(); - ScDPDataMember* pDataMember1 = aMembers[(sal_uInt16)aAutoOrder[nIncluded - 1]]; + ScDPDataMember* pDataMember1 = aMembers[aAutoOrder[nIncluded - 1]]; if ( !pDataMember1->IsVisible() ) pDataMember1 = NULL; sal_Bool bContinue = sal_True; @@ -3708,7 +3706,7 @@ void ScDPDataDimension::DoAutoShow( ScDPResultDimension* pRefDim ) bContinue = false; if ( nIncluded < nCount ) { - ScDPDataMember* pDataMember2 = aMembers[(sal_uInt16)aAutoOrder[nIncluded]]; + ScDPDataMember* pDataMember2 = aMembers[aAutoOrder[nIncluded]]; if ( !pDataMember2->IsVisible() ) pDataMember2 = NULL; @@ -3732,13 +3730,13 @@ void ScDPDataDimension::DoAutoShow( ScDPResultDimension* pRefDim ) void ScDPDataDimension::ResetResults() { - long nCount = aMembers.Count(); + long nCount = aMembers.size(); for (long i=0; iResetResults(); } } @@ -3761,7 +3759,7 @@ void ScDPDataDimension::UpdateRunningTotals( const ScDPResultDimension* pRefDim, OSL_ENSURE( pRefDim == pResultDimension, "wrong dim" ); long nMemberMeasure = nMeasure; - long nCount = aMembers.Count(); + long nCount = aMembers.size(); for (long i=0; iGetMemberOrder(); @@ -3784,7 +3782,7 @@ void ScDPDataDimension::UpdateRunningTotals( const ScDPResultDimension* pRefDim, else rRunning.AddColIndex( i, nSorted ); - ScDPDataMember* pDataMember = aMembers[(sal_uInt16)nMemberPos]; + ScDPDataMember* pDataMember = aMembers[nMemberPos]; pDataMember->UpdateRunningTotals( pRefMember, nMemberMeasure, bIsSubTotalRow, rSubState, rRunning, rTotals, rRowParent ); @@ -3800,11 +3798,11 @@ void ScDPDataDimension::DumpState( const ScDPResultDimension* pRefDim, ScDocumen SCROW nStartRow = rPos.Row(); - long nCount = bIsDataLayout ? 1 : aMembers.Count(); + long nCount = bIsDataLayout ? 1 : aMembers.size(); for (long i=0; iGetMember(i); - const ScDPDataMember* pDataMember = aMembers[(sal_uInt16)i]; + const ScDPDataMember* pDataMember = aMembers[i]; pDataMember->DumpState( pRefMember, pDoc, rPos ); } @@ -3813,12 +3811,17 @@ void ScDPDataDimension::DumpState( const ScDPResultDimension* pRefDim, ScDocumen long ScDPDataDimension::GetMemberCount() const { - return aMembers.Count(); + return aMembers.size(); +} + +const ScDPDataMember* ScDPDataDimension::GetMember(long n) const +{ + return aMembers[n]; } -ScDPDataMember* ScDPDataDimension::GetMember(long n) const +ScDPDataMember* ScDPDataDimension::GetMember(long n) { - return aMembers[(sal_uInt16)n]; + return aMembers[n]; } // ----------------------------------------------------------------------------