diff options
-rw-r--r-- | sc/source/core/tool/rangelst.cxx | 46 |
1 files changed, 11 insertions, 35 deletions
diff --git a/sc/source/core/tool/rangelst.cxx b/sc/source/core/tool/rangelst.cxx index 36fcdb68958e..1af32fe41de5 100644 --- a/sc/source/core/tool/rangelst.cxx +++ b/sc/source/core/tool/rangelst.cxx @@ -96,36 +96,6 @@ private: size_t mnCellCount; }; -class FormatString -{ -public: - FormatString(OUString& rStr, ScRefFlags nFlags, ScDocument* pDoc, FormulaGrammar::AddressConvention eConv, sal_Unicode cDelim, bool bFullAddressNotation) : - mrStr(rStr), - mnFlags(nFlags), - mpDoc(pDoc), - meConv(eConv), - mcDelim(cDelim), - mbFirst(true), - mbFullAddressNotation(bFullAddressNotation) {} - - void operator() (const ScRange & r) - { - OUString aStr(r.Format(mnFlags, mpDoc, meConv, mbFullAddressNotation)); - if (mbFirst) - mbFirst = false; - else - mrStr += OUStringLiteral1(mcDelim); - mrStr += aStr; - } -private: - OUString& mrStr; - ScRefFlags const mnFlags; - ScDocument* const mpDoc; - FormulaGrammar::AddressConvention const meConv; - sal_Unicode const mcDelim; - bool mbFirst; - bool const mbFullAddressNotation; -}; } @@ -178,14 +148,20 @@ void ScRangeList::Format( OUString& rStr, ScRefFlags nFlags, ScDocument* pDoc, formula::FormulaGrammar::AddressConvention eConv, sal_Unicode cDelimiter, bool bFullAddressNotation ) const { - if (!cDelimiter) cDelimiter = ScCompiler::GetNativeSymbolChar(ocSep); - OUString aStr; - FormatString func(aStr, nFlags, pDoc, eConv, cDelimiter, bFullAddressNotation); - for_each(maRanges.begin(), maRanges.end(), func); - rStr = aStr; + OUStringBuffer aBuf; + bool bFirst = true; + for( auto const & r : maRanges) + { + if (bFirst) + bFirst = false; + else + aBuf.append(OUStringLiteral1(cDelimiter)); + aBuf.append(r.Format(nFlags, pDoc, eConv, bFullAddressNotation)); + } + rStr = aBuf.makeStringAndClear(); } void ScRangeList::Join( const ScRange& rNewRange, bool bIsInList ) |