package/inc/zipfileaccess.hxx               |    3 +-
 package/source/zippackage/zipfileaccess.cxx |    2 -
 sax/source/fastparser/fastparser.cxx        |   31 ++++++++++++++--------------
 3 files changed, 19 insertions(+), 17 deletions(-)

New commits:
commit 49f7d5cba44a14f168f26a9f1ade12618ff32d77
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Wed Aug 11 18:25:32 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Aug 12 09:32:30 2021 +0200

    flatten FastSaxParserImpl a little
    
    The EventList instances are movable (and are really just pointers
    to buffers of data), so no need to use unique_ptr
    
    Change-Id: Ic3e13e949f5a61ee9cc5fcf8da9e22094e8ab9da
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120342
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sax/source/fastparser/fastparser.cxx 
b/sax/source/fastparser/fastparser.cxx
index 05a874cb3c33..2ffd008c6df6 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -150,9 +150,9 @@ struct Entity : public ParserData
 
     // Number of valid events in mxProducedEvents:
     size_t mnProducedEventsSize;
-    std::unique_ptr<EventList> mxProducedEvents;
-    std::queue<std::unique_ptr<EventList>> maPendingEvents;
-    std::queue<std::unique_ptr<EventList>> maUsedEvents;
+    std::optional<EventList> mxProducedEvents;
+    std::queue<EventList> maPendingEvents;
+    std::queue<EventList> maUsedEvents;
     osl::Mutex maEventProtector;
 
     static const size_t mnEventLowWater = 4;
@@ -548,7 +548,7 @@ EventList& Entity::getEventList()
         }
         if (!mxProducedEvents)
         {
-            mxProducedEvents.reset(new EventList);
+            mxProducedEvents.emplace();
             mxProducedEvents->maEvents.resize(mnEventListSize);
             mxProducedEvents->mbIsAttributesEmpty = false;
             mnProducedEventsSize = 0;
@@ -863,11 +863,11 @@ void FastSaxParserImpl::parseStream(const InputSource& 
rStructSource)
                 if (rEntity.maPendingEvents.size() <= Entity::mnEventLowWater)
                     rEntity.maProduceResume.set(); // start producer again
 
-                std::unique_ptr<EventList> xEventList = 
std::move(rEntity.maPendingEvents.front());
+                EventList aEventList = 
std::move(rEntity.maPendingEvents.front());
                 rEntity.maPendingEvents.pop();
                 aGuard.clear(); // unlock
 
-                if (!consume(*xEventList))
+                if (!consume(aEventList))
                     done = true;
 
                 aGuard.reset(); // lock
@@ -875,7 +875,7 @@ void FastSaxParserImpl::parseStream(const InputSource& 
rStructSource)
                 if ( rEntity.maPendingEvents.size() <= Entity::mnEventLowWater 
)
                 {
                     aGuard.clear();
-                    for (auto& rEvent : xEventList->maEvents)
+                    for (auto& rEvent : aEventList.maEvents)
                     {
                         if (rEvent.mxAttributes.is())
                         {
@@ -883,12 +883,12 @@ void FastSaxParserImpl::parseStream(const InputSource& 
rStructSource)
                             if( rEntity.mxNamespaceHandler.is() )
                                 rEvent.mxDeclAttributes->clear();
                         }
-                        xEventList->mbIsAttributesEmpty = true;
+                        aEventList.mbIsAttributesEmpty = true;
                     }
                     aGuard.reset();
                 }
 
-                rEntity.maUsedEvents.push(std::move(xEventList));
+                rEntity.maUsedEvents.push(std::move(aEventList));
             }
         } while (!done);
         aEnsureFree.joinThread();
@@ -978,12 +978,12 @@ void FastSaxParserImpl::deleteUsedEvents()
 
     while (!rEntity.maUsedEvents.empty())
     {
-        std::unique_ptr<EventList> xEventList = 
std::move(rEntity.maUsedEvents.front());
-        rEntity.maUsedEvents.pop();
+        { // the block makes sure that aEventList is destructed outside the 
lock
+            EventList aEventList = std::move(rEntity.maUsedEvents.front());
+            rEntity.maUsedEvents.pop();
 
-        aGuard.clear(); // unlock
-
-        xEventList.reset();
+            aGuard.clear(); // unlock
+        }
 
         aGuard.reset(); // lock
     }
@@ -1006,7 +1006,8 @@ void FastSaxParserImpl::produce( bool bForceFlush )
         aGuard.reset(); // lock
     }
 
-    rEntity.maPendingEvents.push(std::move(rEntity.mxProducedEvents));
+    rEntity.maPendingEvents.push(std::move(*rEntity.mxProducedEvents));
+    rEntity.mxProducedEvents.reset();
     assert(!rEntity.mxProducedEvents);
 
     aGuard.clear(); // unlock
commit 7bdb3a77d06664a500c2ed2f3464cd56647ce089
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Wed Aug 11 18:17:01 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Aug 12 09:32:10 2021 +0200

    flatten OZipFileAccess a little
    
    Change-Id: Ib03dadcd69a65493ddd9c0437fc654beef039ad8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120341
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/package/inc/zipfileaccess.hxx b/package/inc/zipfileaccess.hxx
index a3f96346d6ec..b1ca8b1871bb 100644
--- a/package/inc/zipfileaccess.hxx
+++ b/package/inc/zipfileaccess.hxx
@@ -36,6 +36,7 @@
 #include "HashMaps.hxx"
 
 #include <memory>
+#include <optional>
 
 class OZipFileAccess final : public ::cppu::WeakImplHelper<
                         css::packages::zip::XZipFileAccess2,
@@ -46,7 +47,7 @@ class OZipFileAccess final : public ::cppu::WeakImplHelper<
     rtl::Reference<comphelper::RefCountedMutex> m_aMutexHolder;
     css::uno::Reference< css::uno::XComponentContext > m_xContext;
     css::uno::Reference< css::io::XInputStream > m_xContentStream;
-    std::unique_ptr<ZipFile> m_pZipFile;
+    std::optional<ZipFile> m_pZipFile;
     std::unique_ptr<::comphelper::OInterfaceContainerHelper2> 
m_pListenersContainer;
     bool m_bDisposed;
     bool m_bOwnContent;
diff --git a/package/source/zippackage/zipfileaccess.cxx 
b/package/source/zippackage/zipfileaccess.cxx
index 5e1afc0e345f..801a9fe79e54 100644
--- a/package/source/zippackage/zipfileaccess.cxx
+++ b/package/source/zippackage/zipfileaccess.cxx
@@ -240,7 +240,7 @@ void SAL_CALL OZipFileAccess::initialize( const 
uno::Sequence< uno::Any >& aArgu
     }
 
     // TODO: in case xSeekable is implemented on separated XStream 
implementation a wrapper is required
-    m_pZipFile = std::make_unique<ZipFile>(
+    m_pZipFile.emplace(
                 m_aMutexHolder,
                 m_xContentStream,
                 m_xContext,

Reply via email to