[Libreoffice-commits] .: 2 commits - sc/inc sc/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Fri Jan 28 19:31:40 PST 2011
sc/inc/funcdesc.hxx | 29 ++++++++---------------
sc/source/core/data/funcdesc.cxx | 48 ++++++++++++++++++++++++++++++++++-----
2 files changed, 52 insertions(+), 25 deletions(-)
New commits:
commit 2f4dcbe19d3e423db5ccfd129013f833f0cfbb12
Author: Kohei Yoshida <kyoshida at novell.com>
Date: Fri Jan 28 22:27:59 2011 -0500
For some reason STLPort didn't like assigning list to vector.
The code is correct & should work, but for some reason STLPort didn't
like assigning list's data into vector via assign() method. Luckily
ctor assignment and swap did the trick.
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index 8073256..68dc04b 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -549,9 +549,9 @@ ScFunctionList::ScFunctionList() :
}
//Move list to vector for better random access performance
- aFunctionList.reserve(tmpFuncList.size());
- aFunctionList.assign(tmpFuncList.begin(),tmpFuncList.end());
+ ::std::vector<const ScFuncDesc*> tmp(tmpFuncList.begin(), tmpFuncList.end());
tmpFuncList.clear();
+ aFunctionList.swap(tmp);
//Initialize iterator
aFunctionListIter = aFunctionList.end();
commit 406fb636d4365482079c9cd083476aca87406242
Author: Thies Pierdola <thiespierdola at gmail.com>
Date: Fri Jan 28 21:56:06 2011 +0100
Replaced tools/list by std::vector in ScFunctionList
As the random access Get is called a couple of thousand times each time
a spreadsheet function is used, the use of vector should have a huge
performance gain.
diff --git a/sc/inc/funcdesc.hxx b/sc/inc/funcdesc.hxx
index 49909c5..8a2404d 100644
--- a/sc/inc/funcdesc.hxx
+++ b/sc/inc/funcdesc.hxx
@@ -29,14 +29,10 @@
#ifndef SC_FUNCDESC_HXX
#define SC_FUNCDESC_HXX
-/* Function descriptions for function wizard / autopilot / most recent used
- * list et al. Separated from the global.hxx lump, implementation still in
- * global.cxx
- */
+/* Function descriptions for function wizard / autopilot */
#include "scfuncs.hrc"
-#include <tools/list.hxx>
#include <formula/IFunctionDescription.hxx>
#include <sal/types.h>
#include <rtl/ustring.hxx>
@@ -240,26 +236,21 @@ public:
ScFunctionList();
~ScFunctionList();
- sal_uInt32 GetCount() const
- { return aFunctionList.Count(); }
+ sal_uInt32 GetCount() const
+ { return aFunctionList.size(); }
- const ScFuncDesc* First()
- { return (const ScFuncDesc*) aFunctionList.First(); }
+ const ScFuncDesc* First();
- const ScFuncDesc* Next()
- { return (const ScFuncDesc*) aFunctionList.Next(); }
+ const ScFuncDesc* Next();
- const ScFuncDesc* GetFunction( sal_uInt32 nIndex ) const
- { return static_cast<const ScFuncDesc*>(aFunctionList.GetObject(nIndex)); }
+ const ScFuncDesc* GetFunction( sal_uInt32 nIndex ) const;
- ScFuncDesc* GetFunction( sal_uInt32 nIndex )
- { return static_cast<ScFuncDesc*>(aFunctionList.GetObject(nIndex)); }
-
- xub_StrLen GetMaxFuncNameLen() const
- { return nMaxFuncNameLen; }
+ xub_StrLen GetMaxFuncNameLen() const
+ { return nMaxFuncNameLen; }
private:
- List aFunctionList; /**< List of functions */
+ ::std::vector<const ScFuncDesc*> aFunctionList; /**< List of functions */
+ ::std::vector<const ScFuncDesc*>::iterator aFunctionListIter; /**< position in function list */
xub_StrLen nMaxFuncNameLen; /**< Length of longest function name */
};
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index 2d34426..8073256 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -39,7 +39,6 @@
#include <rtl/ustring.hxx>
#include <rtl/ustrbuf.hxx>
-#include <tools/list.hxx>
#include <tools/rcid.h>
#include <tools/resid.hxx>
#include <tools/string.hxx>
@@ -379,14 +378,13 @@ ScFunctionList::ScFunctionList() :
ScFuncDesc* pDesc = NULL;
xub_StrLen nStrLen = 0;
FuncCollection* pFuncColl;
+ ::std::list<ScFuncDesc*> tmpFuncList;
sal_uInt16 nDescBlock[] =
{
RID_SC_FUNCTION_DESCRIPTIONS1,
RID_SC_FUNCTION_DESCRIPTIONS2
};
- aFunctionList.Clear();
-
for (sal_uInt16 k = 0; k < SAL_N_ELEMENTS(nDescBlock); ++k)
{
::std::auto_ptr<ScResourcePublisher> pBlock( new ScResourcePublisher( ScResId( nDescBlock[k] ) ) );
@@ -412,7 +410,7 @@ ScFunctionList::ScFunctionList() :
else
{
pDesc->nFIndex = i;
- aFunctionList.Insert( pDesc, LIST_APPEND );
+ tmpFuncList.push_back(pDesc);
nStrLen = (*(pDesc->pFuncName)).getLength();
if (nStrLen > nMaxFuncNameLen)
@@ -524,7 +522,7 @@ ScFunctionList::ScFunctionList() :
}
}
- aFunctionList.Insert(pDesc, LIST_APPEND);
+ tmpFuncList.push_back(pDesc);
nStrLen = (*(pDesc->pFuncName)).getLength();
if ( nStrLen > nMaxFuncNameLen)
nMaxFuncNameLen = nStrLen;
@@ -541,7 +539,7 @@ ScFunctionList::ScFunctionList() :
if ( pUnoAddIns->FillFunctionDesc( nFunc, *pDesc ) )
{
- aFunctionList.Insert(pDesc, LIST_APPEND);
+ tmpFuncList.push_back(pDesc);
nStrLen = (*(pDesc->pFuncName)).getLength();
if (nStrLen > nMaxFuncNameLen)
nMaxFuncNameLen = nStrLen;
@@ -549,6 +547,14 @@ ScFunctionList::ScFunctionList() :
else
delete pDesc;
}
+
+ //Move list to vector for better random access performance
+ aFunctionList.reserve(tmpFuncList.size());
+ aFunctionList.assign(tmpFuncList.begin(),tmpFuncList.end());
+ tmpFuncList.clear();
+
+ //Initialize iterator
+ aFunctionListIter = aFunctionList.end();
}
ScFunctionList::~ScFunctionList()
@@ -561,6 +567,36 @@ ScFunctionList::~ScFunctionList()
}
}
+const ScFuncDesc* ScFunctionList::First()
+{
+ const ScFuncDesc* pDesc = NULL;
+ aFunctionListIter = aFunctionList.begin();
+ if(aFunctionListIter != aFunctionList.end())
+ pDesc = *aFunctionListIter;
+
+ return pDesc;
+}
+
+const ScFuncDesc* ScFunctionList::Next()
+{
+ const ScFuncDesc* pDesc = NULL;
+ if(aFunctionListIter != aFunctionList.end())
+ {
+ if((++aFunctionListIter) != aFunctionList.end())
+ pDesc = *aFunctionListIter;
+ }
+ return pDesc;
+}
+
+const ScFuncDesc* ScFunctionList::GetFunction( sal_uInt32 nIndex ) const
+{
+ const ScFuncDesc* pDesc = NULL;
+ if(nIndex < aFunctionList.size())
+ pDesc = aFunctionList.at(nIndex);
+
+ return pDesc;
+}
+
//===================================================================
// class ScFunctionCategory:
//===================================================================
More information about the Libreoffice-commits
mailing list