summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--formula/source/ui/dlg/FormulaHelper.cxx4
-rw-r--r--include/formula/IFunctionDescription.hxx5
-rw-r--r--sc/inc/funcdesc.hxx10
-rw-r--r--sc/source/core/data/funcdesc.cxx7
4 files changed, 14 insertions, 12 deletions
diff --git a/formula/source/ui/dlg/FormulaHelper.cxx b/formula/source/ui/dlg/FormulaHelper.cxx
index c6448560f43d..ab1baa6b3575 100644
--- a/formula/source/ui/dlg/FormulaHelper.cxx
+++ b/formula/source/ui/dlg/FormulaHelper.cxx
@@ -23,8 +23,6 @@
#include <unotools/charclass.hxx>
#include <unotools/syslocale.hxx>
-#include <boost/scoped_ptr.hpp>
-
namespace formula
{
@@ -95,7 +93,7 @@ bool FormulaHelper::GetNextFunc( const OUString& rFormula,
const sal_uInt32 nCategoryCount = m_pFunctionManager->getCount();
for(sal_uInt32 j= 0; j < nCategoryCount && !*ppFDesc; ++j)
{
- boost::scoped_ptr<const IFunctionCategory> pCategory(m_pFunctionManager->getCategory(j));
+ const IFunctionCategory* pCategory = m_pFunctionManager->getCategory(j);
const sal_uInt32 nCount = pCategory->getCount();
for(sal_uInt32 i = 0 ; i < nCount; ++i)
{
diff --git a/include/formula/IFunctionDescription.hxx b/include/formula/IFunctionDescription.hxx
index 1b37d5128244..85f42aaf9036 100644
--- a/include/formula/IFunctionDescription.hxx
+++ b/include/formula/IFunctionDescription.hxx
@@ -60,7 +60,7 @@ namespace formula
~IFunctionManager() {}
};
- class IFunctionCategory
+ class SAL_NO_VTABLE IFunctionCategory
{
public:
IFunctionCategory(){}
@@ -70,7 +70,8 @@ namespace formula
virtual sal_uInt32 getNumber() const = 0;
virtual OUString getName() const = 0;
- virtual ~IFunctionCategory() {}
+ protected:
+ ~IFunctionCategory() {}
};
class SAL_NO_VTABLE IFunctionDescription
diff --git a/sc/inc/funcdesc.hxx b/sc/inc/funcdesc.hxx
index e746462e426d..43e4101c59b7 100644
--- a/sc/inc/funcdesc.hxx
+++ b/sc/inc/funcdesc.hxx
@@ -27,6 +27,7 @@
#include <formula/IFunctionDescription.hxx>
#include <sal/types.h>
#include <rtl/ustring.hxx>
+#include <map>
#define MAX_FUNCCAT 12 /* maximum number of categories for functions */
#define LRU_MAX 10 /* maximal number of last recently used functions */
@@ -361,7 +362,7 @@ public:
/**
Returns a category.
- Creates an IFunctionCategory object from a category specified by nPos.
+ Returns an IFunctionCategory object for a category specified by nPos.
@param nPos
the index of the category, note that 0 maps to the first category not the cumulative ('All') category.
@@ -399,9 +400,10 @@ public:
private:
ScFunctionList* pFuncList; /**< list of all calc functions */
- ::std::vector<const ScFuncDesc*>* aCatLists[MAX_FUNCCAT]; /**< array of all categories, 0 is the cumulative ('All') category */
- mutable ::std::vector<const ScFuncDesc*>::iterator pCurCatListIter; /**< position in current category */
- mutable ::std::vector<const ScFuncDesc*>::iterator pCurCatListEnd; /**< end of current category */
+ std::vector<const ScFuncDesc*>* aCatLists[MAX_FUNCCAT]; /**< array of all categories, 0 is the cumulative ('All') category */
+ mutable std::map< sal_uInt32, std::shared_ptr<ScFunctionCategory> > m_aCategories; /**< map of category pos to IFunctionCategory */
+ mutable std::vector<const ScFuncDesc*>::iterator pCurCatListIter; /**< position in current category */
+ mutable std::vector<const ScFuncDesc*>::iterator pCurCatListEnd; /**< end of current category */
};
#endif // INCLUDED_SC_INC_FUNCDESC_HXX
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index 9dd713ded9f3..d9d026685c20 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -752,12 +752,13 @@ sal_uInt32 ScFunctionMgr::getCount() const
const formula::IFunctionCategory* ScFunctionMgr::getCategory(sal_uInt32 nCategory) const
{
- formula::IFunctionCategory* pRet = NULL;
if ( nCategory < (MAX_FUNCCAT-1) )
{
- pRet = new ScFunctionCategory(const_cast<ScFunctionMgr*>(this),aCatLists[nCategory+1],nCategory); // aCatLists[0] is "all"
+ if (m_aCategories.find(nCategory) == m_aCategories.end())
+ m_aCategories[nCategory].reset(new ScFunctionCategory(const_cast<ScFunctionMgr*>(this),aCatLists[nCategory+1],nCategory)); // aCatLists[0] is "all"
+ return m_aCategories[nCategory].get();
}
- return pRet;
+ return NULL;
}
const formula::IFunctionDescription* ScFunctionMgr::getFunctionByName(const OUString& _sFunctionName) const