diff options
Diffstat (limited to 'sc/source/core/data/segmenttree.cxx')
-rw-r--r-- | sc/source/core/data/segmenttree.cxx | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sc/source/core/data/segmenttree.cxx b/sc/source/core/data/segmenttree.cxx index 254f0f875571..5d7adc18df87 100644 --- a/sc/source/core/data/segmenttree.cxx +++ b/sc/source/core/data/segmenttree.cxx @@ -24,6 +24,7 @@ #include <algorithm> #include <limits> #include <address.hxx> +#include <global.hxx> using ::std::numeric_limits; @@ -66,6 +67,8 @@ public: mbTreeSearchEnabled = b; } + void makeReady(); + private: typedef ::mdds::flat_segment_tree<SCCOLROW, ValueType> fst_type; fst_type maSegments; @@ -131,7 +134,10 @@ typename ScFlatSegmentsImpl<ValueType_, ExtValueType_>::ValueType ScFlatSegments } if (!maSegments.is_tree_valid()) + { + assert(!ScGlobal::bThreadedGroupCalcInProgress); maSegments.build_tree(); + } maSegments.search_tree(nPos, nValue); return nValue; @@ -185,7 +191,10 @@ bool ScFlatSegmentsImpl<ValueType_, ExtValueType_>::getRangeData(SCCOLROW nPos, return getRangeDataLeaf(nPos, rData); if (!maSegments.is_tree_valid()) + { + assert(!ScGlobal::bThreadedGroupCalcInProgress); maSegments.build_tree(); + } if (!maSegments.search_tree(nPos, rData.mnValue, &rData.mnPos1, &rData.mnPos2).second) return false; @@ -267,6 +276,14 @@ bool ScFlatSegmentsImpl<ValueType_, ExtValueType_>::getNext(RangeData& rData) return true; } +template<typename ValueType_, typename ExtValueType_> +void ScFlatSegmentsImpl<ValueType_, ExtValueType_>::makeReady() +{ + assert(!ScGlobal::bThreadedGroupCalcInProgress); + if (!maSegments.is_tree_valid()) + maSegments.build_tree(); +} + class ScFlatUInt16SegmentsImpl : public ScFlatSegmentsImpl<sal_uInt16, sal_uInt32> { public: @@ -416,6 +433,11 @@ SCROW ScFlatBoolRowSegments::findLastTrue() const return mpImpl->findLastTrue(false); } +void ScFlatBoolRowSegments::makeReady() +{ + mpImpl->makeReady(); +} + ScFlatBoolColSegments::ScFlatBoolColSegments(SCCOL nMaxCol) : mpImpl(new ScFlatBoolSegmentsImpl(nMaxCol)) { @@ -462,6 +484,11 @@ void ScFlatBoolColSegments::insertSegment(SCCOL nCol, SCCOL nSize) mpImpl->insertSegment(static_cast<SCCOLROW>(nCol), static_cast<SCCOLROW>(nSize), true/*bSkipStartBoundary*/); } +void ScFlatBoolColSegments::makeReady() +{ + mpImpl->makeReady(); +} + ScFlatUInt16RowSegments::ForwardIterator::ForwardIterator(ScFlatUInt16RowSegments& rSegs) : mrSegs(rSegs), mnCurPos(0), mnLastPos(-1), mnCurValue(0) { @@ -554,4 +581,9 @@ void ScFlatUInt16RowSegments::setValueIf(SCROW nRow1, SCROW nRow2, sal_uInt16 nV mpImpl->setValueIf(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2), nValue, rPredicate); } +void ScFlatUInt16RowSegments::makeReady() +{ + mpImpl->makeReady(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |