[Libreoffice-commits] core.git: xmloff/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Dec 18 06:22:52 UTC 2018


 xmloff/source/text/XMLPropertyBackpatcher.cxx |   16 ++++++----------
 xmloff/source/text/XMLPropertyBackpatcher.hxx |    8 ++------
 2 files changed, 8 insertions(+), 16 deletions(-)

New commits:
commit b06b3bcc6900014989da8060d126a45f31c9b8b7
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Dec 13 09:48:54 2018 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Dec 18 07:22:32 2018 +0100

    use unique_ptr in XMLPropertyBackpatcher
    
    and drop what looks like a very old (from 2000) workaround for long
    typenames and linker problems
    
    Change-Id: I9b4b42b0c37cacaa447a104bd2cf0d4aa76ba5fc
    Reviewed-on: https://gerrit.libreoffice.org/65142
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/xmloff/source/text/XMLPropertyBackpatcher.cxx b/xmloff/source/text/XMLPropertyBackpatcher.cxx
index a456283b2afc..a9f245d7229e 100644
--- a/xmloff/source/text/XMLPropertyBackpatcher.cxx
+++ b/xmloff/source/text/XMLPropertyBackpatcher.cxx
@@ -54,14 +54,14 @@ void XMLPropertyBackpatcher<A>::ResolveId(
     aIDMap[sName] = aValue;
 
     // backpatch old references, if backpatch list exists
-    if (aBackpatchListMap.count(sName))
+    auto it = aBackpatchListMap.find(sName);
+    if (it != aBackpatchListMap.end())
     {
         // aah, we have a backpatch list!
-        BackpatchListType* pList =
-            static_cast<BackpatchListType*>(aBackpatchListMap[sName]);
+        std::unique_ptr<BackpatchListType> pList = std::move(it->second);
 
         // a) remove list from list map
-        aBackpatchListMap.erase(sName);
+        aBackpatchListMap.erase(it);
 
         // b) for every item, set SequenceNumber
         //    (and preserve Property, if appropriate)
@@ -71,9 +71,6 @@ void XMLPropertyBackpatcher<A>::ResolveId(
         {
             rBackpatch->setPropertyValue(sPropertyName, aAny);
         }
-
-        // c) delete list
-        delete pList;
     }
     // else: no backpatch list -> then we're finished
 }
@@ -103,12 +100,11 @@ void XMLPropertyBackpatcher<A>::SetProperty(
         if (! aBackpatchListMap.count(sName))
         {
             // create backpatch list for this name
-            BackpatchListType* pTmp = new BackpatchListType;
-            aBackpatchListMap[sName] = static_cast<void*>(pTmp);
+            aBackpatchListMap.emplace(sName, new BackpatchListType);
         }
 
         // insert footnote
-        static_cast<BackpatchListType*>(aBackpatchListMap[sName])->push_back(xPropSet);
+        aBackpatchListMap[sName]->push_back(xPropSet);
     }
 }
 
diff --git a/xmloff/source/text/XMLPropertyBackpatcher.hxx b/xmloff/source/text/XMLPropertyBackpatcher.hxx
index 8747b8aad00b..029f25e66e4a 100644
--- a/xmloff/source/text/XMLPropertyBackpatcher.hxx
+++ b/xmloff/source/text/XMLPropertyBackpatcher.hxx
@@ -22,6 +22,7 @@
 #define INCLUDED_XMLOFF_SOURCE_TEXT_XMLPROPERTYBACKPATCHER_HXX
 
 #include <map>
+#include <memory>
 #include <vector>
 
 namespace com { namespace sun { namespace star {
@@ -65,13 +66,8 @@ class XMLPropertyBackpatcher
     typedef ::std::vector<
                 css::uno::Reference<css::beans::XPropertySet> > BackpatchListType;
 
-    /* use void* instead of BackpatchListType to avoid linker problems
-       with long typenames. The real typename (commented out) contains
-       >1200 chars. */
-
     /// backpatch list for unresolved IDs
-    //::std::map<const OUString, BackpatchListType*> aBackpatchListMap;
-    ::std::map<const OUString, void*> aBackpatchListMap;
+    ::std::map<const OUString, std::unique_ptr<BackpatchListType>> aBackpatchListMap;
 
     /// mapping of names -> IDs
     ::std::map<const OUString, A> aIDMap;


More information about the Libreoffice-commits mailing list