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

New commits:
commit afe09c75aaf429e5601f1693a72567da94a6562e
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Fri May 30 12:44:55 2025 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Sat May 31 22:21:20 2025 +0200

    make SwTableAutoFormatTable::Impl copy on write
    
    Change-Id: I3f2d1aaefeff1592a0e3ac79e3abdefe23ab3288
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186060
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Jenkins

diff --git a/sw/inc/tblafmt.hxx b/sw/inc/tblafmt.hxx
index dfb9b3af1022..8f0b64d1f8dd 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 0fd3224d0ab9..01a0c57fea57 100644
--- a/sw/source/core/doc/tblafmt.cxx
+++ b/sw/source/core/doc/tblafmt.cxx
@@ -929,6 +929,7 @@ struct SwTableAutoFormatTable::Impl
     std::vector<std::unique_ptr<SwTableAutoFormat>> m_AutoFormats;
 
     Impl();
+    Impl(const Impl& rOther);
 
     void Load();
     bool Save() const;
@@ -947,6 +948,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];
@@ -1015,14 +1017,13 @@ SwTableAutoFormat* 
SwTableAutoFormatTable::FindAutoFormat(const TableStyleName&
     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()
 {
@@ -1052,6 +1053,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();
commit 2b8bdc88bf492d4c444d0a4add9c8e8691c83a03
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Fri May 30 20:05:07 2025 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Sat May 31 22:21:11 2025 +0200

    move setup code into Impl ctor
    
    Change-Id: I55d3c47a5f87033975c9a3a55d4fa4aa978be420
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186059
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/sw/source/core/doc/tblafmt.cxx b/sw/source/core/doc/tblafmt.cxx
index 73314685d387..0fd3224d0ab9 100644
--- a/sw/source/core/doc/tblafmt.cxx
+++ b/sw/source/core/doc/tblafmt.cxx
@@ -928,6 +928,8 @@ struct SwTableAutoFormatTable::Impl
 {
     std::vector<std::unique_ptr<SwTableAutoFormat>> m_AutoFormats;
 
+    Impl();
+
     void Load();
     bool Save() const;
 
@@ -1019,6 +1021,10 @@ SwTableAutoFormatTable::~SwTableAutoFormatTable()
 
 SwTableAutoFormatTable::SwTableAutoFormatTable()
     : m_pImpl(new Impl)
+{
+}
+
+SwTableAutoFormatTable::Impl::Impl()
 {
     std::unique_ptr<SwTableAutoFormat> pNew(new SwTableAutoFormat(
                 
TableStyleName(SwStyleNameMapper::GetUIName(RES_POOLTABLESTYLE_DEFAULT, 
ProgName()).toString())));
@@ -1041,9 +1047,9 @@ SwTableAutoFormatTable::SwTableAutoFormatTable()
     }
 
     pNew->SetUserDefined(false);
-    m_pImpl->m_AutoFormats.push_back(std::move(pNew));
+    m_AutoFormats.push_back(std::move(pNew));
 
-    m_pImpl->Load();
+    Load();
 }
 
 bool SwTableAutoFormatTable::Save() const

Reply via email to