From 91cbdc057d0895191a5c442bdaca63df404c7aed Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Sat, 1 Aug 2026 02:04:29 +0100 Subject: [PATCH] tdf#100244,126710:sc:Use GetMember() in most places Use GetMember() for most cases rather than directly accessing the member array, since soon we'll have two member arrays. Change-Id: I76eca012af6743b29de1e53e96a2ff46187f8a8a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209097 Tested-by: Jenkins Reviewed-by: David Gilbert --- sc/inc/dptabres.hxx | 6 ++-- sc/source/core/data/dptabres.cxx | 53 ++++++++++++++++---------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index 84451bcd8815..2a83b3a134bd 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -439,7 +439,7 @@ public: virtual ScDPAggData* GetColTotal(tools::Long nMeasure) = 0; - void FillVisibilityData(ScDPResultVisibilityData& rData) const; + void FillVisibilityData(ScDPResultVisibilityData& rData); }; class ScDPResultMemberSlim : public ScDPResultMember @@ -885,9 +885,9 @@ public: tools::Long GetAutoMeasure() const { return nAutoMeasure; } tools::Long GetAutoCount() const { return nAutoCount; } - ScDPResultDimension* GetFirstChildDimension() const; + ScDPResultDimension* GetFirstChildDimension(); - void FillVisibilityData(ScDPResultVisibilityData& rData) const; + void FillVisibilityData(ScDPResultVisibilityData& rData); // Called by an ScDPResultMemberSlim which has already been promoted // but something with an older pointer calls one of its member functions diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index 341b8a8842aa..865899760cb6 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -1974,7 +1974,7 @@ ScDPAggData* ScDPResultMemberFull::GetColTotal(tools::Long nMeasure) return lcl_GetChildTotal(pColTotal.get(), nMeasure); } -void ScDPResultMember::FillVisibilityData(ScDPResultVisibilityData& rData) const +void ScDPResultMember::FillVisibilityData(ScDPResultVisibilityData& rData) { if (GetChildDimension()) GetChildDimension()->FillVisibilityData(rData); @@ -3257,13 +3257,13 @@ tools::Long ScDPResultDimension::GetSize(tools::Long nMeasure) const OSL_ENSURE(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1, "DataLayout dimension twice?"); // repeat first member... - nTotal = nMemberCount * maMemberArray[0]->GetSize(0); // all measures have equal size + nTotal = nMemberCount * GetMember(0)->GetSize(0); // all measures have equal size } else { // add all members for (tools::Long nMem=0; nMemGetSize(nMeasure); + nTotal += GetMember(nMem)->GetSize(nMeasure); } return nTotal; } @@ -3316,14 +3316,14 @@ void ScDPResultDimension::FillMemberResults( uno::Sequence* { tools::Long nSorted = aMemberOrder.empty() ? i : aMemberOrder[i]; - ScDPResultMember* pMember = maMemberArray[nSorted].get(); + ScDPResultMember* pMember = GetMember(nSorted); // in data layout dimension, use first member with different measures/names if ( bIsDataLayout ) { bool bTotalResult = false; OUString aMbrName = pResultData->GetMeasureDimensionName( nSorted ); OUString aMbrCapt = pResultData->GetMeasureString( nSorted, false, SUBTOTAL_FUNC_NONE, bTotalResult ); - maMemberArray[0]->FillMemberResults( pSequences, nPos, nSorted, false, &aMbrName, &aMbrCapt ); + GetMember(0)->FillMemberResults(pSequences, nPos, nSorted, false, &aMbrName, &aMbrCapt); } else if ( pMember->IsVisible() ) { @@ -3351,11 +3351,11 @@ void ScDPResultDimension::FillDataResults( { OSL_ENSURE(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1, "DataLayout dimension twice?"); - pMember = maMemberArray[0].get(); + pMember = GetMember(0); nMemberMeasure = nSorted; } else - pMember = maMemberArray[nSorted].get(); + pMember = GetMember(nSorted); if ( pMember->IsVisible() ) pMember->FillDataResults(pRefMember, rFilterCxt, rSequence, nMemberMeasure); @@ -3374,11 +3374,11 @@ void ScDPResultDimension::UpdateDataResults(const ScDPResultMember* pRefMember, { OSL_ENSURE(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1, "DataLayout dimension twice?"); - pMember = maMemberArray[0].get(); + pMember = GetMember(0); nMemberMeasure = i; } else - pMember = maMemberArray[i].get(); + pMember = GetMember(i); if ( pMember->IsVisible() ) pMember->UpdateDataResults( pRefMember, nMemberMeasure ); @@ -3408,7 +3408,7 @@ void ScDPResultDimension::SortMembers(ScDPResultMember* pRefMember) tools::Long nLoopCount = bIsDataLayout ? std::min(1, nCount) : nCount; for (tools::Long i=0; iIsVisible() ) pMember->SortMembers( pRefMember ); } @@ -3424,7 +3424,7 @@ void ScDPResultDimension::DoAutoShow(ScDPResultMember* pRefMember) tools::Long nLoopCount = bIsDataLayout ? 1 : nCount; for (tools::Long i=0; iIsVisible() ) pMember->DoAutoShow( pRefMember ); } @@ -3446,7 +3446,7 @@ void ScDPResultDimension::DoAutoShow(ScDPResultMember* pRefMember) // look for equal values to the last included one tools::Long nIncluded = nAutoCount; - const ScDPResultMember* pMember1 = maMemberArray[aAutoOrder[nIncluded - 1]].get(); + const ScDPResultMember* pMember1 = GetMember(aAutoOrder[nIncluded - 1]); const ScDPDataMember* pDataMember1 = pMember1->IsVisible() ? pMember1->GetDataRoot() : nullptr; bool bContinue = true; while ( bContinue ) @@ -3454,7 +3454,7 @@ void ScDPResultDimension::DoAutoShow(ScDPResultMember* pRefMember) bContinue = false; if ( nIncluded < nCount ) { - const ScDPResultMember* pMember2 = maMemberArray[aAutoOrder[nIncluded]].get(); + const ScDPResultMember* pMember2 = GetMember(aAutoOrder[nIncluded]); const ScDPDataMember* pDataMember2 = pMember2->IsVisible() ? pMember2->GetDataRoot() : nullptr; if ( lcl_IsEqual( pDataMember1, pDataMember2, nAutoMeasure ) ) @@ -3469,7 +3469,7 @@ void ScDPResultDimension::DoAutoShow(ScDPResultMember* pRefMember) for (nPos = nIncluded; nPos < nCount; nPos++) { - ScDPResultMember* pMember = maMemberArray[aAutoOrder[nPos]].get(); + ScDPResultMember* pMember = GetMember(aAutoOrder[nPos]); pMember->SetAutoHidden(); } } @@ -3480,7 +3480,7 @@ void ScDPResultDimension::ResetResults() for (tools::Long i=0; iResetResults(); } } @@ -3505,11 +3505,11 @@ void ScDPResultDimension::UpdateRunningTotals(ScDPResultMember* pRefMember, tool { OSL_ENSURE(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1, "DataLayout dimension twice?"); - pMember = maMemberArray[0].get(); + pMember = GetMember(0); nMemberMeasure = nSorted; } else - pMember = maMemberArray[nSorted].get(); + pMember = GetMember(nSorted); if ( pMember->IsVisible() ) { @@ -3548,14 +3548,14 @@ ScDPDataMember* ScDPResultDimension::GetRowReferenceMember( { // search for named member - const ScDPResultMember* pRowMember = maMemberArray[GetSortedIndex(nMemberIndex)].get(); + const ScDPResultMember* pRowMember = GetMember(GetSortedIndex(nMemberIndex)); //TODO: use ScDPItemData, as in ScDPDimension::IsValidPage? while ( pRowMember && pRowMember->GetName() != *pName ) { ++nMemberIndex; if ( nMemberIndex < nMemberCount ) - pRowMember = maMemberArray[GetSortedIndex(nMemberIndex)].get(); + pRowMember = GetMember(GetSortedIndex(nMemberIndex)); else pRowMember = nullptr; } @@ -3564,7 +3564,7 @@ ScDPDataMember* ScDPResultDimension::GetRowReferenceMember( bool bContinue = true; while ( bContinue && nMemberIndex >= 0 && nMemberIndex < nMemberCount ) { - const ScDPResultMember* pRowMember = maMemberArray[GetSortedIndex(nMemberIndex)].get(); + const ScDPResultMember* pRowMember = GetMember(GetSortedIndex(nMemberIndex)); // get child members by given indexes @@ -3778,22 +3778,23 @@ ScDPResultMember* ScDPResultDimension::GetMember(tools::Long n) return maMemberArray[n].get(); } -ScDPResultDimension* ScDPResultDimension::GetFirstChildDimension() const +ScDPResultDimension* ScDPResultDimension::GetFirstChildDimension() { if (GetMemberCount()) - return maMemberArray[0]->GetChildDimension(); + return GetMember(0)->GetChildDimension(); else return nullptr; } -void ScDPResultDimension::FillVisibilityData(ScDPResultVisibilityData& rData) const +void ScDPResultDimension::FillVisibilityData(ScDPResultVisibilityData& rData) { if (IsDataLayout()) return; - for (const auto& rxMember : maMemberArray) + tools::Long nCount = GetMemberCount(); + for (tools::Long i = 0; i < nCount; i++) { - ScDPResultMember* pMember = rxMember.get(); + ScDPResultMember* pMember = GetMember(i); if (pMember->IsValid()) { ScDPItemData aItem(pMember->FillItemData()); @@ -4400,7 +4401,7 @@ void ScDPResultDimension::CheckShowEmpty( bool bShow ) for (tools::Long i=0; iCheckShowEmpty(bShow); }