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