[Libreoffice-commits] .: cui/source sc/source sfx2/source svl/inc svl/source svtools/inc svtools/source svx/source sw/source

Tor Lillqvist tml at kemper.freedesktop.org
Thu Mar 8 06:08:32 PST 2012


 cui/source/inc/macroass.hxx        |    2 
 cui/source/tabpages/macroass.cxx   |    7 --
 sc/source/ui/drawfunc/drawsh.cxx   |    4 -
 sfx2/source/bastyp/sfxhtml.cxx     |    9 +-
 svl/inc/svl/macitem.hxx            |   44 ++++++++----
 svl/source/items/macitem.cxx       |  126 ++++++++++++++++++++-----------------
 svtools/inc/svtools/imapobj.hxx    |    4 -
 svtools/source/svhtml/htmlout.cxx  |    2 
 svtools/source/uno/unoevent.cxx    |    5 -
 svx/source/items/hlnkitem.cxx      |   63 ++++++------------
 sw/source/core/txtnode/fmtatr2.cxx |   29 +-------
 sw/source/filter/html/htmlatr.cxx  |    2 
 sw/source/filter/html/htmlbas.cxx  |    7 +-
 sw/source/filter/html/htmlfly.cxx  |    6 -
 sw/source/filter/html/htmlform.cxx |   24 ++-----
 sw/source/filter/html/htmlgrin.cxx |    7 --
 sw/source/ui/chrdlg/chardlg.cxx    |    2 
 sw/source/ui/dochdl/gloshdl.cxx    |    4 -
 sw/source/ui/shells/textfld.cxx    |    2 
 sw/source/ui/uno/unoatxt.cxx       |    3 
 20 files changed, 166 insertions(+), 186 deletions(-)

New commits:
commit 4b4fb33c606fd068e024669efcbd7ad2aefdaacd
Author: Noel Grandin <noel at peralex.com>
Date:   Thu Mar 8 15:53:57 2012 +0200

    Convert from tools/table.hxx to std::map in SvxMacroTableDtor
    
    In this case, we also convert from storing pointers to storing
    the items directly because SvxMacroTableDtor completely controls
    the lifecycle of the SvxMacro objects it contains.
    
    Also add an operator== to SvxMacroTableDtor and remove the out-of-line
    implementations of equals from two other places.

diff --git a/cui/source/inc/macroass.hxx b/cui/source/inc/macroass.hxx
index 849ac45..bca7bf4 100644
--- a/cui/source/inc/macroass.hxx
+++ b/cui/source/inc/macroass.hxx
@@ -100,7 +100,7 @@ inline void _SfxMacroTabPage::SetMacroTbl( const SvxMacroTableDtor& rTbl )
 
 inline void _SfxMacroTabPage::ClearMacroTbl()
 {
-    aTbl.DelDtor();
+    aTbl.clear();
 }
 
 class SfxMacroTabPage : public _SfxMacroTabPage
diff --git a/cui/source/tabpages/macroass.cxx b/cui/source/tabpages/macroass.cxx
index 3128df1..62f38c2 100644
--- a/cui/source/tabpages/macroass.cxx
+++ b/cui/source/tabpages/macroass.cxx
@@ -329,8 +329,7 @@ IMPL_STATIC_LINK( _SfxMacroTabPage, AssignDeleteHdl_Impl, PushButton*, pBtn )
 
     // aus der Tabelle entfernen
     sal_uInt16 nEvent = (sal_uInt16)(sal_uLong)pE->GetUserData();
-    SvxMacro *pRemoveMacro = pThis->aTbl.Remove( nEvent );
-    delete pRemoveMacro;
+    pThis->aTbl.Erase( nEvent );
 
     String sScriptURI;
     if( bAssEnabled )
@@ -339,13 +338,13 @@ IMPL_STATIC_LINK( _SfxMacroTabPage, AssignDeleteHdl_Impl, PushButton*, pBtn )
         if( sScriptURI.CompareToAscii( "vnd.sun.star.script:", 20 ) == COMPARE_EQUAL )
         {
             pThis->aTbl.Insert(
-                nEvent, new SvxMacro( sScriptURI, String::CreateFromAscii( SVX_MACRO_LANGUAGE_SF ) ) );
+                nEvent, SvxMacro( sScriptURI, String::CreateFromAscii( SVX_MACRO_LANGUAGE_SF ) ) );
         }
         else
         {
             OSL_ENSURE( false, "_SfxMacroTabPage::AssignDeleteHdl_Impl: this branch is *not* dead? (out of interest: tell fs, please!)" );
             pThis->aTbl.Insert(
-                nEvent, new SvxMacro( sScriptURI, String::CreateFromAscii( SVX_MACRO_LANGUAGE_STARBASIC ) ) );
+                nEvent, SvxMacro( sScriptURI, String::CreateFromAscii( SVX_MACRO_LANGUAGE_STARBASIC ) ) );
         }
     }
 
diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx
index 61d20f1..1ab7def 100644
--- a/sc/source/ui/drawfunc/drawsh.cxx
+++ b/sc/source/ui/drawfunc/drawsh.cxx
@@ -309,7 +309,7 @@ void ScDrawShell::ExecuteMacroAssign( SdrObject* pObj, Window* pWin )
     {
         SvxMacroTableDtor aTab;
         rtl::OUString sMacro = pInfo->GetMacro();
-        aTab.Insert(SFX_EVENT_MOUSECLICK_OBJECT, new SvxMacro(sMacro, rtl::OUString()));
+        aTab.Insert(SFX_EVENT_MOUSECLICK_OBJECT, SvxMacro(sMacro, rtl::OUString()));
         aItem.SetMacroTable( aTab );
     }
 
@@ -334,7 +334,7 @@ void ScDrawShell::ExecuteMacroAssign( SdrObject* pObj, Window* pWin )
         if( SFX_ITEM_SET == pOutSet->GetItemState( SID_ATTR_MACROITEM, false, &pItem ))
         {
             rtl::OUString sMacro;
-            SvxMacro* pMacro = ((SvxMacroItem*)pItem)->GetMacroTable().Get( SFX_EVENT_MOUSECLICK_OBJECT );
+            const SvxMacro* pMacro = ((SvxMacroItem*)pItem)->GetMacroTable().Get( SFX_EVENT_MOUSECLICK_OBJECT );
             if ( pMacro )
                 sMacro = pMacro->GetMacName();
 
diff --git a/sfx2/source/bastyp/sfxhtml.cxx b/sfx2/source/bastyp/sfxhtml.cxx
index 2f3a7ad..6a3fee6 100644
--- a/sfx2/source/bastyp/sfxhtml.cxx
+++ b/sfx2/source/bastyp/sfxhtml.cxx
@@ -177,8 +177,7 @@ IMAPOBJ_SETEVENT:
                 if( sTmp.Len() )
                 {
                     sTmp = convertLineEnd(sTmp, GetSystemLineEnd());
-                    aMacroTbl.Insert( nEvent,
-                        new SvxMacro( sTmp, sEmpty, eScrpType ));
+                    aMacroTbl.Insert( nEvent, SvxMacro( sTmp, sEmpty, eScrpType ));
                 }
             }
             break;
@@ -198,7 +197,7 @@ IMAPOBJ_SETEVENT:
                             aCoords[2], aCoords[3] );
             IMapRectangleObject aMapRObj( aRec, aHRef, aAlt, String(), aTarget, aName,
                                           !bNoHRef );
-            if( aMacroTbl.Count() )
+            if( !aMacroTbl.empty() )
                 aMapRObj.SetMacroTable( aMacroTbl );
             pImageMap->InsertIMapObject( aMapRObj );
         }
@@ -209,7 +208,7 @@ IMAPOBJ_SETEVENT:
             Point aPoint( aCoords[0], aCoords[1] );
             IMapCircleObject aMapCObj( aPoint, aCoords[2],aHRef, aAlt, String(),
                                        aTarget, aName, !bNoHRef );
-            if( aMacroTbl.Count() )
+            if( !aMacroTbl.empty() )
                 aMapCObj.SetMacroTable( aMacroTbl );
             pImageMap->InsertIMapObject( aMapCObj );
         }
@@ -223,7 +222,7 @@ IMAPOBJ_SETEVENT:
                 aPoly[i] = Point( aCoords[2*i], aCoords[2*i+1] );
             IMapPolygonObject aMapPObj( aPoly, aHRef, aAlt, String(), aTarget, aName,
                                         !bNoHRef );
-            if( aMacroTbl.Count() )
+            if( !aMacroTbl.empty() )
                 aMapPObj.SetMacroTable( aMacroTbl );
             pImageMap->InsertIMapObject( aMapPObj );
         }
diff --git a/svl/inc/svl/macitem.hxx b/svl/inc/svl/macitem.hxx
index 7261316..95bd745 100644
--- a/svl/inc/svl/macitem.hxx
+++ b/svl/inc/svl/macitem.hxx
@@ -35,8 +35,7 @@
 #include <tools/rtti.hxx>
 #include <tools/debug.hxx>
 #include <tools/string.hxx>
-
-#include <tools/table.hxx>
+#include <map>
 
 class SvStream;
 
@@ -114,34 +113,51 @@ inline SvxMacro::SvxMacro( SjJSbxObjectBase* _pFunctionObject, const ::rtl::OUSt
 
 //Macro Table, zerstoert die Pointer im DTor!
 
-DECLARE_TABLE( _SvxMacroTableDtor, SvxMacro* )
+typedef std::map<sal_uInt16, SvxMacro> SvxMacroTable;
 
 #define SVX_MACROTBL_VERSION31  0
 #define SVX_MACROTBL_VERSION40  1
 
 #define SVX_MACROTBL_AKTVERSION SVX_MACROTBL_VERSION40
 
-class SVL_DLLPUBLIC SvxMacroTableDtor : public _SvxMacroTableDtor
+class SVL_DLLPUBLIC SvxMacroTableDtor
 {
+private:
+    SvxMacroTable aSvxMacroTable;
 public:
-    inline SvxMacroTableDtor( const sal_uInt16 nInitSz = 0, const sal_uInt16 nReSz = 1 );
-    inline SvxMacroTableDtor( const SvxMacroTableDtor &rCpy ) : _SvxMacroTableDtor() { *this = rCpy; }
-    inline ~SvxMacroTableDtor() { DelDtor(); }
+    inline SvxMacroTableDtor() {}
+    inline SvxMacroTableDtor( const SvxMacroTableDtor &rCpy ) : aSvxMacroTable(rCpy.aSvxMacroTable) { }
+
     SvxMacroTableDtor& operator=( const SvxMacroTableDtor &rCpy );
+    int operator==( const SvxMacroTableDtor& rOther ) const;
 
     // loescht alle Eintraege
-    void DelDtor();
+    void clear() { aSvxMacroTable.clear(); }
 
     SvStream&   Read( SvStream &, sal_uInt16 nVersion = SVX_MACROTBL_AKTVERSION );
     SvStream&   Write( SvStream & ) const;
 
     sal_uInt16 GetVersion() const       { return SVX_MACROTBL_AKTVERSION; }
+
+    SvxMacroTable::iterator begin() { return aSvxMacroTable.begin(); }
+    SvxMacroTable::const_iterator begin() const { return aSvxMacroTable.begin(); }
+    SvxMacroTable::iterator end() { return aSvxMacroTable.end(); }
+    SvxMacroTable::const_iterator end () const { return aSvxMacroTable.end(); }
+    SvxMacroTable::size_type size() const { return aSvxMacroTable.size(); }
+    bool empty() const { return aSvxMacroTable.empty(); }
+
+    // returns NULL if no entry exists, or a pointer to the internal value
+    const SvxMacro* Get(sal_uInt16 nEvent) const;
+    // returns NULL if no entry exists, or a pointer to the internal value
+    SvxMacro* Get(sal_uInt16 nEvent);
+    // return true if the key exists
+    bool IsKeyValid(sal_uInt16 nEvent) const;
+    // This stores a copy of the rMacro parameter
+    SvxMacro& Insert(sal_uInt16 nEvent, const SvxMacro& rMacro);
+    // If the entry exists, remove it from the map and release it's storage
+    sal_Bool Erase(sal_uInt16 nEvent);
 };
 
-inline SvxMacroTableDtor::SvxMacroTableDtor( const sal_uInt16 nInitSz,
-                                             const sal_uInt16 nReSz)
-    : _SvxMacroTableDtor( nInitSz, nReSz )
-{}
 
 /*
 [Beschreibung]
@@ -200,9 +216,7 @@ inline const SvxMacro& SvxMacroItem::GetMacro( sal_uInt16 nEvent ) const
 }
 inline sal_Bool SvxMacroItem::DelMacro( sal_uInt16 nEvent )
 {
-    SvxMacro *pMacro = aMacroTable.Remove( nEvent );
-    delete pMacro;
-    return ( pMacro != 0 );
+    return aMacroTable.Erase(nEvent);
 }
 
 #endif
diff --git a/svl/source/items/macitem.cxx b/svl/source/items/macitem.cxx
index 44abf85..c2c4101 100644
--- a/svl/source/items/macitem.cxx
+++ b/svl/source/items/macitem.cxx
@@ -99,20 +99,36 @@ SvxMacro& SvxMacro::operator=( const SvxMacro& rBase )
     return *this;
 }
 
+// -----------------------------------------------------------------------
 
 SvxMacroTableDtor& SvxMacroTableDtor::operator=( const SvxMacroTableDtor& rTbl )
 {
-    DelDtor();
-    SvxMacro* pTmp = ((SvxMacroTableDtor&)rTbl).First();
-    while( pTmp )
-    {
-        SvxMacro *pNew = new SvxMacro( *pTmp );
-        Insert( rTbl.GetCurKey(), pNew );
-        pTmp = ((SvxMacroTableDtor&)rTbl).Next();
-    }
+    aSvxMacroTable.clear();
+    aSvxMacroTable.insert(rTbl.aSvxMacroTable.begin(), rTbl.aSvxMacroTable.end());
     return *this;
 }
 
+int SvxMacroTableDtor::operator==( const SvxMacroTableDtor& rOther ) const
+{
+    // Anzahl unterschiedlich => auf jeden Fall ungleich
+    if ( aSvxMacroTable.size() != rOther.aSvxMacroTable.size() )
+        return sal_False;
+
+    // einzeln verleichen; wegen Performance ist die Reihenfolge wichtig
+    SvxMacroTable::const_iterator it1 = aSvxMacroTable.begin();
+    SvxMacroTable::const_iterator it2 = rOther.aSvxMacroTable.begin();
+    for ( ; it1 != aSvxMacroTable.end(); ++it1, ++it2 )
+    {
+        const SvxMacro& rOwnMac = it1->second;
+        const SvxMacro& rOtherMac = it2->second;
+        if (    it1->first != it2->first ||
+                rOwnMac.GetLibName() != rOtherMac.GetLibName() ||
+                rOwnMac.GetMacName() != rOtherMac.GetMacName() )
+            return sal_False;
+    }
+
+    return sal_True;
+}
 
 SvStream& SvxMacroTableDtor::Read( SvStream& rStrm, sal_uInt16 nVersion )
 {
@@ -132,16 +148,7 @@ SvStream& SvxMacroTableDtor::Read( SvStream& rStrm, sal_uInt16 nVersion )
         if( SVX_MACROTBL_VERSION40 <= nVersion )
             rStrm >> eType;
 
-        SvxMacro* pNew = new SvxMacro( aMacName, aLibName, (ScriptType)eType );
-
-        SvxMacro *pOld = Get( nCurKey );
-        if( pOld )
-        {
-            delete pOld;
-            Replace( nCurKey, pNew );
-        }
-        else
-            Insert( nCurKey, pNew );
+        aSvxMacroTable.insert( SvxMacroTable::value_type(nCurKey, SvxMacro( aMacName, aLibName, (ScriptType)eType ) ));
     }
     return rStrm;
 }
@@ -156,33 +163,60 @@ SvStream& SvxMacroTableDtor::Write( SvStream& rStream ) const
     if( SVX_MACROTBL_VERSION40 <= nVersion )
         rStream << nVersion;
 
-    rStream << (sal_uInt16)Count();
+    rStream << (sal_uInt16)aSvxMacroTable.size();
 
-    SvxMacro* pMac = ((SvxMacroTableDtor*)this)->First();
-    while( pMac && rStream.GetError() == SVSTREAM_OK )
+    SvxMacroTable::const_iterator it = aSvxMacroTable.begin();
+    while( it != aSvxMacroTable.end() && rStream.GetError() == SVSTREAM_OK )
     {
-        rStream << (short)GetCurKey();
-        SfxPoolItem::writeByteString(rStream, pMac->GetLibName());
-        SfxPoolItem::writeByteString(rStream, pMac->GetMacName());
+        const SvxMacro& rMac = it->second;
+        rStream << it->first;
+        SfxPoolItem::writeByteString(rStream, rMac.GetLibName());
+        SfxPoolItem::writeByteString(rStream, rMac.GetMacName());
 
         if( SVX_MACROTBL_VERSION40 <= nVersion )
-            rStream << (sal_uInt16)pMac->GetScriptType();
-        pMac = ((SvxMacroTableDtor*)this)->Next();
+            rStream << (sal_uInt16)rMac.GetScriptType();
+        ++it;
     }
     return rStream;
 }
 
-// -----------------------------------------------------------------------
+// returns NULL if no entry exists, or a pointer to the internal value
+const SvxMacro* SvxMacroTableDtor::Get(sal_uInt16 nEvent) const
+{
+    SvxMacroTable::const_iterator it = aSvxMacroTable.find(nEvent);
+    return it == aSvxMacroTable.end() ? NULL : &(it->second);
+}
+
+// returns NULL if no entry exists, or a pointer to the internal value
+SvxMacro* SvxMacroTableDtor::Get(sal_uInt16 nEvent)
+{
+    SvxMacroTable::iterator it = aSvxMacroTable.find(nEvent);
+    return it == aSvxMacroTable.end() ? NULL : &(it->second);
+}
+
+// return true if the key exists
+bool SvxMacroTableDtor::IsKeyValid(sal_uInt16 nEvent) const
+{
+    SvxMacroTable::const_iterator it = aSvxMacroTable.find(nEvent);
+    return it != aSvxMacroTable.end();
+}
 
-void SvxMacroTableDtor::DelDtor()
+// This stores a copy of the rMacro parameter
+SvxMacro& SvxMacroTableDtor::Insert(sal_uInt16 nEvent, const SvxMacro& rMacro)
 {
-    SvxMacro* pTmp = First();
-    while( pTmp )
+    return aSvxMacroTable.insert( SvxMacroTable::value_type( nEvent, rMacro ) ).first->second;
+}
+
+// If the entry exists, remove it from the map and release it's storage
+sal_Bool SvxMacroTableDtor::Erase(sal_uInt16 nEvent)
+{
+    SvxMacroTable::iterator it = aSvxMacroTable.find(nEvent);
+    if ( it != aSvxMacroTable.end())
     {
-        delete pTmp;
-        pTmp = Next();
+        aSvxMacroTable.erase(it);
+        return sal_True;
     }
-    Clear();
+    return sal_False;
 }
 
 // -----------------------------------------------------------------------
@@ -194,22 +228,7 @@ int SvxMacroItem::operator==( const SfxPoolItem& rAttr ) const
     const SvxMacroTableDtor& rOwn = aMacroTable;
     const SvxMacroTableDtor& rOther = ( (SvxMacroItem&) rAttr ).aMacroTable;
 
-    // Anzahl unterschiedlich => auf jeden Fall ungleich
-    if ( rOwn.Count() != rOther.Count() )
-        return sal_False;
-
-    // einzeln verleichen; wegen Performance ist die Reihenfolge wichtig
-    for ( sal_uInt16 nNo = 0; nNo < rOwn.Count(); ++nNo )
-    {
-        const SvxMacro *pOwnMac = rOwn.GetObject(nNo);
-        const SvxMacro *pOtherMac = rOther.GetObject(nNo);
-        if (    rOwn.GetKey(pOwnMac) != rOther.GetKey(pOtherMac)  ||
-                pOwnMac->GetLibName() != pOtherMac->GetLibName() ||
-                pOwnMac->GetMacName() != pOtherMac->GetMacName() )
-            return sal_False;
-    }
-
-    return sal_True;
+    return rOwn == rOther;
 }
 
 // -----------------------------------------------------------------------
@@ -268,14 +287,7 @@ SfxPoolItem* SvxMacroItem::Create( SvStream& rStrm, sal_uInt16 nVersion ) const
 
 void SvxMacroItem::SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro )
 {
-    SvxMacro *pMacro;
-    if ( 0 != (pMacro=aMacroTable.Get(nEvent)) )
-    {
-        delete pMacro;
-        aMacroTable.Replace(nEvent, new SvxMacro( rMacro ) );
-    }
-    else
-        aMacroTable.Insert(nEvent, new SvxMacro( rMacro ) );
+    aMacroTable.Insert( nEvent, rMacro);
 }
 
 // -----------------------------------------------------------------------
diff --git a/svtools/inc/svtools/imapobj.hxx b/svtools/inc/svtools/imapobj.hxx
index f97850c..ee523c5 100644
--- a/svtools/inc/svtools/imapobj.hxx
+++ b/svtools/inc/svtools/imapobj.hxx
@@ -152,9 +152,7 @@ inline const SvxMacro& IMapObject::GetEvent( sal_uInt16 nEvent ) const
 }
 inline sal_Bool IMapObject::DelEvent( sal_uInt16 nEvent )
 {
-    SvxMacro *pMacro = aEventList.Remove( nEvent );
-    delete pMacro;
-    return ( pMacro != 0 );
+    return aEventList.Erase( nEvent );
 }
 
 #endif
diff --git a/svtools/source/svhtml/htmlout.cxx b/svtools/source/svhtml/htmlout.cxx
index 3544a0d..d35d4af 100644
--- a/svtools/source/svhtml/htmlout.cxx
+++ b/svtools/source/svhtml/htmlout.cxx
@@ -770,7 +770,7 @@ SvStream& HTMLOutFuncs::Out_ImageMap( SvStream& rStream,
                 }
 
                 const SvxMacroTableDtor& rMacroTab = pObj->GetMacroTable();
-                if( pEventTable && rMacroTab.Count() )
+                if( pEventTable && !rMacroTab.empty() )
                     Out_Events( rStream, rMacroTab, pEventTable,
                                 bOutStarBasic, eDestEnc, pNonConvertableChars );
 
diff --git a/svtools/source/uno/unoevent.cxx b/svtools/source/uno/unoevent.cxx
index 1a8f9ff..f8894d4 100644
--- a/svtools/source/uno/unoevent.cxx
+++ b/svtools/source/uno/unoevent.cxx
@@ -579,9 +579,8 @@ void SvMacroTableEventDescriptor::copyMacrosIntoTable(
         const sal_uInt16 nEvent = mpSupportedMacroItems[i].mnEvent;
         if (hasByName(nEvent))
         {
-            SvxMacro* pMacro = new SvxMacro(sEmpty, sEmpty);
-            getByName(*pMacro, nEvent);
-            rMacroTable.Insert(nEvent, pMacro);
+            SvxMacro& rMacro = rMacroTable.Insert(nEvent, SvxMacro(sEmpty, sEmpty));
+            getByName(rMacro, nEvent);
         }
     }
 }
diff --git a/svx/source/items/hlnkitem.cxx b/svx/source/items/hlnkitem.cxx
index bc663b2..bb1abb2 100644
--- a/svx/source/items/hlnkitem.cxx
+++ b/svx/source/items/hlnkitem.cxx
@@ -70,12 +70,13 @@ SvStream& SvxHyperlinkItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/
     rStrm << nMacroEvents;
 
     // store macros
-    sal_uInt16 nCnt = pMacroTable ? (sal_uInt16)pMacroTable->Count() : 0;
+    sal_uInt16 nCnt = pMacroTable ? (sal_uInt16)pMacroTable->size() : 0;
     sal_uInt16 nMax = nCnt;
     if( nCnt )
     {
-        for( SvxMacro* pMac = pMacroTable->First(); pMac; pMac = pMacroTable->Next() )
-            if( STARBASIC != pMac->GetScriptType() )
+        for ( SvxMacroTable::const_iterator it = pMacroTable->begin();
+              it != pMacroTable->end(); ++it)
+            if( STARBASIC != it->second.GetScriptType() )
                 --nCnt;
     }
 
@@ -84,17 +85,19 @@ SvStream& SvxHyperlinkItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/
     if( nCnt )
     {
         // 1. StarBasic-Macros
-        for( SvxMacro* pMac = pMacroTable->First(); pMac; pMac = pMacroTable->Next() )
+        for ( SvxMacroTable::const_iterator it = pMacroTable->begin();
+              it != pMacroTable->end(); ++it)
         {
-            if( STARBASIC == pMac->GetScriptType() )
+            const SvxMacro& rMac = it->second;
+            if( STARBASIC == rMac.GetScriptType() )
             {
-                rStrm << (sal_uInt16)pMacroTable->GetCurKey();
+                rStrm << (sal_uInt16)it->first;
 
                 // UNICODE: rStrm << pMac->GetLibName();
-                rStrm.WriteUniOrByteString(pMac->GetLibName(), rStrm.GetStreamCharSet());
+                rStrm.WriteUniOrByteString(rMac.GetLibName(), rStrm.GetStreamCharSet());
 
                 // UNICODE: rStrm << pMac->GetMacName();
-                rStrm.WriteUniOrByteString(pMac->GetMacName(), rStrm.GetStreamCharSet());
+                rStrm.WriteUniOrByteString(rMac.GetMacName(), rStrm.GetStreamCharSet());
             }
         }
     }
@@ -104,19 +107,21 @@ SvStream& SvxHyperlinkItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/
     if( nCnt )
     {
         // 2. ::com::sun::star::script::JavaScript-Macros
-        for( SvxMacro* pMac = pMacroTable->First(); pMac; pMac = pMacroTable->Next() )
+        for ( SvxMacroTable::const_iterator it = pMacroTable->begin();
+              it != pMacroTable->end(); ++it)
         {
-            if( STARBASIC != pMac->GetScriptType() )
+            const SvxMacro& rMac = it->second;
+            if( STARBASIC != rMac.GetScriptType() )
             {
-                rStrm << (sal_uInt16)pMacroTable->GetCurKey();
+                rStrm << (sal_uInt16)it->first;
 
                 // UNICODE: rStrm << pMac->GetLibName();
-                rStrm.WriteUniOrByteString(pMac->GetLibName(), rStrm.GetStreamCharSet());
+                rStrm.WriteUniOrByteString(rMac.GetLibName(), rStrm.GetStreamCharSet());
 
                 // UNICODE: rStrm << pMac->GetMacName();
-                rStrm.WriteUniOrByteString(pMac->GetMacName(), rStrm.GetStreamCharSet());
+                rStrm.WriteUniOrByteString(rMac.GetMacName(), rStrm.GetStreamCharSet());
 
-                rStrm << (sal_uInt16)pMac->GetScriptType();
+                rStrm << (sal_uInt16)rMac.GetScriptType();
             }
         }
     }
@@ -254,29 +259,14 @@ int SvxHyperlinkItem::operator==( const SfxPoolItem& rAttr ) const
 
     const SvxMacroTableDtor* pOther = ((SvxHyperlinkItem&)rAttr).pMacroTable;
     if( !pMacroTable )
-        return ( !pOther || !pOther->Count() );
+        return ( !pOther || pOther->empty() );
     if( !pOther )
-        return 0 == pMacroTable->Count();
+        return pMacroTable->empty();
 
     const SvxMacroTableDtor& rOwn = *pMacroTable;
     const SvxMacroTableDtor& rOther = *pOther;
 
-    // Anzahl unterschiedlich => auf jeden Fall ungleich
-    if( rOwn.Count() != rOther.Count() )
-        return sal_False;
-
-    // einzeln vergleichen; wegen Performance ist die Reihenfolge wichtig
-    for( sal_uInt16 nNo = 0; nNo < rOwn.Count(); ++nNo )
-    {
-        const SvxMacro *pOwnMac = rOwn.GetObject(nNo);
-        const SvxMacro *pOtherMac = rOther.GetObject(nNo);
-        if (    rOwn.GetKey(pOwnMac) != rOther.GetKey(pOtherMac)  ||
-                pOwnMac->GetLibName() != pOtherMac->GetLibName() ||
-                pOwnMac->GetMacName() != pOtherMac->GetMacName() )
-            return sal_False;
-    }
-
-    return sal_True;
+    return rOwn == rOther;
 }
 
 void SvxHyperlinkItem::SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro )
@@ -300,14 +290,7 @@ void SvxHyperlinkItem::SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro )
     if( !pMacroTable )
         pMacroTable = new SvxMacroTableDtor;
 
-    SvxMacro *pOldMacro;
-    if( 0 != ( pOldMacro = pMacroTable->Get( nEvent )) )
-    {
-        delete pOldMacro;
-        pMacroTable->Replace( nEvent, new SvxMacro( rMacro ) );
-    }
-    else
-        pMacroTable->Insert( nEvent, new SvxMacro( rMacro ) );
+    pMacroTable->Insert( nEvent, rMacro);
 }
 
 void SvxHyperlinkItem::SetMacroTable( const SvxMacroTableDtor& rTbl )
diff --git a/sw/source/core/txtnode/fmtatr2.cxx b/sw/source/core/txtnode/fmtatr2.cxx
index f4167ab..eb70464 100644
--- a/sw/source/core/txtnode/fmtatr2.cxx
+++ b/sw/source/core/txtnode/fmtatr2.cxx
@@ -246,28 +246,14 @@ int SwFmtINetFmt::operator==( const SfxPoolItem& rAttr ) const
 
     const SvxMacroTableDtor* pOther = ((SwFmtINetFmt&)rAttr).pMacroTbl;
     if( !pMacroTbl )
-        return ( !pOther || !pOther->Count() );
+        return ( !pOther || pOther->empty() );
     if( !pOther )
-        return 0 == pMacroTbl->Count();
+        return pMacroTbl->empty();
 
     const SvxMacroTableDtor& rOwn = *pMacroTbl;
     const SvxMacroTableDtor& rOther = *pOther;
 
-    // Anzahl unterschiedlich => auf jeden Fall ungleich
-    if( rOwn.Count() != rOther.Count() )
-        return sal_False;
-
-    // einzeln vergleichen; wegen Performance ist die Reihenfolge wichtig
-    for( sal_uInt16 nNo = 0; nNo < rOwn.Count(); ++nNo )
-    {
-        const SvxMacro *pOwnMac = rOwn.GetObject(nNo);
-        const SvxMacro *pOtherMac = rOther.GetObject(nNo);
-        if (    rOwn.GetKey(pOwnMac) != rOther.GetKey(pOtherMac)  ||
-                pOwnMac->GetLibName() != pOtherMac->GetLibName() ||
-                pOwnMac->GetMacName() != pOtherMac->GetMacName() )
-            return sal_False;
-    }
-    return sal_True;
+    return rOwn == rOther;
 }
 
 
@@ -299,14 +285,7 @@ void SwFmtINetFmt::SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro )
     if( !pMacroTbl )
         pMacroTbl = new SvxMacroTableDtor;
 
-    SvxMacro *pOldMacro;
-    if( 0 != ( pOldMacro = pMacroTbl->Get( nEvent )) )
-    {
-        delete pOldMacro;
-        pMacroTbl->Replace( nEvent, new SvxMacro( rMacro ) );
-    }
-    else
-        pMacroTbl->Insert( nEvent, new SvxMacro( rMacro ) );
+     pMacroTbl->Insert( nEvent, rMacro );
 }
 
 
diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx
index 25b3b11..9d15312 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -3036,7 +3036,7 @@ Writer& OutHTML_INetFmt( Writer& rWrt, const SwFmtINetFmt& rINetFmt, sal_Bool bO
 
     String aURL( rINetFmt.GetValue() );
     const SvxMacroTableDtor *pMacTable = rINetFmt.GetMacroTbl();
-    sal_Bool bEvents = pMacTable != 0 && pMacTable->Count() > 0;
+    sal_Bool bEvents = pMacTable != 0 && !pMacTable->empty();
 
     // Gibt es ueberhaupt etwas auszugeben?
     if( !aURL.Len() && !bEvents && !rINetFmt.GetName().Len() )
diff --git a/sw/source/filter/html/htmlbas.cxx b/sw/source/filter/html/htmlbas.cxx
index 5fbd867..182d9a2 100644
--- a/sw/source/filter/html/htmlbas.cxx
+++ b/sw/source/filter/html/htmlbas.cxx
@@ -342,10 +342,13 @@ void SwHTMLWriter::OutBasicBodyEvents()
     {
         SvxMacro* pMacro = SfxEventConfiguration::ConvertToMacro( xEvents->getByName( ::rtl::OUString::createFromAscii(aEventNames[i]) ), pDocSh, sal_True );
         if ( pMacro )
-            pDocTable->Insert( aBodyEventTable[i].nEvent, pMacro );
+        {
+            pDocTable->Insert( aBodyEventTable[i].nEvent, *pMacro );
+            delete pMacro;
+        }
     }
 
-    if( pDocTable && pDocTable->Count() )
+    if( pDocTable && !pDocTable->empty() )
         HTMLOutFuncs::Out_Events( Strm(), *pDocTable, aBodyEventTable,
                                   bCfgStarBasic, eDestEnc, &aNonConvertableCharacters );
 }
diff --git a/sw/source/filter/html/htmlfly.cxx b/sw/source/filter/html/htmlfly.cxx
index e03b1d4..4196992 100644
--- a/sw/source/filter/html/htmlfly.cxx
+++ b/sw/source/filter/html/htmlfly.cxx
@@ -1017,7 +1017,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt,
             aName = pURLItem->GetName();
             aTarget = pURLItem->GetTargetFrameName();
         }
-        sal_Bool bEvents = pMacItem && pMacItem->GetMacroTable().Count();
+        sal_Bool bEvents = pMacItem && !pMacItem->GetMacroTable().empty();
 
         if( aMapURL.Len() || aName.Len() || aTarget.Len() || bEvents )
         {
@@ -1059,7 +1059,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt,
             if( pMacItem )
             {
                 const SvxMacroTableDtor& rMacTable = pMacItem->GetMacroTable();
-                if( rMacTable.Count() )
+                if( !rMacTable.empty() )
                     HTMLOutFuncs::Out_Events( rWrt.Strm(), rMacTable,
                                               aAnchorEventTable,
                                               rHTMLWrt.bCfgStarBasic,
@@ -1161,7 +1161,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt,
     {
         const SvxMacroTableDtor& rMacTable =
             ((const SvxMacroItem *)pItem)->GetMacroTable();
-        if( rMacTable.Count() )
+        if( !rMacTable.empty() )
             HTMLOutFuncs::Out_Events( rWrt.Strm(), rMacTable, aImageEventTable,
                                       rHTMLWrt.bCfgStarBasic, rHTMLWrt.eDestEnc,
                                         &rHTMLWrt.aNonConvertableCharacters );
diff --git a/sw/source/filter/html/htmlform.cxx b/sw/source/filter/html/htmlform.cxx
index d0afc81..8cdb4bf 100644
--- a/sw/source/filter/html/htmlform.cxx
+++ b/sw/source/filter/html/htmlform.cxx
@@ -437,7 +437,7 @@ SwHTMLImageWatcher::SwHTMLImageWatcher(
     OSL_ENSURE( xSrc.is(), "Kein XImageProducerSupplier" );
 
     // Als Event-Listener am Shape anmelden, damit wir es beim dispose
-    // loslassen ko”nnen ...
+    // loslassen ko”nnen ...
     uno::Reference< XEventListener > xEvtLstnr = (XEventListener *)this;
     uno::Reference< XComponent > xComp( xShape, UNO_QUERY );
     xComp->addEventListener( xEvtLstnr );
@@ -1293,7 +1293,7 @@ uno::Reference< drawing::XShape > SwHTMLParser::InsertControl(
     // auch schon Fokus-Events verschickt. Damit die nicht evtl. schon
     // vorhendene JavaSCript-Eents rufen, werden die Events nachtraeglich
     // gesetzt.
-    if( rMacroTbl.Count() || !rUnoMacroTbl.empty() )
+    if( !rMacroTbl.empty() || !rUnoMacroTbl.empty() )
     {
         lcl_html_setEvents( pFormImpl->GetControlEventManager(),
                             rFormComps->getCount() - 1,
@@ -1393,8 +1393,7 @@ void SwHTMLParser::NewForm( sal_Bool bAppend )
                 String aScriptType2;
                 if( EXTENDED_STYPE==eScriptType2 )
                     aScriptType2 = rDfltScriptType;
-                aMacroTbl.Insert( nEvent, new SvxMacro( sEvent, aScriptType2,
-                                  eScriptType2 ) );
+                aMacroTbl.Insert( nEvent, SvxMacro( sEvent, aScriptType2, eScriptType2 ) );
             }
         }
     }
@@ -1456,7 +1455,7 @@ void SwHTMLParser::NewForm( sal_Bool bAppend )
         pFormImpl->GetForms();
     Any aAny( &xForm, ::getCppuType((uno::Reference< XForm>*)0) );
     rForms->insertByIndex( rForms->getCount(), aAny );
-    if( aMacroTbl.Count() )
+    if( !aMacroTbl.empty() )
         lcl_html_setEvents( pFormImpl->GetFormEventManager(),
                             rForms->getCount() - 1,
                             aMacroTbl, aUnoMacroTbl, aUnoMacroParamTbl,
@@ -1625,8 +1624,7 @@ void SwHTMLParser::InsertInput()
                 String aScriptType2;
                 if( EXTENDED_STYPE==eScriptType2 )
                     aScriptType2 = rDfltScriptType;
-                aMacroTbl.Insert( nEvent, new SvxMacro( sEvent, aScriptType2,
-                                  eScriptType2 ) );
+                aMacroTbl.Insert( nEvent, SvxMacro( sEvent, aScriptType2, eScriptType2 ) );
             }
         }
     }
@@ -1764,11 +1762,11 @@ void SwHTMLParser::InsertInput()
                     OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultState")), aTmp );
             }
 
-            SvxMacro *pMacro = aMacroTbl.Get( HTML_ET_ONCLICK );
+            const SvxMacro* pMacro = aMacroTbl.Get( HTML_ET_ONCLICK );
             if( pMacro )
             {
-                aMacroTbl.Remove( HTML_ET_ONCLICK );
-                aMacroTbl.Insert( HTML_ET_ONCLICK_ITEM, pMacro );
+                aMacroTbl.Insert( HTML_ET_ONCLICK_ITEM, *pMacro );
+                aMacroTbl.Erase( HTML_ET_ONCLICK );
             }
             // SIZE auszuwerten duerfte hier keinen Sinn machen???
             bMinWidth = bMinHeight = sal_True;
@@ -2091,8 +2089,7 @@ void SwHTMLParser::NewTextArea()
                 sEvent = convertLineEnd(sEvent, GetSystemLineEnd());
                 if( EXTENDED_STYPE==eScriptType2 )
                     aScriptType = rDfltScriptType;
-                aMacroTbl.Insert( nEvent, new SvxMacro( sEvent, aScriptType,
-                                  eScriptType2 ) );
+                aMacroTbl.Insert( nEvent, SvxMacro( sEvent, aScriptType, eScriptType2 ) );
             }
         }
     }
@@ -2371,8 +2368,7 @@ void SwHTMLParser::NewSelect()
                 sEvent = convertLineEnd(sEvent, GetSystemLineEnd());
                 if( EXTENDED_STYPE==eScriptType2 )
                     aScriptType = rDfltScriptType;
-                aMacroTbl.Insert( nEvent, new SvxMacro( sEvent, aScriptType,
-                                  eScriptType2 ) );
+                aMacroTbl.Insert( nEvent, SvxMacro( sEvent, aScriptType, eScriptType2 ) );
             }
         }
     }
diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx
index 88fc705..1607d68 100644
--- a/sw/source/filter/html/htmlgrin.cxx
+++ b/sw/source/filter/html/htmlgrin.cxx
@@ -781,7 +781,7 @@ IMAGE_SETEVENT:
 
     }
 
-    if( aMacroItem.GetMacroTable().Count() )
+    if( !aMacroItem.GetMacroTable().empty() )
         pFlyFmt->SetFmtAttr( aMacroItem );
 
     // Wenn die Grafik gleich angeforder wird, muss dies geschehen,
@@ -1114,8 +1114,7 @@ ANCHOR_SETEVENT:
                         String sScriptType;
                         if( EXTENDED_STYPE == eScriptType2 )
                             sScriptType = sDfltScriptType;
-                        aMacroTbl.Insert( nEvent,
-                            new SvxMacro( sTmp, sScriptType, eScriptType2 ));
+                        aMacroTbl.Insert( nEvent, SvxMacro( sTmp, sScriptType, eScriptType2 ));
                     }
                 }
                 break;
@@ -1207,7 +1206,7 @@ ANCHOR_SETEVENT:
         SwFmtINetFmt aINetFmt( sHRef, sTarget );
         aINetFmt.SetName( aName );
 
-        if( aMacroTbl.Count() )
+        if( !aMacroTbl.empty() )
             aINetFmt.SetMacroTbl( &aMacroTbl );
 
         // das Default-Attribut setzen
diff --git a/sw/source/ui/chrdlg/chardlg.cxx b/sw/source/ui/chrdlg/chardlg.cxx
index c57df00..54c7c9b 100644
--- a/sw/source/ui/chrdlg/chardlg.cxx
+++ b/sw/source/ui/chrdlg/chardlg.cxx
@@ -298,7 +298,7 @@ sal_Bool SwCharURLPage::FillItemSet(SfxItemSet& rSet)
     aINetFmt.SetINetFmtId( nId );
     aINetFmt.SetINetFmt(nId == RES_POOLCHR_INET_NORMAL ? aEmptyStr : sEntry);
 
-    if( pINetItem && pINetItem->GetMacroTable().Count() )
+    if( pINetItem && !pINetItem->GetMacroTable().empty() )
         aINetFmt.SetMacroTbl( &pINetItem->GetMacroTable() );
 
     if(aVisitedLB.GetSavedValue() != aVisitedLB.GetSelectEntryPos())
diff --git a/sw/source/ui/dochdl/gloshdl.cxx b/sw/source/ui/dochdl/gloshdl.cxx
index 13d2d2e..6e87f25 100644
--- a/sw/source/ui/dochdl/gloshdl.cxx
+++ b/sw/source/ui/dochdl/gloshdl.cxx
@@ -628,9 +628,9 @@ void SwGlossaryHdl::SetMacros(const String& rShortName,
                                   : rStatGlossaries.GetGroupDoc( aCurGrp );
     SvxMacroTableDtor aMacroTbl;
     if( pStart )
-        aMacroTbl.Insert( SW_EVENT_START_INS_GLOSSARY, new SvxMacro(*pStart));
+        aMacroTbl.Insert( SW_EVENT_START_INS_GLOSSARY, *pStart);
     if( pEnd )
-        aMacroTbl.Insert( SW_EVENT_END_INS_GLOSSARY, new SvxMacro(*pEnd));
+        aMacroTbl.Insert( SW_EVENT_END_INS_GLOSSARY, *pEnd);
     sal_uInt16 nIdx = pGlos->GetIndex( rShortName );
     if( !pGlos->SetMacroTable( nIdx, aMacroTbl ) && pGlos->GetError() )
         ErrorHandler::HandleError( pGlos->GetError() );
diff --git a/sw/source/ui/shells/textfld.cxx b/sw/source/ui/shells/textfld.cxx
index b6d674d..21b8149 100644
--- a/sw/source/ui/shells/textfld.cxx
+++ b/sw/source/ui/shells/textfld.cxx
@@ -740,7 +740,7 @@ void SwTextShell::InsertHyperlink(const SvxHyperlinkItem& rHlnkItem)
                 aINetFmt.SetName(rHlnkItem.GetIntName());
                 if(pMacroTbl)
                 {
-                    SvxMacro *pMacro = pMacroTbl->Get( SFX_EVENT_MOUSEOVER_OBJECT );
+                    const SvxMacro *pMacro = pMacroTbl->Get( SFX_EVENT_MOUSEOVER_OBJECT );
                     if( pMacro )
                         aINetFmt.SetMacro(SFX_EVENT_MOUSEOVER_OBJECT, *pMacro);
                     pMacro = pMacroTbl->Get( SFX_EVENT_MOUSECLICK_OBJECT );
diff --git a/sw/source/ui/uno/unoatxt.cxx b/sw/source/ui/uno/unoatxt.cxx
index 0b5844c..e22d01d 100644
--- a/sw/source/ui/uno/unoatxt.cxx
+++ b/sw/source/ui/uno/unoatxt.cxx
@@ -1087,8 +1087,7 @@ void SwAutoTextEventDescriptor::replaceByName(
             SvxMacroTableDtor aMacroTable;
             if( pBlocks->GetMacroTable( nIndex, aMacroTable ) )
             {
-                SvxMacro* pNewMacro = new SvxMacro(rMacro);
-                aMacroTable.Replace( nEvent, pNewMacro );
+                aMacroTable.Insert( nEvent, rMacro );
                 pBlocks->SetMacroTable( nIndex, aMacroTable );
             }
         }


More information about the Libreoffice-commits mailing list