diff options
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/document.hxx | 11 | ||||
-rw-r--r-- | sc/source/core/data/documen2.cxx | 9 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 19 |
3 files changed, 18 insertions, 21 deletions
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index f2ceca43fcbf..69e0b06a6cab 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -296,14 +296,11 @@ const sal_uInt8 SC_DDE_IGNOREMODE = 255; /// For usage in FindDdeLink() // During threaded calculation fields being mutated are kept in this struct struct ScDocumentThreadSpecific { - ScRecursionHelper* pRecursionHelper; // information for recursive and iterative cell formulas + std::unique_ptr<ScRecursionHelper> xRecursionHelper; // information for recursive and iterative cell formulas ScInterpreterContext* pContext; // references the context passed around for easier access - ScDocumentThreadSpecific() - : pRecursionHelper(nullptr) - , pContext(nullptr) - { - } + ScDocumentThreadSpecific(); + ~ScDocumentThreadSpecific(); // To be called in the thread at start static void SetupFromNonThreadedData(const ScDocumentThreadSpecific& rNonThreadedData); @@ -2225,8 +2222,6 @@ private: DECL_LINK(TrackTimeHdl, Timer *, void); - static ScRecursionHelper* CreateRecursionHelperInstance(); - /** Adjust a range to available sheets. Used to start and stop listening on a sane range. Both o_rRange and diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 9b966c8d5cf5..e4413853aa71 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -387,8 +387,8 @@ ScDocument::~ScDocument() mxPoolHelper.clear(); pScriptTypeData.reset(); - delete maNonThreaded.pRecursionHelper; - delete maThreadSpecific.pRecursionHelper; + maNonThreaded.xRecursionHelper.reset(); + maThreadSpecific.xRecursionHelper.reset(); pPreviewFont.reset(); SAL_WARN_IF( pAutoNameCache, "sc.core", "AutoNameCache still set in dtor" ); @@ -1148,11 +1148,6 @@ void ScDocument::DisposeFieldEditEngine(std::unique_ptr<ScFieldEditEngine>& rpEd rpEditEngine.reset(); } -ScRecursionHelper* ScDocument::CreateRecursionHelperInstance() -{ - return new ScRecursionHelper; -} - ScLookupCache & ScDocument::GetLookupCache( const ScRange & rRange, ScInterpreterContext* pContext ) { ScLookupCache* pCache = nullptr; diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 32154717bd29..1b998a0da97b 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -85,6 +85,7 @@ #include <compressedarray.hxx> #include <docsh.hxx> #include <brdcst.hxx> +#include <recursionhelper.hxx> #include <formula/vectortoken.hxx> @@ -6809,15 +6810,15 @@ ScRecursionHelper& ScDocument::GetRecursionHelper() { if (!IsThreadedGroupCalcInProgress()) { - if (!maNonThreaded.pRecursionHelper) - maNonThreaded.pRecursionHelper = CreateRecursionHelperInstance(); - return *maNonThreaded.pRecursionHelper; + if (!maNonThreaded.xRecursionHelper) + maNonThreaded.xRecursionHelper = std::make_unique<ScRecursionHelper>(); + return *maNonThreaded.xRecursionHelper; } else { - if (!maThreadSpecific.pRecursionHelper) - maThreadSpecific.pRecursionHelper = CreateRecursionHelperInstance(); - return *maThreadSpecific.pRecursionHelper; + if (!maThreadSpecific.xRecursionHelper) + maThreadSpecific.xRecursionHelper = std::make_unique<ScRecursionHelper>(); + return *maThreadSpecific.xRecursionHelper; } } @@ -6832,6 +6833,12 @@ void ScDocumentThreadSpecific::MergeBackIntoNonThreadedData(ScDocumentThreadSpec // What about recursion helper and lookup cache? } +ScDocumentThreadSpecific::ScDocumentThreadSpecific() + : pContext(nullptr) +{} + +ScDocumentThreadSpecific::~ScDocumentThreadSpecific() {} + void ScDocument::SetupFromNonThreadedContext(ScInterpreterContext& /*threadedContext*/, int /*threadNumber*/) { // lookup cache is now only in pooled ScInterpreterContext's |