diff options
Diffstat (limited to 'patches/src680/sc-dp-hash-items.diff')
-rw-r--r-- | patches/src680/sc-dp-hash-items.diff | 495 |
1 files changed, 239 insertions, 256 deletions
diff --git a/patches/src680/sc-dp-hash-items.diff b/patches/src680/sc-dp-hash-items.diff index 8988bf35f..76ee6bdea 100644 --- a/patches/src680/sc-dp-hash-items.diff +++ b/patches/src680/sc-dp-hash-items.diff @@ -1,10 +1,6 @@ -Index: sc/inc/dptabdat.hxx -=================================================================== -RCS file: /cvs/sc/sc/inc/dptabdat.hxx,v -retrieving revision 1.5 -diff -u -w -p -r1.5 dptabdat.hxx ---- sc/inc/dptabdat.hxx 8 Sep 2005 17:36:18 -0000 1.5 -+++ sc/inc/dptabdat.hxx 19 May 2006 14:50:21 -0000 +diff -rup sc/inc/dptabdat.hxx sc/inc/dptabdat.hxx +--- sc/inc/dptabdat.hxx 2006-10-26 12:30:22.000000000 -0400 ++++ sc/inc/dptabdat.hxx 2006-10-26 14:54:07.000000000 -0400 @@ -82,8 +82,14 @@ struct ScDPItemData aString(rS), fValue(fV), bHasValue( bHV ) {} @@ -21,13 +17,178 @@ diff -u -w -p -r1.5 dptabdat.hxx }; #define SC_VALTYPE_EMPTY 0 -Index: sc/inc/dptabres.hxx -=================================================================== -RCS file: /cvs/sc/sc/inc/dptabres.hxx,v -retrieving revision 1.5 -diff -u -w -p -r1.5 dptabres.hxx ---- sc/inc/dptabres.hxx 8 Sep 2005 17:36:34 -0000 1.5 -+++ sc/inc/dptabres.hxx 19 May 2006 14:50:22 -0000 +diff -rup sc/source/core/data/dptabdat.cxx sc/source/core/data/dptabdat.cxx +--- sc/source/core/data/dptabdat.cxx 2006-10-26 16:12:28.000000000 -0400 ++++ sc/source/core/data/dptabdat.cxx 2006-10-27 01:32:50.000000000 -0400 +@@ -46,6 +46,9 @@ + #ifndef _UNOTOOLS_TRANSLITERATIONWRAPPER_HXX + #include <unotools/transliterationwrapper.hxx> + #endif ++#ifndef _UNOTOOLS_COLLATORWRAPPER_HXX ++#include <unotools/collatorwrapper.hxx> ++#endif + + #include "dptabdat.hxx" + #include "global.hxx" +@@ -61,6 +64,55 @@ BOOL ScDPItemData::IsCaseInsEqual( const + ScGlobal::pTransliteration->isEqual( aString, r.aString ) ); + } + ++size_t ScDPItemData::Hash() const ++{ ++ if ( bHasValue ) ++ return (size_t) rtl::math::approxFloor( fValue ); ++ else ++ // If we do unicode safe case insensitive hash we can drop ++ // ScDPItemData::operator== and use ::IsCasInsEqual ++ return rtl_ustr_hashCode_WithLength( aString.GetBuffer(), aString.Len() ); ++} ++ ++BOOL ScDPItemData::operator==( const ScDPItemData& r ) const ++{ ++ if ( bHasValue ) ++ { ++ if ( r.bHasValue ) ++ return rtl::math::approxEqual( fValue, r.fValue ); ++ else ++ return FALSE; ++ } ++ else if ( r.bHasValue ) ++ return FALSE; ++ else ++ // need exact equality until we have a safe case insensitive string hash ++ return aString == r.aString; ++} ++ ++sal_Int32 ScDPItemData::Compare( const ScDPItemData& rA, ++ const ScDPItemData& rB ) ++{ ++ if ( rA.bHasValue ) ++ { ++ if ( rB.bHasValue ) ++ { ++ if ( rtl::math::approxEqual( rA.fValue, rB.fValue ) ) ++ return 0; ++ else if ( rA.fValue < rB.fValue ) ++ return -1; ++ else ++ return 1; ++ } ++ else ++ return -1; // values first ++ } ++ else if ( rB.bHasValue ) ++ return 1; // values first ++ else ++ return ScGlobal::pCollator->compareString( rA.aString, rB.aString ); ++} ++ + // ----------------------------------------------------------------------- + + ScDPTableIteratorParam::ScDPTableIteratorParam( +diff -rup sc/inc/dptabsrc.hxx sc/inc/dptabsrc.hxx +--- sc/inc/dptabsrc.hxx 2006-10-26 12:30:22.000000000 -0400 ++++ sc/inc/dptabsrc.hxx 2006-10-26 14:54:07.000000000 -0400 +@@ -116,6 +116,9 @@ + #include <cppuhelper/implbase5.hxx> + #endif + ++#ifndef SC_DPTABDAT_HXX ++#include "dptabdat.hxx" ++#endif + + class ScDPResultMember; + class ScDPResultData; +@@ -762,10 +765,8 @@ private: + long nHier; + long nLev; + +- String aName; // name for api etc. ++ ScDPItemData maData; + // String aCaption; // visible name (changeable by user) +- double fValue; // used internally for matching +- BOOL bHasValue; // TRUE if this is a value + + BOOL bVisible; + BOOL bShowDet; +diff -rup sc/source/core/data/dptabsrc.cxx sc/source/core/data/dptabsrc.cxx +--- sc/source/core/data/dptabsrc.cxx 2006-10-26 16:12:28.000000000 -0400 ++++ sc/source/core/data/dptabsrc.cxx 2006-10-26 16:12:26.000000000 -0400 +@@ -2398,9 +2398,7 @@ ScDPMember::ScDPMember( ScDPSource* pSrc + nDim( nD ), + nHier( nH ), + nLev( nL ), +- aName( rN ), +- fValue( fV ), +- bHasValue( bHV ), ++ maData( rN, fV, bHV ), + bVisible( TRUE ), + bShowDet( TRUE ) + { +@@ -2422,54 +2420,32 @@ BOOL ScDPMember::IsNamedItem( const ScDP + nHier, nLev ); + + // fValue is converted from integer, so simple comparison works +- return nComp == fValue; ++ return nComp == maData.fValue; + } + +- return r.IsCaseInsEqual( ScDPItemData( aName, fValue, bHasValue ) ); ++ return r.IsCaseInsEqual( maData ); + } + + sal_Int32 ScDPMember::Compare( const ScDPMember& rOther ) const + { +- sal_Int32 nResult; +- if ( bHasValue ) +- { +- if ( rOther.bHasValue ) +- { +- if ( rtl::math::approxEqual( fValue, rOther.fValue ) ) +- nResult = 0; +- else if ( fValue < rOther.fValue ) +- nResult = -1; +- else +- nResult = 1; +- } +- else +- nResult = -1; // values first +- } +- else if ( rOther.bHasValue ) +- nResult = 1; // values first +- else +- nResult = ScGlobal::pCollator->compareString( aName, rOther.aName ); +- +- return nResult; ++ return ScDPItemData::Compare( maData, rOther.maData ); + } + + void ScDPMember::FillItemData( ScDPItemData& rData ) const + { + //! handle date hierarchy... + +- rData.aString = aName; +- rData.fValue = fValue; +- rData.bHasValue = bHasValue; ++ rData = maData; + } + + String ScDPMember::GetNameStr() const + { +- return aName; ++ return maData.aString; + } + + ::rtl::OUString SAL_CALL ScDPMember::getName() throw(uno::RuntimeException) + { +- return aName; ++ return maData.aString; + } + + void SAL_CALL ScDPMember::setName( const ::rtl::OUString& rNewName ) throw(uno::RuntimeException) +diff -rup sc/inc/dptabres.hxx sc/inc/dptabres.hxx +--- sc/inc/dptabres.hxx 2006-10-26 12:30:22.000000000 -0400 ++++ sc/inc/dptabres.hxx 2006-10-26 14:54:07.000000000 -0400 @@ -59,6 +59,8 @@ #ifndef SC_SCGLOB_HXX #include "global.hxx" // enum ScSubTotalFunc @@ -142,116 +303,10 @@ diff -u -w -p -r1.5 dptabres.hxx void ProcessData( const ScDPItemData* pDataMembers, const ScDPValueData* pValues, const ScDPSubTotalState& rSubState ); -Index: sc/inc/dptabsrc.hxx -=================================================================== -RCS file: /cvs/sc/sc/inc/dptabsrc.hxx,v -retrieving revision 1.7 -diff -u -w -p -r1.7 dptabsrc.hxx ---- sc/inc/dptabsrc.hxx 8 Sep 2005 17:36:50 -0000 1.7 -+++ sc/inc/dptabsrc.hxx 19 May 2006 14:50:22 -0000 -@@ -116,6 +116,9 @@ - #include <cppuhelper/implbase5.hxx> - #endif - -+#ifndef SC_DPTABDAT_HXX -+#include "dptabdat.hxx" -+#endif - - class ScDPResultMember; - class ScDPResultData; -@@ -762,10 +765,8 @@ private: - long nHier; - long nLev; - -- String aName; // name for api etc. -+ ScDPItemData maData; - // String aCaption; // visible name (changeable by user) -- double fValue; // used internally for matching -- BOOL bHasValue; // TRUE if this is a value - - BOOL bVisible; - BOOL bShowDet; -Index: sc/source/core/data/dptabdat.cxx -=================================================================== -RCS file: /cvs/sc/sc/source/core/data/dptabdat.cxx,v -retrieving revision 1.9 -diff -u -w -p -r1.9 dptabdat.cxx ---- sc/source/core/data/dptabdat.cxx 8 Sep 2005 18:24:11 -0000 1.9 -+++ sc/source/core/data/dptabdat.cxx 19 May 2006 14:50:23 -0000 -@@ -47,6 +47,9 @@ - #ifndef _UNOTOOLS_TRANSLITERATIONWRAPPER_HXX - #include <unotools/transliterationwrapper.hxx> - #endif -+#ifndef _UNOTOOLS_COLLATORWRAPPER_HXX -+#include <unotools/collatorwrapper.hxx> -+#endif - - #include "dptabdat.hxx" - #include "global.hxx" -@@ -60,6 +63,55 @@ BOOL ScDPItemData::IsCaseInsEqual( const - return bHasValue ? ( r.bHasValue && rtl::math::approxEqual( fValue, r.fValue ) ) : - ( !r.bHasValue && - ScGlobal::pTransliteration->isEqual( aString, r.aString ) ); -+} -+ -+size_t ScDPItemData::Hash() const -+{ -+ if ( bHasValue ) -+ return (size_t) rtl::math::approxFloor( fValue ); -+ else -+ // If we do unicode safe case insensitive hash we can drop -+ // ScDPItemData::operator== and use ::IsCasInsEqual -+ return rtl_ustr_hashCode_WithLength( aString.GetBuffer(), aString.Len() ); -+} -+ -+BOOL ScDPItemData::operator==( const ScDPItemData& r ) const -+{ -+ if ( bHasValue ) -+ { -+ if ( r.bHasValue ) -+ return rtl::math::approxEqual( fValue, r.fValue ); -+ else -+ return FALSE; -+ } -+ else if ( bHasValue ) -+ return FALSE; -+ else -+ // need exact equality until we have a safe case insensitive string hash -+ return aString == r.aString; -+} -+ -+sal_Int32 ScDPItemData::Compare( const ScDPItemData& rA, -+ const ScDPItemData& rB ) -+{ -+ if ( rA.bHasValue ) -+ { -+ if ( rB.bHasValue ) -+ { -+ if ( rtl::math::approxEqual( rA.fValue, rB.fValue ) ) -+ return 0; -+ else if ( rA.fValue < rB.fValue ) -+ return -1; -+ else -+ return 1; -+ } -+ else -+ return -1; // values first -+ } -+ else if ( rB.bHasValue ) -+ return 1; // values first -+ else -+ return ScGlobal::pCollator->compareString( rA.aString, rB.aString ); - } - - // ----------------------------------------------------------------------- -Index: sc/source/core/data/dptabres.cxx -=================================================================== -RCS file: /cvs/sc/sc/source/core/data/dptabres.cxx,v -retrieving revision 1.7 -diff -u -w -p -r1.7 dptabres.cxx ---- sc/source/core/data/dptabres.cxx 8 Sep 2005 18:24:27 -0000 1.7 -+++ sc/source/core/data/dptabres.cxx 19 May 2006 14:50:23 -0000 -@@ -48,9 +48,9 @@ +diff -rup sc/source/core/data/dptabres.cxx sc/source/core/data/dptabres.cxx +--- sc/source/core/data/dptabres.cxx 2006-10-27 01:35:35.000000000 -0400 ++++ sc/source/core/data/dptabres.cxx 2006-10-27 01:39:39.000000000 -0400 +@@ -47,9 +47,9 @@ #include <algorithm> @@ -262,7 +317,7 @@ diff -u -w -p -r1.7 dptabres.cxx #include "global.hxx" #include "subtotal.hxx" #include "globstr.hrc" -@@ -131,7 +131,7 @@ public: +@@ -130,7 +130,7 @@ public: BOOL operator()( sal_Int32 nIndex1, sal_Int32 nIndex2 ) const; }; @@ -271,7 +326,7 @@ diff -u -w -p -r1.7 dptabres.cxx { // members can be NULL if used for rows -@@ -162,7 +162,7 @@ BOOL lcl_IsLess( ScDPDataMember* pDataMe +@@ -161,7 +161,7 @@ BOOL lcl_IsLess( ScDPDataMember* pDataMe } } @@ -280,7 +335,7 @@ diff -u -w -p -r1.7 dptabres.cxx { // members can be NULL if used for rows -@@ -195,13 +195,13 @@ BOOL lcl_IsEqual( ScDPDataMember* pDataM +@@ -194,13 +194,13 @@ BOOL lcl_IsEqual( ScDPDataMember* pDataM BOOL ScDPRowMembersOrder::operator()( sal_Int32 nIndex1, sal_Int32 nIndex2 ) const { @@ -298,7 +353,7 @@ diff -u -w -p -r1.7 dptabres.cxx return lcl_IsLess( pDataMember1, pDataMember2, nMeasure, bAscending ); } -@@ -692,7 +692,7 @@ ScDPAggData* ScDPRowTotals::GetGrandTota +@@ -695,7 +695,7 @@ ScDPAggData* ScDPRowTotals::GetGrandTota // ----------------------------------------------------------------------- @@ -307,7 +362,7 @@ diff -u -w -p -r1.7 dptabres.cxx { ScSubTotalFunc eRet = SUBTOTAL_FUNC_NONE; if ( pLevel ) -@@ -943,6 +943,17 @@ BOOL ScDPResultMember::IsNamedItem( cons +@@ -946,6 +946,17 @@ BOOL ScDPResultMember::IsNamedItem( cons return ((ScDPMember*)pMemberDesc)->IsNamedItem( r ); return FALSE; } @@ -325,7 +380,7 @@ diff -u -w -p -r1.7 dptabres.cxx void ScDPResultMember::InitFrom( ScDPDimension** ppDim, ScDPLevel** ppLev, ScDPInitState& rInitState ) { -@@ -1561,7 +1572,7 @@ ScDPAggData* ScDPResultMember::GetColTot +@@ -1565,7 +1576,7 @@ ScDPAggData* ScDPResultMember::GetColTot // ----------------------------------------------------------------------- @@ -334,7 +389,7 @@ diff -u -w -p -r1.7 dptabres.cxx pResultData( pData ), pResultMember( pRes ), pChildDimension( NULL ) -@@ -1606,7 +1617,7 @@ BOOL ScDPDataMember::HasHiddenDetails() +@@ -1610,7 +1621,7 @@ BOOL ScDPDataMember::HasHiddenDetails() return FALSE; } @@ -343,43 +398,43 @@ diff -u -w -p -r1.7 dptabres.cxx { if ( !pChildDimension ) pChildDimension = new ScDPDataDimension(pResultData); -@@ -1671,7 +1682,7 @@ void ScDPDataMember::ProcessData( const +@@ -1689,7 +1700,7 @@ void ScDPDataMember::ProcessData( const { - if ( pChildDimension ) + if ( pChildDimension && nUserSubCount > 1 ) { - ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; + const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; aLocalSubState.nColSubTotalFunc = nUserPos; aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos ); } -@@ -1828,7 +1839,7 @@ void ScDPDataMember::FillDataRow( const +@@ -1850,7 +1861,7 @@ void ScDPDataMember::FillDataRow( const { - if ( pChildDimension ) + if ( pChildDimension && nUserSubCount > 1 ) { - ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; + const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; aLocalSubState.nColSubTotalFunc = nUserPos; aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos ); } -@@ -1904,7 +1915,7 @@ void ScDPDataMember::UpdateDataRow( cons +@@ -1926,7 +1937,7 @@ void ScDPDataMember::UpdateDataRow( cons { - if ( pChildDimension ) + if ( pChildDimension && nUserSubCount > 1 ) { - ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; + const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; aLocalSubState.nColSubTotalFunc = nUserPos; aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos ); } -@@ -2016,7 +2027,7 @@ void ScDPDataMember::UpdateRunningTotals +@@ -2038,7 +2049,7 @@ void ScDPDataMember::UpdateRunningTotals { - if ( pChildDimension ) + if ( pChildDimension && nUserSubCount > 1 ) { - ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; + const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL; aLocalSubState.nColSubTotalFunc = nUserPos; aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos ); } -@@ -2057,7 +2068,7 @@ void ScDPDataMember::UpdateRunningTotals +@@ -2079,7 +2090,7 @@ void ScDPDataMember::UpdateRunningTotals BOOL bRefDimInCol = ( nRefOrient == sheet::DataPilotFieldOrientation_COLUMN ); BOOL bRefDimInRow = ( nRefOrient == sheet::DataPilotFieldOrientation_ROW ); @@ -388,7 +443,7 @@ diff -u -w -p -r1.7 dptabres.cxx long nRowPos = 0; long nColPos = 0; -@@ -2110,7 +2121,7 @@ void ScDPDataMember::UpdateRunningTotals +@@ -2132,7 +2143,7 @@ void ScDPDataMember::UpdateRunningTotals long nMyIndex = bRefDimInCol ? pColIndexes[nColPos] : pRowIndexes[nRowPos]; if ( nMyIndex >= 0 && nMyIndex < pSelectDim->GetMemberCount() ) { @@ -397,7 +452,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pMyRefMember && pMyRefMember->HasHiddenDetails() ) { pSelectDim = NULL; // don't calculate -@@ -2485,6 +2496,28 @@ ScDPResultDimension::ScDPResultDimension +@@ -2502,6 +2513,34 @@ ScDPResultDimension::ScDPResultDimension ScDPResultDimension::~ScDPResultDimension() { @@ -407,11 +462,17 @@ diff -u -w -p -r1.7 dptabres.cxx + +ScDPResultMember *ScDPResultDimension::FindMember( const ScDPItemData& rData ) const +{ ++ ScDPResultMember *res = NULL; ++ + if( bIsDataLayout ) + return maMemberArray[0]; ++ + MemberHash::const_iterator aRes = maMemberHash.find( rData ); -+ if( aRes != maMemberHash.end() ) -+ return aRes->second; ++ if( aRes != maMemberHash.end()) { ++ if ( aRes->second->IsNamedItem( rData ) ) ++ return aRes->second; ++ fprintf (stderr, "problem! hash result is not the same as IsNamedItem\n"); ++ } + + unsigned int i; + unsigned int nCount = maMemberArray.size(); @@ -426,7 +487,7 @@ diff -u -w -p -r1.7 dptabres.cxx } void ScDPResultDimension::InitFrom( ScDPDimension** ppDim, ScDPLevel** ppLev, ScDPInitState& rInitState ) -@@ -2531,14 +2564,20 @@ void ScDPResultDimension::InitFrom( ScDP +@@ -2548,14 +2587,20 @@ void ScDPResultDimension::InitFrom( ScDP ScDPMember* pMember = pMembers->getByIndex(nSorted); if ( aCompare.IsIncluded( *pMember ) ) { @@ -453,7 +514,7 @@ diff -u -w -p -r1.7 dptabres.cxx rInitState.RemoveMember(); } } -@@ -2598,9 +2637,17 @@ void ScDPResultDimension::LateInitFrom( +@@ -2615,9 +2660,17 @@ void ScDPResultDimension::LateInitFrom( ScDPMember* pMember = pMembers->getByIndex(nSorted); if ( aCompare.IsIncluded( *pMember ) ) { @@ -473,18 +534,17 @@ diff -u -w -p -r1.7 dptabres.cxx } } bInitialized = TRUE; // don't call again, even if no members were included -@@ -2609,20 +2656,29 @@ void ScDPResultDimension::LateInitFrom( +@@ -2626,20 +2679,29 @@ void ScDPResultDimension::LateInitFrom( // initialize only specific member (or all if "show empty" flag is set) BOOL bShowEmpty = pThisLevel->getShowEmpty(); - long nCount = aMembers.Count(); +- for (long i=0; i<nCount; i++) + if ( bIsDataLayout || bShowEmpty ) + { + long nCount = maMemberArray.size(); - for (long i=0; i<nCount; i++) - { -- ScDPResultMember* pResultMember = aMembers[(USHORT)i]; -- if ( bIsDataLayout || bShowEmpty || pResultMember->IsNamedItem( rThisData ) ) ++ for (long i=0; i<nCount; i++) ++ { + ScDPResultMember* pResultMember = maMemberArray[i]; + ScDPItemData aMemberData; + pResultMember->FillItemData( aMemberData ); @@ -494,7 +554,9 @@ diff -u -w -p -r1.7 dptabres.cxx + } + } + else -+ { + { +- ScDPResultMember* pResultMember = aMembers[(USHORT)i]; +- if ( bIsDataLayout || bShowEmpty || pResultMember->IsNamedItem( rThisData ) ) + ScDPResultMember* pResultMember = FindMember( rThisData ); + if( NULL != pResultMember ) { @@ -509,7 +571,7 @@ diff -u -w -p -r1.7 dptabres.cxx } } } -@@ -2631,19 +2687,19 @@ void ScDPResultDimension::LateInitFrom( +@@ -2648,19 +2710,19 @@ void ScDPResultDimension::LateInitFrom( long ScDPResultDimension::GetSize(long nMeasure) const { long nTotal = 0; @@ -532,7 +594,7 @@ diff -u -w -p -r1.7 dptabres.cxx } return nTotal; } -@@ -2651,23 +2707,9 @@ long ScDPResultDimension::GetSize(long n +@@ -2668,23 +2730,9 @@ long ScDPResultDimension::GetSize(long n BOOL ScDPResultDimension::IsValidEntry( const ScDPItemData* pMembers ) const { // the ScDPItemData array must contain enough entries for all dimensions - this isn't checked @@ -559,7 +621,7 @@ diff -u -w -p -r1.7 dptabres.cxx DBG_ERROR("IsValidEntry: Member not found"); return FALSE; -@@ -2678,19 +2720,12 @@ void ScDPResultDimension::ProcessData( c +@@ -2695,19 +2743,12 @@ void ScDPResultDimension::ProcessData( c const ScDPValueData* pValues ) { // the ScDPItemData array must contain enough entries for all dimensions - this isn't checked @@ -581,7 +643,7 @@ diff -u -w -p -r1.7 dptabres.cxx DBG_ERROR("ProcessData: Member not found"); } -@@ -2699,19 +2734,19 @@ void ScDPResultDimension::FillMemberResu +@@ -2716,19 +2757,19 @@ void ScDPResultDimension::FillMemberResu long nStart, long nMeasure ) { long nPos = nStart; @@ -604,7 +666,7 @@ diff -u -w -p -r1.7 dptabres.cxx } else if ( pMember->IsVisible() ) pMember->FillMemberResults( pSequences, nPos, nMeasure, FALSE, NULL, NULL ); -@@ -2725,7 +2760,7 @@ void ScDPResultDimension::FillDataResult +@@ -2742,7 +2783,7 @@ void ScDPResultDimension::FillDataResult { long nMemberRow = nRow; long nMemberMeasure = nMeasure; @@ -613,7 +675,7 @@ diff -u -w -p -r1.7 dptabres.cxx for (long i=0; i<nCount; i++) { long nSorted = aMemberOrder.empty() ? i : aMemberOrder[i]; -@@ -2735,11 +2770,11 @@ void ScDPResultDimension::FillDataResult +@@ -2752,11 +2793,11 @@ void ScDPResultDimension::FillDataResult { DBG_ASSERT(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1, "DataLayout dimension twice?"); @@ -627,7 +689,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pMember->IsVisible() ) pMember->FillDataResults( pRefMember, rSequence, nMemberRow, nMemberMeasure ); -@@ -2750,7 +2785,7 @@ void ScDPResultDimension::FillDataResult +@@ -2767,7 +2808,7 @@ void ScDPResultDimension::FillDataResult void ScDPResultDimension::UpdateDataResults( const ScDPResultMember* pRefMember, long nMeasure ) const { long nMemberMeasure = nMeasure; @@ -636,7 +698,7 @@ diff -u -w -p -r1.7 dptabres.cxx for (long i=0; i<nCount; i++) { const ScDPResultMember* pMember; -@@ -2758,11 +2793,11 @@ void ScDPResultDimension::UpdateDataResu +@@ -2775,11 +2816,11 @@ void ScDPResultDimension::UpdateDataResu { DBG_ASSERT(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1, "DataLayout dimension twice?"); @@ -650,7 +712,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pMember->IsVisible() ) pMember->UpdateDataResults( pRefMember, nMemberMeasure ); -@@ -2771,7 +2806,7 @@ void ScDPResultDimension::UpdateDataResu +@@ -2788,7 +2829,7 @@ void ScDPResultDimension::UpdateDataResu void ScDPResultDimension::SortMembers( ScDPResultMember* pRefMember ) { @@ -659,7 +721,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( bSortByData ) { -@@ -2792,7 +2827,7 @@ void ScDPResultDimension::SortMembers( S +@@ -2809,7 +2850,7 @@ void ScDPResultDimension::SortMembers( S long nLoopCount = bIsDataLayout ? 1 : nCount; for (long i=0; i<nLoopCount; i++) { @@ -668,7 +730,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pMember->IsVisible() ) pMember->SortMembers( pRefMember ); } -@@ -2800,7 +2835,7 @@ void ScDPResultDimension::SortMembers( S +@@ -2817,7 +2858,7 @@ void ScDPResultDimension::SortMembers( S void ScDPResultDimension::DoAutoShow( ScDPResultMember* pRefMember ) { @@ -677,7 +739,7 @@ diff -u -w -p -r1.7 dptabres.cxx // handle children first, before changing the visible state -@@ -2808,7 +2843,7 @@ void ScDPResultDimension::DoAutoShow( Sc +@@ -2825,7 +2866,7 @@ void ScDPResultDimension::DoAutoShow( Sc long nLoopCount = bIsDataLayout ? 1 : nCount; for (long i=0; i<nLoopCount; i++) { @@ -686,7 +748,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pMember->IsVisible() ) pMember->DoAutoShow( pRefMember ); } -@@ -2829,16 +2864,16 @@ void ScDPResultDimension::DoAutoShow( Sc +@@ -2846,16 +2887,16 @@ void ScDPResultDimension::DoAutoShow( Sc // look for equal values to the last included one long nIncluded = nAutoCount; @@ -707,7 +769,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( lcl_IsEqual( pDataMember1, pDataMember2, nAutoMeasure ) ) { -@@ -2852,7 +2887,7 @@ void ScDPResultDimension::DoAutoShow( Sc +@@ -2869,7 +2910,7 @@ void ScDPResultDimension::DoAutoShow( Sc for (nPos = nIncluded; nPos < nCount; nPos++) { @@ -716,7 +778,7 @@ diff -u -w -p -r1.7 dptabres.cxx pMember->SetAutoHidden(); } } -@@ -2860,11 +2895,11 @@ void ScDPResultDimension::DoAutoShow( Sc +@@ -2877,11 +2918,11 @@ void ScDPResultDimension::DoAutoShow( Sc void ScDPResultDimension::ResetResults() { @@ -730,7 +792,7 @@ diff -u -w -p -r1.7 dptabres.cxx pMember->ResetResults( FALSE ); } } -@@ -2877,22 +2912,22 @@ long ScDPResultDimension::GetSortedIndex +@@ -2894,22 +2935,22 @@ long ScDPResultDimension::GetSortedIndex void ScDPResultDimension::UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure, ScDPRunningTotalState& rRunning, ScDPRowTotals& rTotals ) const { @@ -757,7 +819,7 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pMember->IsVisible() ) { -@@ -2916,7 +2951,7 @@ ScDPDataMember* ScDPResultDimension::Get +@@ -2933,7 +2974,7 @@ ScDPDataMember* ScDPResultDimension::Get ScDPDataMember* pColMember = NULL; BOOL bFirstExisting = ( pRelativePos == NULL && pName == NULL ); @@ -766,7 +828,7 @@ diff -u -w -p -r1.7 dptabres.cxx long nMemberIndex = 0; // unsorted long nDirection = 1; // forward if no relative position is used if ( pRelativePos ) -@@ -2930,14 +2965,14 @@ ScDPDataMember* ScDPResultDimension::Get +@@ -2947,14 +2988,14 @@ ScDPDataMember* ScDPResultDimension::Get { // search for named member @@ -783,7 +845,7 @@ diff -u -w -p -r1.7 dptabres.cxx else pRowMember = NULL; } -@@ -2946,7 +2981,7 @@ ScDPDataMember* ScDPResultDimension::Get +@@ -2963,7 +3004,7 @@ ScDPDataMember* ScDPResultDimension::Get BOOL bContinue = TRUE; while ( bContinue && nMemberIndex >= 0 && nMemberIndex < nMemberCount ) { @@ -792,7 +854,7 @@ diff -u -w -p -r1.7 dptabres.cxx // get child members by given indexes -@@ -3006,7 +3041,7 @@ ScDPDataMember* ScDPResultDimension::Get +@@ -3023,7 +3064,7 @@ ScDPDataMember* ScDPResultDimension::Get // get own row member using all indexes @@ -801,7 +863,7 @@ diff -u -w -p -r1.7 dptabres.cxx ScDPDataMember* pColMember = NULL; const long* pNextRowIndex = pRowIndexes; -@@ -3123,10 +3158,10 @@ void ScDPResultDimension::DumpState( con +@@ -3140,10 +3181,10 @@ void ScDPResultDimension::DumpState( con SCROW nStartRow = rPos.Row(); @@ -814,7 +876,7 @@ diff -u -w -p -r1.7 dptabres.cxx pMember->DumpState( pRefMember, pDoc, rPos ); } -@@ -3135,18 +3170,22 @@ void ScDPResultDimension::DumpState( con +@@ -3152,18 +3193,22 @@ void ScDPResultDimension::DumpState( con long ScDPResultDimension::GetMemberCount() const { @@ -842,7 +904,7 @@ diff -u -w -p -r1.7 dptabres.cxx else return NULL; } -@@ -3164,7 +3203,7 @@ ScDPDataDimension::~ScDPDataDimension() +@@ -3181,7 +3226,7 @@ ScDPDataDimension::~ScDPDataDimension() { } @@ -851,7 +913,7 @@ diff -u -w -p -r1.7 dptabres.cxx { if (!pDim) return; -@@ -3175,7 +3214,7 @@ void ScDPDataDimension::InitFrom( ScDPRe +@@ -3192,7 +3237,7 @@ void ScDPDataDimension::InitFrom( ScDPRe long nCount = pDim->GetMemberCount(); for (long i=0; i<nCount; i++) { @@ -860,7 +922,7 @@ diff -u -w -p -r1.7 dptabres.cxx ScDPDataMember* pNew = new ScDPDataMember( pResultData, pResMem ); aMembers.Insert( pNew, aMembers.Count() ); -@@ -3185,7 +3224,7 @@ void ScDPDataDimension::InitFrom( ScDPRe +@@ -3202,7 +3247,7 @@ void ScDPDataDimension::InitFrom( ScDPRe // with LateInit, pResMem hasn't necessarily been initialized yet, // so InitFrom for the new result member is called from its ProcessData method @@ -869,82 +931,3 @@ diff -u -w -p -r1.7 dptabres.cxx if ( pChildDim ) pNew->InitFrom( pChildDim ); } -Index: sc/source/core/data/dptabsrc.cxx -=================================================================== -RCS file: /cvs/sc/sc/source/core/data/dptabsrc.cxx,v -retrieving revision 1.14 -diff -u -w -p -r1.14 dptabsrc.cxx ---- sc/source/core/data/dptabsrc.cxx 7 Nov 2005 14:41:01 -0000 1.14 -+++ sc/source/core/data/dptabsrc.cxx 19 May 2006 14:50:24 -0000 -@@ -2399,9 +2399,7 @@ ScDPMember::ScDPMember( ScDPSource* pSrc - nDim( nD ), - nHier( nH ), - nLev( nL ), -- aName( rN ), -- fValue( fV ), -- bHasValue( bHV ), -+ maData( rN, fV, bHV ), - bVisible( TRUE ), - bShowDet( TRUE ) - { -@@ -2423,54 +2421,32 @@ BOOL ScDPMember::IsNamedItem( const ScDP - nHier, nLev ); - - // fValue is converted from integer, so simple comparison works -- return nComp == fValue; -+ return nComp == maData.fValue; - } - -- return r.IsCaseInsEqual( ScDPItemData( aName, fValue, bHasValue ) ); -+ return r.IsCaseInsEqual( maData ); - } - - sal_Int32 ScDPMember::Compare( const ScDPMember& rOther ) const - { -- sal_Int32 nResult; -- if ( bHasValue ) -- { -- if ( rOther.bHasValue ) -- { -- if ( rtl::math::approxEqual( fValue, rOther.fValue ) ) -- nResult = 0; -- else if ( fValue < rOther.fValue ) -- nResult = -1; -- else -- nResult = 1; -- } -- else -- nResult = -1; // values first -- } -- else if ( rOther.bHasValue ) -- nResult = 1; // values first -- else -- nResult = ScGlobal::pCollator->compareString( aName, rOther.aName ); -- -- return nResult; -+ return ScDPItemData::Compare( maData, rOther.maData ); - } - - void ScDPMember::FillItemData( ScDPItemData& rData ) const - { - //! handle date hierarchy... - -- rData.aString = aName; -- rData.fValue = fValue; -- rData.bHasValue = bHasValue; -+ rData = maData; - } - - String ScDPMember::GetNameStr() const - { -- return aName; -+ return maData.aString; - } - - ::rtl::OUString SAL_CALL ScDPMember::getName() throw(uno::RuntimeException) - { -- return aName; -+ return maData.aString; - } - - void SAL_CALL ScDPMember::setName( const ::rtl::OUString& rNewName ) throw(uno::RuntimeException) |