summaryrefslogtreecommitdiff
path: root/patches/src680/sc-dp-hash-items.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/src680/sc-dp-hash-items.diff')
-rw-r--r--patches/src680/sc-dp-hash-items.diff495
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)