From e8e1873508e13201689c8ef12eb2b83cefd18fe7 Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <[email protected]>
Date: Tue, 24 May 2011 09:21:40 -0430
Subject: [PATCH] Replace List for std::map<sal_uInt32,ByteString>.

---
 filter/inc/filter/msfilter/msdffimp.hxx |    6 ++--
 filter/source/msfilter/msdffimp.cxx     |   57 +++++++++----------------------
 2 files changed, 19 insertions(+), 44 deletions(-)

diff --git a/filter/inc/filter/msfilter/msdffimp.hxx b/filter/inc/filter/msfilter/msdffimp.hxx
index c1a0294..1fee4cb 100644
--- a/filter/inc/filter/msfilter/msdffimp.hxx
+++ b/filter/inc/filter/msfilter/msdffimp.hxx
@@ -503,7 +503,7 @@ protected :
 
     bool ReadGraphic( SvStream& rSt, sal_uLong nIndex, Graphic& rGraphic ) const;
     SdrObject* ImportFontWork( SvStream&, SfxItemSet&, Rectangle& rBoundRect ) const;
-    SdrObject* ImportGraphic( SvStream&, SfxItemSet&, const DffObjData& ) const;
+    SdrObject* ImportGraphic( SvStream&, SfxItemSet&, const DffObjData& );
     // #i32596# - pass <nCalledByGroup> to method
     // Needed in the Writer Microsoft Word import to avoid import of OLE objects
     // inside groups. Instead a graphic object is created.
@@ -560,7 +560,7 @@ public:
     void*				pSvxMSDffDummy1;
     void*				pSvxMSDffDummy2;
     void*				pSvxMSDffDummy3;
-    List*				pEscherBlipCache;
+    std::map<sal_uInt32,ByteString> aEscherBlipCache;
 
     DffRecordManager	maShapeRecords;
     ColorData			mnDefaultColor;
@@ -650,7 +650,7 @@ public:
 
     Rueckgabewert: sal_True, im Erfolgsfalls, sal_False bei Fehler
 */
-    sal_Bool GetBLIP( sal_uLong nIdx, Graphic& rData, Rectangle* pVisArea = NULL ) const;
+    sal_Bool GetBLIP( sal_uLong nIdx, Graphic& rData, Rectangle* pVisArea = NULL );
 
 /*
     GetBLIPDirect()		-Einlesen eines BLIP aus schon positioniertem Stream
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
index 31c8582..279551b 100644
--- a/filter/source/msfilter/msdffimp.cxx
+++ b/filter/source/msfilter/msdffimp.cxx
@@ -1867,7 +1867,7 @@ void DffPropertyReader::ApplyFillAttributes( SvStream& rIn, SfxItemSet& rSet, co
             {
                 Graphic aGraf;
                 // first try to get BLIP from cache
-                sal_Bool bOK = rManager.GetBLIP( GetPropertyValue( DFF_Prop_fillBlip ), aGraf, NULL );
+                sal_Bool bOK = const_cast<SvxMSDffManager&>(rManager).GetBLIP( GetPropertyValue( DFF_Prop_fillBlip ), aGraf, NULL );
                 // then try directly from stream (i.e. Excel chart hatches/bitmaps)
                 if ( !bOK )
                     bOK = SeekToContent( DFF_Prop_fillBlip, rIn ) && rManager.GetBLIPDirect( rIn, aGraf, NULL );
@@ -3400,16 +3400,6 @@ DffRecordHeader* DffRecordManager::GetRecordHeader( sal_uInt16 nRecId, DffSeekTo
 //  private Methoden
 //---------------------------------------------------------------------------
 
-struct EscherBlipCacheEntry
-{
-    ByteString	aUniqueID;
-    sal_uInt32  nBlip;
-
-    EscherBlipCacheEntry( sal_uInt32 nBlipId, const ByteString& rUniqueID ) :
-        aUniqueID( rUniqueID ),
-        nBlip( nBlipId ) {}
-};
-
 void SvxMSDffManager::Scale( sal_Int32& rVal ) const
 {
     if ( bNeedMap )
@@ -4334,7 +4324,7 @@ static void lcl_ApplyCropping( const DffPropSet& rPropSet, SfxItemSet* pSet, Gra
     }
 }
 
-SdrObject* SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItemSet& rSet, const DffObjData& rObjData ) const
+SdrObject* SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItemSet& rSet, const DffObjData& rObjData )
 {
     SdrObject*  pRet = NULL;
     String      aFilename;
@@ -6040,7 +6030,6 @@ SvxMSDffManager::SvxMSDffManager(SvStream& rStCtrl_,
      pStData2( pStData2_ ),
      nSvxMSDffSettings( 0 ),
      nSvxMSDffOLEConvFlags( 0 ),
-     pEscherBlipCache( NULL ),
      mnDefaultColor( mnDefaultColor_),
      mpTracer( pTracer ),
      mbTracing( sal_False )
@@ -6092,7 +6081,6 @@ SvxMSDffManager::SvxMSDffManager( SvStream& rStCtrl_, const String& rBaseURL, MS
      pStData2( 0 ),
      nSvxMSDffSettings( 0 ),
      nSvxMSDffOLEConvFlags( 0 ),
-     pEscherBlipCache( NULL ),
      mnDefaultColor( COL_DEFAULT ),
      mpTracer( pTracer ),
      mbTracing( sal_False )
@@ -6107,13 +6095,6 @@ SvxMSDffManager::SvxMSDffManager( SvStream& rStCtrl_, const String& rBaseURL, MS
 
 SvxMSDffManager::~SvxMSDffManager()
 {
-    if ( pEscherBlipCache )
-    {
-        void* pPtr;
-        for ( pPtr = pEscherBlipCache->First(); pPtr; pPtr = pEscherBlipCache->Next() )
-            delete (EscherBlipCacheEntry*)pPtr;
-        delete pEscherBlipCache;
-    }
     delete pBLIPInfos;
     delete pShapeInfos;
     delete pShapeOrders;
@@ -6716,29 +6697,26 @@ sal_Bool SvxMSDffManager::GetShape(sal_uLong nId, SdrObject*&         rpShape,
 /*      Zugriff auf ein BLIP zur Laufzeit (bei bereits bekannter Blip-Nr)
     ---------------------------------
 ******************************************************************************/
-sal_Bool SvxMSDffManager::GetBLIP( sal_uLong nIdx_, Graphic& rData, Rectangle* pVisArea ) const
+sal_Bool SvxMSDffManager::GetBLIP( sal_uLong nIdx_, Graphic& rData, Rectangle* pVisArea )
 {
     sal_Bool bOk = sal_False;       // Ergebnisvariable initialisieren
     if ( pStData )
     {
         // check if a graphic for this blipId is already imported
-        if ( nIdx_ && pEscherBlipCache )
+        if ( nIdx_)
         {
-            EscherBlipCacheEntry* pEntry;
-            for ( pEntry = (EscherBlipCacheEntry*)pEscherBlipCache->First(); pEntry;
-                    pEntry = (EscherBlipCacheEntry*)pEscherBlipCache->Next() )
+            std::map<sal_uInt32,ByteString>::iterator iter = aEscherBlipCache.find(nIdx_);
+
+            if (iter != aEscherBlipCache.end())
             {
-                if ( pEntry->nBlip == nIdx_ )
-                {	/* if this entry is available, then it should be possible
-                    to get the Graphic via GraphicObject */
-                    GraphicObject aGraphicObject( pEntry->aUniqueID );
-                    rData = aGraphicObject.GetGraphic();
-                    if ( rData.GetType() != GRAPHIC_NONE )
-                        bOk = sal_True;
-                    else
-                        delete (EscherBlipCacheEntry*)pEscherBlipCache->Remove();
-                    break;
-                }
+                /* if this entry is available, then it should be possible
+                to get the Graphic via GraphicObject */
+                GraphicObject aGraphicObject( iter->second );
+                rData = aGraphicObject.GetGraphic();
+                if ( rData.GetType() != GRAPHIC_NONE )
+                    bOk = sal_True;
+                else
+                    aEscherBlipCache.erase(iter);
             }
         }
         if ( !bOk )
@@ -6793,10 +6771,7 @@ sal_Bool SvxMSDffManager::GetBLIP( sal_uLong nIdx_, Graphic& rData, Rectangle* p
             {
                 // create new BlipCacheEntry for this graphic
                 GraphicObject aGraphicObject( rData );
-                if ( !pEscherBlipCache )
-                    const_cast <SvxMSDffManager*> (this)->pEscherBlipCache = new List();
-                EscherBlipCacheEntry* pNewEntry = new EscherBlipCacheEntry( nIdx_, aGraphicObject.GetUniqueID() );
-                pEscherBlipCache->Insert( pNewEntry, LIST_APPEND );
+                aEscherBlipCache.insert(std::make_pair(nIdx_,aGraphicObject.GetUniqueID()));
             }
         }
     }
-- 
1.7.3.4

From a00a6d3c14323d9afa532cc2f44e1127ce56e758 Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <[email protected]>
Date: Tue, 24 May 2011 09:22:21 -0430
Subject: [PATCH] Replace List for std::map<sal_uInt32,ByteString>.

---
 sw/source/filter/ww8/ww8par.cxx |   12 ++++++------
 sw/source/filter/ww8/ww8par.hxx |    2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 2d5eca7..be2c2b0 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -340,7 +340,7 @@ SwMSDffManager::SwMSDffManager( SwWW8ImplReader& rRdr )
     : SvxMSDffManager(*rRdr.pTableStream, rRdr.GetBaseURL(), rRdr.pWwFib->fcDggInfo,
         rRdr.pDataStream, 0, 0, COL_WHITE, 12, rRdr.pStrm,
         rRdr.maTracer.GetTrace()),
-    rReader(rRdr), pFallbackStream(0), pOldEscherBlipCache(0)
+    rReader(rRdr), pFallbackStream(0)
 {
     SetSvxMSDffSettings( GetSvxMSDffSettings() );
     nSvxMSDffOLEConvFlags = SwMSDffManager::GetFilterFlags();
@@ -413,19 +413,19 @@ SdrObject* SwMSDffManager::ImportOLE( long nOLEId,
 
 void SwMSDffManager::DisableFallbackStream()
 {
-    OSL_ENSURE(!pFallbackStream || !pOldEscherBlipCache,
+    OSL_ENSURE(!pFallbackStream,
         "if you're recursive, you're broken");
     pFallbackStream = pStData2;
-    pOldEscherBlipCache = pEscherBlipCache;
-    pEscherBlipCache = 0;
+    aOldEscherBlipCache = aEscherBlipCache;
+    aEscherBlipCache.clear();
     pStData2 = 0;
 }
 
 void SwMSDffManager::EnableFallbackStream()
 {
     pStData2 = pFallbackStream;
-    pEscherBlipCache = pOldEscherBlipCache;
-    pOldEscherBlipCache = 0;
+    aEscherBlipCache = aOldEscherBlipCache;
+    aOldEscherBlipCache.clear();
     pFallbackStream = 0;
 }
 
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index 0ab33fc..96c8d37 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -559,7 +559,7 @@ class SwMSDffManager : public SvxMSDffManager
 private:
     SwWW8ImplReader& rReader;
     SvStream *pFallbackStream;
-    List *pOldEscherBlipCache;
+    std::map<sal_uInt32,ByteString> aOldEscherBlipCache;
 
     virtual sal_Bool GetOLEStorageName( long nOLEId, String& rStorageName,
         SvStorageRef& rSrcStorage, com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& rDestStorage ) const;
-- 
1.7.3.4

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to