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();
