1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef OOX_XLS_PIVOTCACHEBUFFER_HXX
21 #define OOX_XLS_PIVOTCACHEBUFFER_HXX
23 #include <com/sun/star/table/CellAddress.hpp>
24 #include <com/sun/star/table/CellRangeAddress.hpp>
25 #include <com/sun/star/util/DateTime.hpp>
26 #include "oox/helper/containerhelper.hxx"
27 #include "oox/helper/refvector.hxx"
28 #include "workbookhelper.hxx"
30 namespace com
{ namespace sun
{ namespace star
{
31 namespace sheet
{ class XDataPilotField
; }
34 namespace oox
{ namespace core
{ class Relations
; } }
39 class WorksheetHelper
;
41 // ============================================================================
43 typedef ::std::pair
< sal_Int32
, OUString
> IdCaptionPair
;
44 typedef ::std::vector
< IdCaptionPair
> IdCaptionPairList
;
49 explicit PivotCacheItem();
51 /** Reads the string value from a pivot cache item. */
52 void readString( const AttributeList
& rAttribs
);
53 /** Reads the double value from a pivot cache item. */
54 void readNumeric( const AttributeList
& rAttribs
);
55 /** Reads the date/time value from a pivot cache item. */
56 void readDate( const AttributeList
& rAttribs
);
57 /** Reads the boolean value from a pivot cache item. */
58 void readBool( const AttributeList
& rAttribs
);
59 /** Reads the error code value from a pivot cache item. */
60 void readError( const AttributeList
& rAttribs
, const UnitConverter
& rUnitConverter
);
61 /** Reads the index of a shared item. */
62 void readIndex( const AttributeList
& rAttribs
);
64 /** Reads the string value from a pivot cache item. */
65 void readString( SequenceInputStream
& rStrm
);
66 /** Reads the double value from a pivot cache item. */
67 void readDouble( SequenceInputStream
& rStrm
);
68 /** Reads the date/time value from a pivot cache item. */
69 void readDate( SequenceInputStream
& rStrm
);
70 /** Reads the boolean value from a pivot cache item. */
71 void readBool( SequenceInputStream
& rStrm
);
72 /** Reads the error code value from a pivot cache item. */
73 void readError( SequenceInputStream
& rStrm
);
74 /** Reads the index of a shared item. */
75 void readIndex( SequenceInputStream
& rStrm
);
77 /** Reads the string value from a pivot cache item. */
78 void readString( BiffInputStream
& rStrm
, const WorkbookHelper
& rHelper
);
79 /** Reads the double value from a pivot cache item. */
80 void readDouble( BiffInputStream
& rStrm
);
81 /** Reads the integer value from a pivot cache item. */
82 void readInteger( BiffInputStream
& rStrm
);
83 /** Reads the date/time value from a pivot cache item. */
84 void readDate( BiffInputStream
& rStrm
);
85 /** Reads the boolean value from a pivot cache item. */
86 void readBool( BiffInputStream
& rStrm
);
87 /** Reads the error code value from a pivot cache item. */
88 void readError( BiffInputStream
& rStrm
);
90 /** Returns the type of the item. */
91 inline sal_Int32
getType() const { return mnType
; }
92 /** Returns the value of the item. */
93 inline const ::com::sun::star::uno::Any
& getValue() const { return maValue
; }
94 /** Returns the string representation of the item. */
95 OUString
getName() const;
96 /** Returns true if the item is unused. */
97 inline bool isUnused() const { return mbUnused
; }
100 friend class PivotCacheItemList
;
101 // #FIXME hack Sets the value of this item to the given string ( and overwrites type if necessary
102 void setStringValue( const OUString
& sName
);
103 ::com::sun::star::uno::Any maValue
; /// Value of the item.
104 sal_Int32 mnType
; /// Value type (OOXML token identifier).
108 // ----------------------------------------------------------------------------
110 class PivotCacheItemList
: public WorkbookHelper
113 explicit PivotCacheItemList( const WorkbookHelper
& rHelper
);
115 /** Imports the item from the passed attribute list. */
116 void importItem( sal_Int32 nElement
, const AttributeList
& rAttribs
);
117 /** Imports the item from the passed stream and record. */
118 void importItem( sal_Int32 nRecId
, SequenceInputStream
& rStrm
);
119 /** Imports a complete item list from the passed stream. */
120 void importItemList( BiffInputStream
& rStrm
, sal_uInt16 nCount
);
122 /** Returns true, if this item list is empty. */
123 inline bool empty() const { return maItems
.empty(); }
124 /** Returns the size of the item list. */
125 inline size_t size() const { return maItems
.size(); }
127 /** Returns the specified item. */
128 const PivotCacheItem
* getCacheItem( sal_Int32 nItemIdx
) const;
129 /** Returns the names of all items. */
130 void getCacheItemNames( ::std::vector
< OUString
>& orItemNames
) const;
131 void applyItemCaptions( const IdCaptionPairList
& vCaptions
);
134 /** Creates and returns a new item at the end of the items list. */
135 PivotCacheItem
& createItem();
136 /** Imports an array of items from the PCITEM_ARRAY record */
137 void importArray( SequenceInputStream
& rStrm
);
140 typedef ::std::vector
< PivotCacheItem
> CacheItemVector
;
141 CacheItemVector maItems
; /// All items of this list.
144 // ============================================================================
148 OUString maName
; /// Fixed name of the cache field.
149 OUString maCaption
; /// Caption of the ccahe field.
150 OUString maPropertyName
; /// OLAP property name.
151 OUString maFormula
; /// Formula of a calculated field.
152 sal_Int32 mnNumFmtId
; /// Number format for all items.
153 sal_Int32 mnSqlType
; /// Data type from ODBC data source.
154 sal_Int32 mnHierarchy
; /// Hierarchy this field is part of.
155 sal_Int32 mnLevel
; /// Hierarchy level this field is part of.
156 sal_Int32 mnMappingCount
; /// Number of property mappings.
157 bool mbDatabaseField
; /// True = field from source data; false = calculated field.
158 bool mbServerField
; /// True = ODBC server-based page field.
159 bool mbUniqueList
; /// True = list of unique ODBC items exists.
160 bool mbMemberPropField
; /// True = contains OLAP member properties.
162 explicit PCFieldModel();
165 // ----------------------------------------------------------------------------
167 struct PCSharedItemsModel
169 bool mbHasSemiMixed
; /// True = has (blank|string|bool|error) item(s), maybe other types.
170 bool mbHasNonDate
; /// True = has non-date item(s), maybe date items.
171 bool mbHasDate
; /// True = has date item(s), maybe other types.
172 bool mbHasString
; /// True = has (string|bool|error) item(s), maybe other types.
173 bool mbHasBlank
; /// True = has blank item(s), maybe other types.
174 bool mbHasMixed
; /// True = has [(string|bool|error) and (number|date)] or (number and date).
175 bool mbIsNumeric
; /// True = has numeric item(s), maybe other types except date.
176 bool mbIsInteger
; /// True = has numeric item(s) with only integers, maybe other types except date.
177 bool mbHasLongText
; /// True = contains strings with >255 charascters.
178 bool mbHasLongIndexes
; /// True = indexes to shared items are 16-bit (BIFF only).
180 explicit PCSharedItemsModel();
183 // ----------------------------------------------------------------------------
185 struct PCFieldGroupModel
187 ::com::sun::star::util::DateTime maStartDate
; /// Manual or calculated start date for range grouping.
188 ::com::sun::star::util::DateTime maEndDate
; /// Manual or calculated end date for range grouping.
189 double mfStartValue
; /// Manual or calculated start value for range grouping.
190 double mfEndValue
; /// Manual or calculated end value for range grouping.
191 double mfInterval
; /// Interval for numeric range grouping.
192 sal_Int32 mnParentField
; /// Index of cache field that contains item groups based on this field.
193 sal_Int32 mnBaseField
; /// Index of cache field this grouped field is based on.
194 sal_Int32 mnGroupBy
; /// Type of numeric or date range grouping.
195 bool mbRangeGroup
; /// True = items are grouped by numeric ranges or date ranges.
196 bool mbDateGroup
; /// True = items are grouped by date ranges or by item names.
197 bool mbAutoStart
; /// True = start value for range groups is calculated from source data.
198 bool mbAutoEnd
; /// True = end value for range groups is calculated from source data.
200 explicit PCFieldGroupModel();
202 /** Sets the group-by value for BIFF import. */
203 void setBiffGroupBy( sal_uInt8 nGroupBy
);
206 // ----------------------------------------------------------------------------
208 /** Helper struct for mapping original item names from/to group item names. */
209 struct PivotCacheGroupItem
212 OUString maGroupName
;
214 inline explicit PivotCacheGroupItem( const OUString
& rItemName
) :
215 maOrigName( rItemName
), maGroupName( rItemName
) {}
218 typedef ::std::vector
< PivotCacheGroupItem
> PivotCacheGroupItemVector
;
220 // ----------------------------------------------------------------------------
222 class PivotCacheField
: public WorkbookHelper
225 explicit PivotCacheField( const WorkbookHelper
& rHelper
, bool bIsDatabaseField
);
227 /** Imports pivot cache field settings from the cacheField element. */
228 void importCacheField( const AttributeList
& rAttribs
);
229 /** Imports shared items settings from the sharedItems element. */
230 void importSharedItems( const AttributeList
& rAttribs
);
231 /** Imports a shared item from the passed element. */
232 void importSharedItem( sal_Int32 nElement
, const AttributeList
& rAttribs
);
233 /** Imports grouping settings from the fieldGroup element. */
234 void importFieldGroup( const AttributeList
& rAttribs
);
235 /** Imports numeric grouping settings from the rangePr element. */
236 void importRangePr( const AttributeList
& rAttribs
);
237 /** Imports an item of the mapping between group items and base items from the passed element. */
238 void importDiscretePrItem( sal_Int32 nElement
, const AttributeList
& rAttribs
);
239 /** Imports a group item from the passed element. */
240 void importGroupItem( sal_Int32 nElement
, const AttributeList
& rAttribs
);
242 /** Imports pivot cache field settings from the PCDFIELD record. */
243 void importPCDField( SequenceInputStream
& rStrm
);
244 /** Imports shared items settings from the PCDFSHAREDITEMS record. */
245 void importPCDFSharedItems( SequenceInputStream
& rStrm
);
246 /** Imports one or more shared items from the passed record. */
247 void importPCDFSharedItem( sal_Int32 nRecId
, SequenceInputStream
& rStrm
);
248 /** Imports grouping settings from the PCDFIELDGROUP record. */
249 void importPCDFieldGroup( SequenceInputStream
& rStrm
);
250 /** Imports numeric grouping settings from the PCDFRANGEPR record. */
251 void importPCDFRangePr( SequenceInputStream
& rStrm
);
252 /** Imports an item of the mapping between group items and base items from the passed record. */
253 void importPCDFDiscretePrItem( sal_Int32 nRecId
, SequenceInputStream
& rStrm
);
254 /** Imports one or more group items from the passed record. */
255 void importPCDFGroupItem( sal_Int32 nRecId
, SequenceInputStream
& rStrm
);
257 /** Imports pivot cache field settings from the PCDFIELD record. */
258 void importPCDField( BiffInputStream
& rStrm
);
259 /** Imports numeric grouping settings from the PCDFRANGEPR record. */
260 void importPCDFRangePr( BiffInputStream
& rStrm
);
261 /** Imports the mapping between group items and base items from the PCDFDISCRETEPR record. */
262 void importPCDFDiscretePr( BiffInputStream
& rStrm
);
263 /** Apply user Captions to imported group data */
264 void applyItemCaptions( const IdCaptionPairList
& vCaptions
);
266 /** Returns true, if the field is based on source data, or false if it is grouped or calculated. */
267 inline bool isDatabaseField() const { return maFieldModel
.mbDatabaseField
; }
269 /** Returns true, if the field contains a list of shared items. */
270 inline bool hasSharedItems() const { return !maSharedItems
.empty(); }
271 /** Returns true, if the field contains a list of grouping items. */
272 inline bool hasGroupItems() const { return !maGroupItems
.empty(); }
273 /** Returns true, if the field has inplace numeric grouping settings. */
274 inline bool hasNumericGrouping() const { return maFieldGroupModel
.mbRangeGroup
&& !maFieldGroupModel
.mbDateGroup
; }
275 /** Returns true, if the field has inplace date grouping settings. */
276 inline bool hasDateGrouping() const { return maFieldGroupModel
.mbRangeGroup
&& maFieldGroupModel
.mbDateGroup
; }
277 /** Returns true, if the field has a parent group field that groups the items of this field. */
278 inline bool hasParentGrouping() const { return maFieldGroupModel
.mnParentField
>= 0; }
280 /** Returns the name of the cache field. */
281 inline const OUString
& getName() const { return maFieldModel
.maName
; }
282 /** Returns the index of the parent group field that groups the items of this field. */
283 inline sal_Int32
getParentGroupField() const { return maFieldGroupModel
.mnParentField
; }
284 /** Returns the index of the base field grouping is based on. */
285 inline sal_Int32
getGroupBaseField() const { return maFieldGroupModel
.mnBaseField
; }
287 /** Returns the shared or group item with the specified index. */
288 const PivotCacheItem
* getCacheItem( sal_Int32 nItemIdx
) const;
289 /** Returns the names of all shared or group items. */
290 void getCacheItemNames( ::std::vector
< OUString
>& orItemNames
) const;
291 /** Returns shared or group items. */
292 PivotCacheItemList
getCacheItems() const;
294 /** Creates inplace numeric grouping settings. */
295 void convertNumericGrouping(
296 const ::com::sun::star::uno::Reference
< ::com::sun::star::sheet::XDataPilotField
>& rxDPField
) const;
297 /** Creates inplace date grouping settings or a new date group field. */
298 OUString
createDateGroupField(
299 const ::com::sun::star::uno::Reference
< ::com::sun::star::sheet::XDataPilotField
>& rxBaseDPField
) const;
300 /** Creates a new grouped DataPilot field and returns its name. */
301 OUString
createParentGroupField(
302 const ::com::sun::star::uno::Reference
< ::com::sun::star::sheet::XDataPilotField
>& rxBaseDPField
,
303 const PivotCacheField
& rBaseCacheField
,
304 PivotCacheGroupItemVector
& orItemNames
) const;
306 /** Writes the title of the field into the passed sheet at the passed address. */
307 void writeSourceHeaderCell( WorksheetHelper
& rSheetHelper
,
308 sal_Int32 nCol
, sal_Int32 nRow
) const;
309 /** Writes a source field item value into the passed sheet. */
310 void writeSourceDataCell( WorksheetHelper
& rSheetHelper
,
311 sal_Int32 nCol
, sal_Int32 nRow
,
312 const PivotCacheItem
& rItem
) const;
314 /** Reads an item from the PCRECORD record and writes it to the passed sheet. */
315 void importPCRecordItem( SequenceInputStream
& rStrm
,
316 WorksheetHelper
& rSheetHelper
, sal_Int32 nCol
, sal_Int32 nRow
) const;
317 /** Reads an item index from the PCITEM_INDEXLIST record and writes the item to the passed sheet. */
318 void importPCItemIndex( BiffInputStream
& rStrm
,
319 WorksheetHelper
& rSheetHelper
, sal_Int32 nCol
, sal_Int32 nRow
) const;
322 /** Tries to write the passed value to the passed sheet position. */
323 void writeItemToSourceDataCell( WorksheetHelper
& rSheetHelper
,
324 sal_Int32 nCol
, sal_Int32 nRow
, const PivotCacheItem
& rItem
) const;
325 /** Tries to write the value of a shared item to the passed sheet position. */
326 void writeSharedItemToSourceDataCell( WorksheetHelper
& rSheetHelper
,
327 sal_Int32 nCol
, sal_Int32 nRow
, sal_Int32 nItemIdx
) const;
330 typedef ::std::vector
< sal_Int32
> IndexVector
;
332 PivotCacheItemList maSharedItems
; /// All shared items of this field.
333 PivotCacheItemList maGroupItems
; /// All group items of this field.
334 IndexVector maDiscreteItems
; /// Mapping between group and base items.
335 PCFieldModel maFieldModel
; /// Settings for this cache field.
336 PCSharedItemsModel maSharedItemsModel
; /// Settings for shared items.
337 PCFieldGroupModel maFieldGroupModel
; /// Settings for item grouping.
340 // ============================================================================
342 struct PCDefinitionModel
344 OUString maRelId
; /// Relation identifier for cache records fragment.
345 OUString maRefreshedBy
; /// Name of user who last refreshed the cache.
346 double mfRefreshedDate
; /// Date/time of last refresh.
347 sal_Int32 mnRecords
; /// Number of data records in the cache.
348 sal_Int32 mnMissItemsLimit
; /// Limit for discarding unused items.
349 sal_uInt16 mnDatabaseFields
; /// Number of database (source data) fields (BIFF only).
350 bool mbInvalid
; /// True = cache needs refresh.
351 bool mbSaveData
; /// True = cached item values are present.
352 bool mbRefreshOnLoad
; /// True = try to refresh cache on load.
353 bool mbOptimizeMemory
; /// True = application may optimize memory usage.
354 bool mbEnableRefresh
; /// True = refreshing cache is enabled in UI.
355 bool mbBackgroundQuery
; /// True = application queries data asynchonously.
356 bool mbUpgradeOnRefresh
; /// True = application may upgrade cache version.
357 bool mbTupleCache
; /// True = cache stores OLAP functions.
358 bool mbSupportSubquery
; /// True = data source supports subqueries.
359 bool mbSupportDrill
; /// True = data source supports drilldown.
361 explicit PCDefinitionModel();
364 // ----------------------------------------------------------------------------
368 sal_Int32 mnSourceType
; /// Type of the source data (sheet, consolidation, scenario, external).
369 sal_Int32 mnConnectionId
; /// Connection identifier for external data source.
371 explicit PCSourceModel();
374 // ----------------------------------------------------------------------------
376 struct PCWorksheetSourceModel
378 OUString maRelId
; /// Relation identifier for an external document URL.
379 OUString maSheet
; /// Sheet name for cell range or sheet-local defined names.
380 OUString maDefName
; /// Defined name containing a cell range if present.
381 ::com::sun::star::table::CellRangeAddress
382 maRange
; /// Source cell range of the data.
384 explicit PCWorksheetSourceModel();
387 // ----------------------------------------------------------------------------
389 class PivotCache
: public WorkbookHelper
392 explicit PivotCache( const WorkbookHelper
& rHelper
);
394 /** Reads pivot cache global settings from the pivotCacheDefinition element. */
395 void importPivotCacheDefinition( const AttributeList
& rAttribs
);
396 /** Reads cache source settings from the cacheSource element. */
397 void importCacheSource( const AttributeList
& rAttribs
);
398 /** Reads sheet source settings from the worksheetSource element. */
399 void importWorksheetSource( const AttributeList
& rAttribs
, const ::oox::core::Relations
& rRelations
);
401 /** Reads pivot cache global settings from the PCDEFINITION record. */
402 void importPCDefinition( SequenceInputStream
& rStrm
);
403 /** Reads cache source settings from the PCDSOURCE record. */
404 void importPCDSource( SequenceInputStream
& rStrm
);
405 /** Reads sheet source settings from the PCDSHEETSOURCE record. */
406 void importPCDSheetSource( SequenceInputStream
& rStrm
, const ::oox::core::Relations
& rRelations
);
408 /** Reads pivot cache global settings from the PCDEFINITION record. */
409 void importPCDefinition( BiffInputStream
& rStrm
);
411 /** Creates and returns a new pivot cache field. */
412 PivotCacheField
& createCacheField( bool bInitDatabaseField
= false );
413 /** Checks validity of source data and creates a dummy data sheet for external sheet sources. */
414 void finalizeImport();
416 /** Returns true, if the pivot cache is based on a valid data source, so
417 that pivot tables can be created based on this pivot cache. */
418 inline bool isValidDataSource() const { return mbValidSource
; }
419 /** Returns true, if the pivot cache is based on a dummy sheet created in finalizeImport. */
420 inline bool isBasedOnDummySheet() const { return mbDummySheet
; }
421 /** Returns the internal cell range the cache is based on. */
422 inline const ::com::sun::star::table::CellRangeAddress
&
423 getSourceRange() const { return maSheetSrcModel
.maRange
; }
424 /** Returns the relation identifier of the pivot cache records fragment. */
425 inline const OUString
& getRecordsRelId() const { return maDefModel
.maRelId
; }
427 /** Returns the number of pivot cache fields. */
428 sal_Int32
getCacheFieldCount() const;
429 /** Returns the cache field with the specified index. */
430 const PivotCacheField
* getCacheField( sal_Int32 nFieldIdx
) const;
431 /** Returns the source column index of the field with the passed index. */
432 sal_Int32
getCacheDatabaseIndex( sal_Int32 nFieldIdx
) const;
434 /** Writes the titles of all source fields into the passed sheet. */
435 void writeSourceHeaderCells( WorksheetHelper
& rSheetHelper
) const;
436 /** Writes a source field item value into the passed sheet. */
437 void writeSourceDataCell( WorksheetHelper
& rSheetHelper
,
438 sal_Int32 nColIdx
, sal_Int32 nRowIdx
,
439 const PivotCacheItem
& rItem
) const;
441 /** Reads a PCRECORD record and writes all item values to the passed sheet. */
442 void importPCRecord( SequenceInputStream
& rStrm
,
443 WorksheetHelper
& rSheetHelper
, sal_Int32 nRowIdx
) const;
444 /** Reads a PCITEM_INDEXLIST record and writes all item values to the passed sheet. */
445 void importPCItemIndexList( BiffInputStream
& rStrm
,
446 WorksheetHelper
& rSheetHelper
, sal_Int32 nRowIdx
) const;
450 /** Finalizes the pivot cache if it is based on internal sheet data. */
451 void finalizeInternalSheetSource();
452 /** Finalizes the pivot cache if it is based on sheet data of an external spreadsheet document. */
453 void finalizeExternalSheetSource();
454 /** Creates a dummy sheet that will be filled with the pivot cache data. */
455 void prepareSourceDataSheet();
456 /** Checks, if the row index has changed since last call, and initializes the sheet data buffer. */
457 void updateSourceDataRow( WorksheetHelper
& rSheetHelper
, sal_Int32 nRow
) const;
460 typedef RefVector
< PivotCacheField
> PivotCacheFieldVector
;
461 typedef ::std::vector
< sal_Int32
> IndexVector
;
463 PivotCacheFieldVector maFields
; /// All pivot cache fields.
464 PivotCacheFieldVector maDatabaseFields
; /// All cache fields that are based on source data.
465 IndexVector maDatabaseIndexes
; /// Database field index for all fields.
466 PCDefinitionModel maDefModel
; /// Global pivot cache settings.
467 PCSourceModel maSourceModel
; /// Pivot cache source settings.
468 PCWorksheetSourceModel maSheetSrcModel
; /// Sheet source data if cache type is sheet.
469 ValueRangeSet maColSpans
; /// Column spans used by SheetDataBuffer for optimized cell import.
470 OUString maTargetUrl
; /// URL of an external source document.
471 mutable sal_Int32 mnCurrRow
; /// Current row index in dummy sheet.
472 bool mbValidSource
; /// True = pivot cache is based on supported data source.
473 bool mbDummySheet
; /// True = pivot cache is based on a dummy sheet.
476 // ============================================================================
478 class PivotCacheBuffer
: public WorkbookHelper
481 explicit PivotCacheBuffer( const WorkbookHelper
& rHelper
);
483 /** Registers a pivot cache definition fragment. The fragment will be loaded on demand (OOXML/BIFF12 only). */
484 void registerPivotCacheFragment( sal_Int32 nCacheId
, const OUString
& rFragmentPath
);
486 /** Imports and stores a pivot cache definition fragment on first call,
487 returns the imported cache on subsequent calls with the same identifier. */
488 PivotCache
* importPivotCacheFragment( sal_Int32 nCacheId
);
491 /** Creates and returns a new pivot cache object with the passed identifier. */
492 PivotCache
& createPivotCache( sal_Int32 nCacheId
);
495 typedef ::std::map
< sal_Int32
, OUString
> FragmentPathMap
;
496 typedef RefMap
< sal_Int32
, PivotCache
> PivotCacheMap
;
497 typedef ::std::vector
< sal_Int32
> PivotCacheIdVector
;
499 FragmentPathMap maFragmentPaths
;
500 PivotCacheMap maCaches
;
501 PivotCacheIdVector maCacheIds
;
504 // ============================================================================
511 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */