sc/source/filter/oox/formulabuffer.cxx | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-)
New commits: commit 900258ac9dde75f53ac8bda643cbcba80ce6510e Author: Kohei Yoshida <[email protected]> Date: Fri Nov 8 14:19:19 2013 -0500 Create formula cells there... Change-Id: Idfd4081245905cdc88ad0da195b81be7e34ebf21 diff --git a/sc/source/filter/oox/formulabuffer.cxx b/sc/source/filter/oox/formulabuffer.cxx index 86c9e6c..d9c164a 100644 --- a/sc/source/filter/oox/formulabuffer.cxx +++ b/sc/source/filter/oox/formulabuffer.cxx @@ -46,6 +46,8 @@ namespace { */ class CachedTokenArray : boost::noncopyable { +public: + struct Item : boost::noncopyable { SCROW mnRow; @@ -55,11 +57,6 @@ class CachedTokenArray : boost::noncopyable Item( SCROW nRow, ScTokenArray* p ) : mnRow(nRow), mpCode(p) {} }; - typedef boost::unordered_map<SCCOL, Item*> ColCacheType; - ColCacheType maCache; - ScDocument& mrDoc; - -public: CachedTokenArray( ScDocument& rDoc ) : mrDoc(rDoc) {} ~CachedTokenArray() @@ -69,21 +66,21 @@ public: delete it->second; } - const ScTokenArray* get( const ScAddress& rPos, const OUString& rFormula ) const + Item* get( const ScAddress& rPos, const OUString& rFormula ) { // Check if a token array is cached for this column. - ColCacheType::const_iterator it = maCache.find(rPos.Col()); + ColCacheType::iterator it = maCache.find(rPos.Col()); if (it == maCache.end()) return NULL; - const Item& rCached = *it->second; + Item& rCached = *it->second; ScCompiler aComp(&mrDoc, rPos, *rCached.mpCode); aComp.SetGrammar(formula::FormulaGrammar::GRAM_ENGLISH_XL_OOX); OUStringBuffer aBuf; aComp.CreateStringFromTokenArray(aBuf); OUString aPredicted = aBuf.makeStringAndClear(); if (rFormula == aPredicted) - return rCached.mpCode.get(); + return &rCached; return NULL; } @@ -106,6 +103,11 @@ public: it->second->mnRow = rPos.Row(); it->second->mpCode.reset(rArray.Clone()); } + +private: + typedef boost::unordered_map<SCCOL, Item*> ColCacheType; + ColCacheType maCache; + ScDocument& mrDoc; }; void applySharedFormulas( @@ -181,11 +183,12 @@ void applyCellFormulas( { ScAddress aPos; ScUnoConversion::FillScAddress(aPos, it->maCellAddress); - const ScTokenArray* p = rCache.get(aPos, it->maTokenStr); + CachedTokenArray::Item* p = rCache.get(aPos, it->maTokenStr); if (p) { // Use the cached version to avoid re-compilation. - rDoc.setFormulaCell(aPos, p->Clone()); + ScFormulaCell* pCell = new ScFormulaCell(&rDoc.getDoc(), aPos, p->mpCode->Clone()); + rDoc.setFormulaCell(aPos, pCell); continue; } @@ -196,7 +199,8 @@ void applyCellFormulas( if (!pCode) continue; - rDoc.setFormulaCell(aPos, pCode); + ScFormulaCell* pCell = new ScFormulaCell(&rDoc.getDoc(), aPos, pCode); + rDoc.setFormulaCell(aPos, pCell); rCache.store(aPos, *pCode); } } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
