Kaydet (Commit) 32b61ed8 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Get normal grouping to work again.

üst 6553fc9d
...@@ -112,45 +112,6 @@ const sal_uInt16 SC_DP_LEAPYEAR = 1648; // arbitrary leap year for date calc ...@@ -112,45 +112,6 @@ const sal_uInt16 SC_DP_LEAPYEAR = 1648; // arbitrary leap year for date calc
namespace { namespace {
sal_Bool lcl_Search( SCCOL nSourceDim, const ScDPCache* pCache , const std::vector< SCROW >& vIdx, SCROW nNew , SCROW& rIndex)
{
rIndex = vIdx.size();
sal_Bool bFound = false;
SCROW nLo = 0;
SCROW nHi = vIdx.size() - 1;
SCROW nIndex;
long nCompare;
while (nLo <= nHi)
{
nIndex = (nLo + nHi) / 2;
const ScDPItemData* pData = pCache->GetItemDataById( nSourceDim, vIdx[nIndex] );
const ScDPItemData* pDataInsert = pCache->GetItemDataById( nSourceDim, nNew );
nCompare = ScDPItemData::Compare( *pData, *pDataInsert );
if (nCompare < 0)
nLo = nIndex + 1;
else
{
nHi = nIndex - 1;
if (nCompare == 0)
{
bFound = sal_True;
nLo = nIndex;
}
}
}
rIndex = nLo;
return bFound;
}
void lcl_Insert( SCCOL nSourceDim, const ScDPCache* pCache , std::vector< SCROW >& vIdx, SCROW nNew )
{
SCROW nIndex = 0;
if ( !lcl_Search( nSourceDim, pCache, vIdx, nNew ,nIndex ) )
vIdx.insert( vIdx.begin()+nIndex, nNew );
}
inline bool IsInteger( double fValue ) inline bool IsInteger( double fValue )
{ {
return rtl::math::approxEqual( fValue, rtl::math::approxFloor(fValue) ); return rtl::math::approxEqual( fValue, rtl::math::approxFloor(fValue) );
...@@ -613,21 +574,28 @@ const std::vector<SCROW>& ScDPGroupDimension::GetColumnEntries( ...@@ -613,21 +574,28 @@ const std::vector<SCROW>& ScDPGroupDimension::GetColumnEntries(
return maMemberEntries; return maMemberEntries;
} }
ScDPCache* pCache = const_cast<ScDPCache*>(rCacheTable.getCache());
for (size_t i = 0, n = rOriginal.size(); i < n; ++i) for (size_t i = 0, n = rOriginal.size(); i < n; ++i)
{ {
const ScDPItemData* pItemData = rCacheTable.getCache()->GetItemDataById(nSourceDim, rOriginal[i]); const ScDPItemData* pItemData = pCache->GetItemDataById(nSourceDim, rOriginal[i]);
if (!pItemData || !GetGroupForData(*pItemData)) if (!pItemData)
// This shouldn't happen. Something is terribly wrong.
continue;
if (!GetGroupForData(*pItemData))
{ {
// not in any group -> add as its own group // not in any group -> add as its own group
maMemberEntries.push_back(rOriginal[i]); SCROW nId = pCache->SetGroupItem(nGroupDim, *pItemData);
maMemberEntries.push_back(nId);
} }
} }
for (size_t i = 0, n = aItems.size(); i < n; ++i) for (size_t i = 0, n = aItems.size(); i < n; ++i)
{ {
SCROW nNew = rCacheTable.getCache()->GetAdditionalItemID(aItems[i].GetName()); SCROW nId = pCache->SetGroupItem(nGroupDim, aItems[i].GetName());
lcl_Insert ( (SCCOL)GetSourceDim(), rCacheTable.getCache(), maMemberEntries, nNew ); maMemberEntries.push_back(nId);
} }
return maMemberEntries; return maMemberEntries;
} }
...@@ -1157,12 +1125,15 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con ...@@ -1157,12 +1125,15 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con
pDateHelper = rGroupDim.GetDateHelper(); pDateHelper = rGroupDim.GetDateHelper();
if (!pDateHelper) // date is handled below if (!pDateHelper) // date is handled below
{ {
const ScDPGroupItem* pGroupItem = const ScDPItemData& rItem = *GetMemberById(nSourceDim, pItemDataIndex[nDim]);
rGroupDim.GetGroupForData(*GetMemberById(nSourceDim, pItemDataIndex[nDim])); const ScDPGroupItem* pGroupItem = rGroupDim.GetGroupForData(rItem);
if (pGroupItem) if (pGroupItem)
{
pItemDataIndex[nDim] = pItemDataIndex[nDim] =
pCache->GetIdByItemData(nColumn, ScDPItemData(pGroupItem->GetName())); pCache->GetIdByItemData(nColumn, pGroupItem->GetName());
}
else
pItemDataIndex[nDim] = pCache->GetIdByItemData(nColumn, rItem);
} }
} }
else if ( IsNumGroupDimension( nColumn ) ) else if ( IsNumGroupDimension( nColumn ) )
......
...@@ -2526,6 +2526,7 @@ ScDPMember* ScDPMembers::getByIndex(long nIndex) const ...@@ -2526,6 +2526,7 @@ ScDPMember* ScDPMembers::getByIndex(long nIndex) const
aName = rtl::OUString::valueOf(nVal); aName = rtl::OUString::valueOf(nVal);
// TODO: This needs fixing. // TODO: This needs fixing.
fprintf(stdout, "ScDPMembers::getByIndex: FIXME\n");
ScDPItemData aData(nVal); ScDPItemData aData(nVal);
pNew = new ScDPMember( pNew = new ScDPMember(
pSource, nDim, nHier, nLev, pSource->GetCache()->GetAdditionalItemID(aData)); pSource, nDim, nHier, nLev, pSource->GetCache()->GetAdditionalItemID(aData));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment