sw/inc/tblafmt.hxx             |    5 ++++-
 sw/source/core/doc/tblafmt.cxx |   22 +++++++++++++++-------
 2 files changed, 19 insertions(+), 8 deletions(-)

New commits:
commit b9bef758127ced743b1b8bbf125c38a682955561
Author:     Caolán McNamara <[email protected]>
AuthorDate: Fri May 30 12:44:55 2025 +0100
Commit:     Miklos Vajna <[email protected]>
CommitDate: Fri Jun 6 16:03:28 2025 +0200

    make SwTableAutoFormatTable::Impl copy on write
    
    Change-Id: I3f2d1aaefeff1592a0e3ac79e3abdefe23ab3288
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186053
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/sw/inc/tblafmt.hxx b/sw/inc/tblafmt.hxx
index fdc85c213132..0a70250b357c 100644
--- a/sw/inc/tblafmt.hxx
+++ b/sw/inc/tblafmt.hxx
@@ -273,10 +273,13 @@ public:
 class SW_DLLPUBLIC SwTableAutoFormatTable
 {
     struct Impl;
-    std::unique_ptr<Impl> m_pImpl;
+    typedef o3tl::cow_wrapper<Impl> ImplType;
+    ImplType m_pImpl;
 
 public:
     explicit SwTableAutoFormatTable();
+    SwTableAutoFormatTable(const SwTableAutoFormatTable&);
+    SwTableAutoFormatTable(SwTableAutoFormatTable&&);
     ~SwTableAutoFormatTable();
 
     size_t size() const;
diff --git a/sw/source/core/doc/tblafmt.cxx b/sw/source/core/doc/tblafmt.cxx
index 7befdc2fc630..0e677c413dea 100644
--- a/sw/source/core/doc/tblafmt.cxx
+++ b/sw/source/core/doc/tblafmt.cxx
@@ -928,6 +928,7 @@ struct SwTableAutoFormatTable::Impl
     std::vector<std::unique_ptr<SwTableAutoFormat>> m_AutoFormats;
 
     Impl();
+    Impl(const Impl& rOther);
 
     void Load();
     bool Save() const;
@@ -946,6 +947,7 @@ SwTableAutoFormat const& 
SwTableAutoFormatTable::operator[](size_t const i) cons
 {
     return *m_pImpl->m_AutoFormats[i];
 }
+
 SwTableAutoFormat      & SwTableAutoFormatTable::operator[](size_t const i)
 {
     return *m_pImpl->m_AutoFormats[i];
@@ -1014,14 +1016,13 @@ SwTableAutoFormat* 
SwTableAutoFormatTable::FindAutoFormat(std::u16string_view rN
     return nullptr;
 }
 
-SwTableAutoFormatTable::~SwTableAutoFormatTable()
-{
-}
+SwTableAutoFormatTable::~SwTableAutoFormatTable() = default;
 
-SwTableAutoFormatTable::SwTableAutoFormatTable()
-    : m_pImpl(new Impl)
-{
-}
+SwTableAutoFormatTable::SwTableAutoFormatTable(const SwTableAutoFormatTable&) 
= default;
+
+SwTableAutoFormatTable::SwTableAutoFormatTable(SwTableAutoFormatTable&&) = 
default;
+
+SwTableAutoFormatTable::SwTableAutoFormatTable() = default;
 
 SwTableAutoFormatTable::Impl::Impl()
 {
@@ -1051,6 +1052,13 @@ SwTableAutoFormatTable::Impl::Impl()
     Load();
 }
 
+SwTableAutoFormatTable::Impl::Impl(const Impl& rOther)
+{
+    m_AutoFormats.reserve(rOther.m_AutoFormats.size());
+    for (const auto& format : rOther.m_AutoFormats)
+        m_AutoFormats.emplace_back(new SwTableAutoFormat(*format));
+}
+
 bool SwTableAutoFormatTable::Save() const
 {
     return m_pImpl->Save();

Reply via email to