1
Index: sc/inc/dpsave.hxx
2
===================================================================
3
RCS file: /cvs/sc/sc/inc/dpsave.hxx,v
4
retrieving revision 1.8
5
diff -u -w -p -r1.8 dpsave.hxx
6
--- sc/inc/dpsave.hxx 8 Sep 2005 17:35:34 -0000 1.8
7
+++ sc/inc/dpsave.hxx 27 Mar 2006 16:39:40 -0000
9
#ifndef INCLUDED_SCDLLAPI_H
14
namespace com { namespace sun { namespace star { namespace sheet {
15
struct DataPilotFieldReference;
16
@@ -119,8 +120,15 @@ private:
17
::com::sun::star::sheet::DataPilotFieldSortInfo* pSortInfo; // (level)
18
::com::sun::star::sheet::DataPilotFieldAutoShowInfo* pAutoShowInfo; // (level)
19
::com::sun::star::sheet::DataPilotFieldLayoutInfo* pLayoutInfo; // (level)
22
+ struct MemberHashFunc : public std::unary_function< const String &, size_t >
24
+ size_t operator() (const String &member_name) const;
27
+ typedef std::hash_map <String, ScDPSaveMember *, MemberHashFunc> MemberHash;
29
+ MemberHash aMembers;
31
ScDPSaveDimension(const String& rName, BOOL bDataLayout);
32
ScDPSaveDimension(const ScDPSaveDimension& r);
33
@@ -129,8 +137,8 @@ public:
35
BOOL operator== ( const ScDPSaveDimension& r ) const;
37
- const List& GetMembers() const { return aMemberList; }
38
- void AddMember(ScDPSaveMember* pMember) { aMemberList.Insert(pMember, LIST_APPEND); };
39
+ const MemberHash& GetMembers() const { return aMembers; }
40
+ void AddMember(ScDPSaveMember* pMember) { aMembers[pMember->GetName()] = pMember; }
42
void SetDupFlag(BOOL bSet) { bDupFlag = bSet; }
43
BOOL GetDupFlag() const { return bDupFlag; }
44
Index: sc/source/core/data/dpsave.cxx
45
===================================================================
46
RCS file: /cvs/sc/sc/source/core/data/dpsave.cxx,v
47
retrieving revision 1.8
48
diff -u -w -p -r1.8 dpsave.cxx
49
--- sc/source/core/data/dpsave.cxx 8 Sep 2005 18:23:28 -0000 1.8
50
+++ sc/source/core/data/dpsave.cxx 27 Mar 2006 16:39:41 -0000
51
@@ -214,6 +214,11 @@ void ScDPSaveMember::WriteToSource( cons
53
// -----------------------------------------------------------------------
55
+size_t ScDPSaveDimension::MemberHashFunc::operator()(const String & member_name) const
57
+ return rtl_ustr_hashCode_WithLength( member_name.GetBuffer(), member_name.Len() );
60
ScDPSaveDimension::ScDPSaveDimension(const String& rName, BOOL bDataLayout) :
62
bIsDataLayout( bDataLayout ),
63
@@ -253,11 +258,10 @@ ScDPSaveDimension::ScDPSaveDimension(con
64
pSubTotalFuncs[nSub] = r.pSubTotalFuncs[nSub];
67
- long nCount = r.aMemberList.Count();
68
- for (long i=0; i<nCount; i++)
69
+ for (MemberHash::const_iterator i=r.aMembers.begin(); i != r.aMembers.end() ; i++)
71
- ScDPSaveMember* pNew = new ScDPSaveMember( *(ScDPSaveMember*)r.aMemberList.GetObject(i) );
72
- aMemberList.Insert( pNew, LIST_APPEND );
73
+ ScDPSaveMember* pNew = new ScDPSaveMember( *i->second );
74
+ aMembers[pNew->GetName()] = pNew;
76
if (r.pReferenceValue)
77
pReferenceValue = new sheet::DataPilotFieldReference( *(r.pReferenceValue) );
78
@@ -318,7 +322,7 @@ ScDPSaveDimension::ScDPSaveDimension(SvS
79
for (i=0; i<nNewCount; i++)
81
ScDPSaveMember* pNew = new ScDPSaveMember( rStream );
82
- aMemberList.Insert( pNew, LIST_APPEND );
83
+ aMembers[pNew->GetName()] = pNew;
85
pReferenceValue = NULL;
87
@@ -352,21 +356,16 @@ void ScDPSaveDimension::Store( SvStream&
89
rStream << (USHORT) 0; // nExtra
91
- long nCount = aMemberList.Count();
92
+ long nCount = aMembers.size();
94
- for (i=0; i<nCount; i++)
96
- const ScDPSaveMember* pMember = (const ScDPSaveMember*)aMemberList.GetObject(i);
97
- pMember->Store( rStream );
99
+ for (MemberHash::const_iterator i=aMembers.begin(); i != aMembers.end() ; i++)
100
+ i->second->Store( rStream );
103
ScDPSaveDimension::~ScDPSaveDimension()
105
- long nCount = aMemberList.Count();
106
- for (long i=0; i<nCount; i++)
107
- delete (ScDPSaveMember*)aMemberList.GetObject(i);
108
- aMemberList.Clear();
109
+ for (MemberHash::const_iterator i=aMembers.begin(); i != aMembers.end() ; i++)
111
delete pReferenceValue;
113
delete pAutoShowInfo;
114
@@ -397,13 +396,13 @@ BOOL ScDPSaveDimension::operator== ( con
115
if ( pSubTotalFuncs[i] != r.pSubTotalFuncs[i] )
118
- long nCount = aMemberList.Count();
119
- if ( nCount != r.aMemberList.Count() )
120
+ if (aMembers.size() != r.aMembers.size() )
123
- for (i=0; i<nCount; i++)
124
- if ( !( *(ScDPSaveMember*)aMemberList.GetObject(i) ==
125
- *(ScDPSaveMember*)r.aMemberList.GetObject(i) ) )
126
+ MemberHash::const_iterator a=aMembers.begin();
127
+ MemberHash::const_iterator b=r.aMembers.begin();
128
+ for (; a != aMembers.end() ; ++a, ++b)
129
+ if (!(*(a->second) == *(b->second)))
133
@@ -551,26 +550,21 @@ const String& ScDPSaveDimension::GetCurr
135
ScDPSaveMember* ScDPSaveDimension::GetExistingMemberByName(const String& rName)
137
- long nCount = aMemberList.Count();
138
- for (long i=0; i<nCount; i++)
140
- ScDPSaveMember* pMember = (ScDPSaveMember*)aMemberList.GetObject(i);
141
- if ( pMember->GetName() == rName )
144
+ MemberHash::const_iterator res = aMembers.find (rName);
145
+ if (res != aMembers.end())
146
+ return res->second;
151
ScDPSaveMember* ScDPSaveDimension::GetMemberByName(const String& rName)
153
- long nCount = aMemberList.Count();
154
ScDPSaveMember* pMember = GetExistingMemberByName(rName);
158
ScDPSaveMember* pNew = new ScDPSaveMember( rName );
159
- aMemberList.Insert( pNew, LIST_APPEND );
160
+ aMembers[rName] = pNew;
164
@@ -624,10 +618,10 @@ void ScDPSaveDimension::WriteToSource( c
168
- // Level loop outside of aMemberList loop
169
+ // Level loop outside of aMembers loop
170
// because SubTotals have to be set independently of known members
172
- long nCount = aMemberList.Count();
173
+ long nCount = aMembers.size();
176
uno::Reference<container::XIndexAccess> xHiers;
177
@@ -725,15 +719,14 @@ void ScDPSaveDimension::WriteToSource( c
178
uno::Reference<container::XNameAccess> xMembers = xMembSupp->getMembers();
181
- for (long i=0; i<nCount; i++)
182
+ for (MemberHash::const_iterator i=aMembers.begin(); i != aMembers.end() ; i++)
184
- ScDPSaveMember* pMember = (ScDPSaveMember*)aMemberList.GetObject(i);
185
- rtl::OUString aName = pMember->GetName();
186
+ rtl::OUString aName = i->second->GetName();
187
if ( xMembers->hasByName( aName ) )
189
uno::Reference<uno::XInterface> xMemberInt = ScUnoHelpFunctions::AnyToInterface(
190
xMembers->getByName( aName ) );
191
- pMember->WriteToSource( xMemberInt );
192
+ i->second->WriteToSource( xMemberInt );
194
// missing member is no error
196
Index: sc/source/filter/excel/xepivot.cxx
197
===================================================================
198
RCS file: /cvs/sc/sc/source/filter/excel/xepivot.cxx,v
199
retrieving revision 1.11
200
diff -u -w -p -r1.11 xepivot.cxx
201
--- sc/source/filter/excel/xepivot.cxx 8 Sep 2005 19:01:27 -0000 1.11
202
+++ sc/source/filter/excel/xepivot.cxx 27 Mar 2006 16:39:43 -0000
203
@@ -1126,16 +1126,10 @@ void XclExpPTField::SetPropertiesFromDim
207
- const List& rMemList = rSaveDim.GetMembers();
208
- for( ULONG nMemIdx = 0, nMemCount = rMemList.Count(); nMemIdx < nMemCount; ++nMemIdx )
210
- if( const ScDPSaveMember* pSaveMem = static_cast< const ScDPSaveMember* >( rMemList.GetObject( nMemIdx ) ) )
213
- if( XclExpPTItem* pItem = GetItemAcc( pSaveMem->GetName() ) )
214
- pItem->SetPropertiesFromMember( *pSaveMem );
217
+ const ScDPSaveDimension::MemberHash &rMembers = rSaveDim.GetMembers();
218
+ for (ScDPSaveDimension::MemberHash::const_iterator i=rMembers.begin(); i != rMembers.end() ; i++)
219
+ if( XclExpPTItem* pItem = GetItemAcc( i->second->GetName() ) )
220
+ pItem->SetPropertiesFromMember( *(i->second) );
223
void XclExpPTField::SetDataPropertiesFromDim( const ScDPSaveDimension& rSaveDim )
224
Index: sc/source/filter/xml/XMLExportDataPilot.cxx
225
===================================================================
226
RCS file: /cvs/sc/sc/source/filter/xml/XMLExportDataPilot.cxx,v
227
retrieving revision 1.22
228
diff -u -w -p -r1.22 XMLExportDataPilot.cxx
229
--- sc/source/filter/xml/XMLExportDataPilot.cxx 8 Sep 2005 19:54:20 -0000 1.22
230
+++ sc/source/filter/xml/XMLExportDataPilot.cxx 27 Mar 2006 16:39:44 -0000
231
@@ -544,19 +544,18 @@ void ScXMLExportDataPilot::WriteSubTotal
233
void ScXMLExportDataPilot::WriteMembers(ScDPSaveDimension* pDim)
235
- List aMembers = pDim->GetMembers();
236
- sal_Int32 nMemberCount = aMembers.Count();
237
- if (nMemberCount > 0)
238
+ const ScDPSaveDimension::MemberHash &rMembers = pDim->GetMembers();
239
+ if (rMembers.size() > 0)
241
SvXMLElementExport aElemDPMs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBERS, sal_True, sal_True);
242
rExport.CheckAttrList();
243
- for (sal_Int32 nMember = 0; nMember < nMemberCount; nMember++)
244
+ for (ScDPSaveDimension::MemberHash::const_iterator i=rMembers.begin(); i != rMembers.end() ; i++)
246
- rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rtl::OUString(((ScDPSaveMember*)aMembers.GetObject(nMember))->GetName()));
247
+ rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rtl::OUString(i->second->GetName()));
248
rtl::OUStringBuffer sBuffer;
249
- SvXMLUnitConverter::convertBool(sBuffer, ((ScDPSaveMember*)aMembers.GetObject(nMember))->GetIsVisible());
250
+ SvXMLUnitConverter::convertBool(sBuffer, i->second->GetIsVisible());
251
rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY, sBuffer.makeStringAndClear());
252
- SvXMLUnitConverter::convertBool(sBuffer, ((ScDPSaveMember*)aMembers.GetObject(nMember))->GetShowDetails());
253
+ SvXMLUnitConverter::convertBool(sBuffer, i->second->GetShowDetails());
254
rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SHOW_DETAILS, sBuffer.makeStringAndClear());
255
SvXMLElementExport aElemDPM(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBER, sal_True, sal_True);
256
rExport.CheckAttrList();