diff options
author | Kohei Yoshida <kohei.yoshida@suse.com> | 2012-02-06 21:22:29 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@suse.com> | 2012-02-06 21:23:23 -0500 |
commit | 9ccaa4b1468527bbec12d7e0fccf4ea443478f50 (patch) | |
tree | a37b33a47e32b402f8c54ff1b1ffedc409674844 /sc/source | |
parent | 2bf1a98da8a5bf0e8a0f28c0f2d8846dc17970d4 (diff) |
FuncCollection no longer a child of ScSortedCollection.
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/data/funcdesc.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/inc/adiasync.hxx | 13 | ||||
-rw-r--r-- | sc/source/core/tool/adiasync.cxx | 12 | ||||
-rw-r--r-- | sc/source/core/tool/callform.cxx | 88 | ||||
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 13 | ||||
-rw-r--r-- | sc/source/core/tool/interpr4.cxx | 7 | ||||
-rw-r--r-- | sc/source/core/tool/parclass.cxx | 41 | ||||
-rw-r--r-- | sc/source/ui/unoobj/funcuno.cxx | 20 |
8 files changed, 106 insertions, 96 deletions
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx index cbaeb21014e7..4175effc7d25 100644 --- a/sc/source/core/data/funcdesc.cxx +++ b/sc/source/core/data/funcdesc.cxx @@ -379,7 +379,6 @@ ScFunctionList::ScFunctionList() : { ScFuncDesc* pDesc = NULL; xub_StrLen nStrLen = 0; - FuncCollection* pFuncColl; ::std::list<ScFuncDesc*> tmpFuncList; sal_uInt16 nDescBlock[] = { @@ -441,11 +440,12 @@ ScFunctionList::ScFunctionList() : ::rtl::OUString aDefArgDescNone = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("none")); ::rtl::OUString aArgName, aArgDesc; - pFuncColl = ScGlobal::GetFuncCollection(); - for (sal_uInt16 i = 0; i < pFuncColl->GetCount(); ++i) + const FuncCollection& rFuncColl = *ScGlobal::GetFuncCollection(); + FuncCollection::const_iterator it = rFuncColl.begin(), itEnd = rFuncColl.end(); + for (; it != itEnd; ++it) { + const FuncData* pAddInFuncData = it->second; pDesc = new ScFuncDesc; - FuncData *pAddInFuncData = (FuncData*)pFuncColl->At(i); sal_uInt16 nArgs = pAddInFuncData->GetParamCount() - 1; pAddInFuncData->getParamDesc( aArgName, aArgDesc, 0 ); pDesc->nFIndex = nNextId++; // ??? OpCode vergeben diff --git a/sc/source/core/inc/adiasync.hxx b/sc/source/core/inc/adiasync.hxx index 4d47d3d5cf09..cfb3c214266b 100644 --- a/sc/source/core/inc/adiasync.hxx +++ b/sc/source/core/inc/adiasync.hxx @@ -59,16 +59,15 @@ private: String* pStr; }; ScAddInDocs* pDocs; // Liste der benutzenden Dokumente - FuncData* pFuncData; // Zeiger auf die Daten in der Collection + FuncData* mpFuncData; // Zeiger auf die Daten in der Collection sal_uLong nHandle; // wird von double auf sal_uLong gecasted - ParamType eType; // PTR_DOUBLE oder PTR_STRING Ergebnis + ParamType meType; // PTR_DOUBLE oder PTR_STRING Ergebnis sal_Bool bValid; // ob Wert gueltig public: - // cTor nur wenn ScAddInAsync::Get fehlschlaegt! - // nIndex: Index aus der FunctionCollection - ScAddInAsync( sal_uLong nHandle, sal_uInt16 nIndex, - ScDocument* pDoc ); + // cTor nur wenn ScAddInAsync::Get fehlschlaegt! + // nIndex: Index aus der FunctionCollection + ScAddInAsync(sal_uLong nHandle, FuncData* pFuncData, ScDocument* pDoc); // default-cTor nur fuer das eine globale aSeekObj !!! ScAddInAsync(); virtual ~ScAddInAsync(); @@ -76,7 +75,7 @@ public: static void CallBack( sal_uLong nHandle, void* pData ); static void RemoveDocument( ScDocument* pDocument ); sal_Bool IsValid() const { return bValid; } - ParamType GetType() const { return eType; } + ParamType GetType() const { return meType; } double GetValue() const { return nVal; } const String& GetString() const { return *pStr; } sal_Bool HasDocument( ScDocument* pDoc ) const diff --git a/sc/source/core/tool/adiasync.cxx b/sc/source/core/tool/adiasync.cxx index e7b21a8fa306..20cfc65b38d5 100644 --- a/sc/source/core/tool/adiasync.cxx +++ b/sc/source/core/tool/adiasync.cxx @@ -68,16 +68,16 @@ ScAddInAsync::ScAddInAsync() : -ScAddInAsync::ScAddInAsync( sal_uLong nHandleP, sal_uInt16 nIndex, ScDocument* pDoc ) : +ScAddInAsync::ScAddInAsync(sal_uLong nHandleP, FuncData* pFuncData, ScDocument* pDoc) : SvtBroadcaster(), pStr( NULL ), + mpFuncData(pFuncData), nHandle( nHandleP ), + meType(pFuncData->GetAsyncType()), bValid( false ) { pDocs = new ScAddInDocs( 1 ); pDocs->Insert( pDoc ); - pFuncData = (FuncData*)ScGlobal::GetFuncCollection()->At(nIndex); - eType = pFuncData->GetAsyncType(); theAddInAsyncTbl.Insert( this ); } @@ -89,8 +89,8 @@ ScAddInAsync::~ScAddInAsync() if ( nHandle ) { // im dTor wg. theAddInAsyncTbl.DeleteAndDestroy in ScGlobal::Clear - pFuncData->Unadvice( (double)nHandle ); - if ( eType == PTR_STRING && pStr ) // mit Typvergleich wg. Union! + mpFuncData->Unadvice( (double)nHandle ); + if ( meType == PTR_STRING && pStr ) // mit Typvergleich wg. Union! delete pStr; delete pDocs; } @@ -124,7 +124,7 @@ void ScAddInAsync::CallBack( sal_uLong nHandleP, void* pData ) delete p; return ; } - switch ( p->eType ) + switch ( p->meType ) { case PTR_DOUBLE : p->nVal = *(double*)pData; diff --git a/sc/source/core/tool/callform.cxx b/sc/source/core/tool/callform.cxx index 3c9d5f042ef3..ab0b8fc12355 100644 --- a/sc/source/core/tool/callform.cxx +++ b/sc/source/core/tool/callform.cxx @@ -39,8 +39,6 @@ #include "global.hxx" #include "adiasync.hxx" -#include <boost/ptr_container/ptr_map.hpp> - //------------------------------------------------------------------------ extern "C" { @@ -88,6 +86,21 @@ typedef void (CALLTYPE* FARPROC) ( void ); #define ADVICE "Advice" #define UNADVICE "Unadvice" +class ModuleData +{ +friend class ModuleCollection; + rtl::OUString aName; + osl::Module* pInstance; +public: + ModuleData(const rtl::OUString& rStr, osl::Module* pInst) : aName(rStr), pInstance(pInst) {} + ModuleData(const ModuleData& rData) : aName(rData.aName) {pInstance = new osl::Module(aName);} + ~ModuleData() { delete pInstance; } + + const rtl::OUString& GetName() const { return aName; } + osl::Module* GetInstance() const { return pInstance; } + void FreeInstance() { delete pInstance; pInstance = 0; } +}; + FuncData::FuncData(const rtl::OUString& rIName) : pModuleData (NULL), aInternalName (rIName), @@ -122,7 +135,6 @@ FuncData::FuncData(const ModuleData*pModule, //------------------------------------------------------------------------ FuncData::FuncData(const FuncData& rData) : - ScDataObject(), pModuleData (rData.pModuleData), aInternalName (rData.aInternalName), aFuncName (rData.aFuncName), @@ -134,38 +146,6 @@ FuncData::FuncData(const FuncData& rData) : eParamType[i] = rData.eParamType[i]; } -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -short FuncCollection::Compare(ScDataObject* pKey1, ScDataObject* pKey2) const -{ - return (short) ScGlobal::GetpTransliteration()->compareString( - ((FuncData*)pKey1)->aInternalName, ((FuncData*)pKey2)->aInternalName ); -} - -//------------------------------------------------------------------------ - -bool FuncCollection::SearchFunc( const rtl::OUString& rName, sal_uInt16& rIndex ) const -{ - FuncData aDataObj(rName); - return Search( &aDataObj, rIndex ); -} - -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -class ModuleData -{ -friend class ModuleCollection; - rtl::OUString aName; - osl::Module* pInstance; -public: - ModuleData(const rtl::OUString& rStr, osl::Module* pInst) : aName(rStr), pInstance(pInst) {} - ModuleData(const ModuleData& rData) : aName(rData.aName) {pInstance = new osl::Module(aName);} - ~ModuleData() { delete pInstance; } - - const rtl::OUString& GetName() const { return aName; } - osl::Module* GetInstance() const { return pInstance; } - void FreeInstance() { delete pInstance; pInstance = 0; } -}; - namespace { class ModuleCollection @@ -277,7 +257,7 @@ bool InitExternalFunc(const rtl::OUString& rModuleName) nParamCount, eParamType, eAsyncType ); - pFuncCol->Insert(pFuncData); + pFuncCol->insert(pFuncData); } bRet = sal_True; } @@ -298,7 +278,7 @@ void ExitExternalFunc() //------------------------------------------------------------------------ -bool FuncData::Call(void** ppParam) +bool FuncData::Call(void** ppParam) const { bool bRet = false; osl::Module* pLib = pModuleData->GetInstance(); @@ -413,7 +393,7 @@ const rtl::OUString& FuncData::GetModuleName() const return pModuleData->GetName(); } -bool FuncData::getParamDesc( ::rtl::OUString& aName, ::rtl::OUString& aDesc, sal_uInt16 nParam ) +bool FuncData::getParamDesc( ::rtl::OUString& aName, ::rtl::OUString& aDesc, sal_uInt16 nParam ) const { bool bRet = false; if ( nParam <= nParamCount ) @@ -440,4 +420,36 @@ bool FuncData::getParamDesc( ::rtl::OUString& aName, ::rtl::OUString& aDesc, sal return bRet; } +FuncCollection::FuncCollection() {} +FuncCollection::FuncCollection(const FuncCollection& r) : maData(r.maData) {} + +const FuncData* FuncCollection::findByName(const rtl::OUString& rName) const +{ + MapType::const_iterator it = maData.find(rName); + return it == maData.end() ? NULL : it->second; +} + +FuncData* FuncCollection::findByName(const rtl::OUString& rName) +{ + MapType::iterator it = maData.find(rName); + return it == maData.end() ? NULL : it->second; +} + +void FuncCollection::insert(FuncData* pNew) +{ + rtl::OUString aName = pNew->GetInternalName(); + maData.insert(aName, pNew); +} + +FuncCollection::const_iterator FuncCollection::begin() const +{ + return maData.begin(); +} + +FuncCollection::const_iterator FuncCollection::end() const +{ + return maData.end(); +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index c7dc18ac660d..162eaf5549fd 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -188,7 +188,7 @@ void ScCompiler::DeInit() bool ScCompiler::IsEnglishSymbol( const String& rName ) { // function names are always case-insensitive - String aUpper( ScGlobal::pCharClass->uppercase( rName ) ); + rtl::OUString aUpper = ScGlobal::pCharClass->uppercase(rName); // 1. built-in function name OpCode eOp = ScCompiler::GetEnglishOpCode( aUpper ); @@ -197,15 +197,14 @@ bool ScCompiler::IsEnglishSymbol( const String& rName ) return true; } // 2. old add in functions - sal_uInt16 nIndex; - if ( ScGlobal::GetFuncCollection()->SearchFunc( aUpper, nIndex ) ) + if (ScGlobal::GetFuncCollection()->findByName(aUpper)) { return true; } // 3. new (uno) add in functions - String aIntName(ScGlobal::GetAddInCollection()->FindFunction( aUpper, false )); - if (aIntName.Len()) + rtl::OUString aIntName = ScGlobal::GetAddInCollection()->FindFunction(aUpper, false); + if (!aIntName.isEmpty()) { return true; } @@ -2522,9 +2521,7 @@ bool ScCompiler::IsOpCode( const String& rName, bool bInArray ) if (!aIntName.Len()) { // Old (deprecated) addins first for legacy. - sal_uInt16 nIndex; - bFound = ScGlobal::GetFuncCollection()->SearchFunc( cSymbol, nIndex); - if (bFound) + if (ScGlobal::GetFuncCollection()->findByName(cSymbol)) { ScRawToken aToken; aToken.SetExternal( cSymbol ); diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index b6492dda0a32..fac1d34b9002 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -2495,13 +2495,12 @@ void ScInterpreter::ScDBGet() void ScInterpreter::ScExternal() { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "sc", "er", "ScInterpreter::ScExternal" ); - sal_uInt16 nIndex; sal_uInt8 nParamCount = GetByte(); String aUnoName; String aFuncName( ScGlobal::pCharClass->uppercase( pCur->GetExternal() ) ); - if (ScGlobal::GetFuncCollection()->SearchFunc(aFuncName, nIndex)) + FuncData* pFuncData = ScGlobal::GetFuncCollection()->findByName(aFuncName); + if (pFuncData) { - FuncData* pFuncData = (FuncData*)ScGlobal::GetFuncCollection()->At(nIndex); if (nParamCount <= MAXFUNCPARAM && nParamCount == pFuncData->GetParamCount() - 1) { ParamType eParamType[MAXFUNCPARAM]; @@ -2645,7 +2644,7 @@ void ScInterpreter::ScExternal() ScAddInAsync* pAs = ScAddInAsync::Get( nHandle ); if ( !pAs ) { - pAs = new ScAddInAsync( nHandle, nIndex, pDok ); + pAs = new ScAddInAsync(nHandle, pFuncData, pDok); pMyFormulaCell->StartListening( *pAs ); } else diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx index 7add078052c4..e8509a3e4e39 100644 --- a/sc/source/core/tool/parclass.cxx +++ b/sc/source/core/tool/parclass.cxx @@ -324,31 +324,34 @@ ScParameterClassification::GetExternalParameterType( const formula::FormulaToken { Type eRet = Unknown; // similar to ScInterpreter::ScExternal() - sal_uInt16 nIndex; - String aUnoName; - String aFuncName( ScGlobal::pCharClass->uppercase( pToken->GetExternal())); - if ( ScGlobal::GetFuncCollection()->SearchFunc( aFuncName, nIndex) ) + rtl::OUString aFuncName = ScGlobal::pCharClass->uppercase( pToken->GetExternal()); { - FuncData* pFuncData = (FuncData*)ScGlobal::GetFuncCollection()->At( - nIndex); - if ( nParameter >= pFuncData->GetParamCount() ) - eRet = Bounds; - else + const FuncData* pFuncData = ScGlobal::GetFuncCollection()->findByName(aFuncName); + if (pFuncData) { - switch ( pFuncData->GetParamType( nParameter) ) + if ( nParameter >= pFuncData->GetParamCount() ) + eRet = Bounds; + else { - case PTR_DOUBLE: - case PTR_STRING: - eRet = Value; - break; - default: - eRet = Reference; - // also array types are created using an area reference + switch ( pFuncData->GetParamType( nParameter) ) + { + case PTR_DOUBLE: + case PTR_STRING: + eRet = Value; + break; + default: + eRet = Reference; + // also array types are created using an area reference + } } + return eRet; } } - else if ( (aUnoName = ScGlobal::GetAddInCollection()->FindFunction( - aFuncName, false)).Len() ) + + rtl::OUString aUnoName = + ScGlobal::GetAddInCollection()->FindFunction(aFuncName, false); + + if (!aUnoName.isEmpty()) { // the relevant parts of ScUnoAddInCall without having to create one const ScUnoAddInFuncData* pFuncData = diff --git a/sc/source/ui/unoobj/funcuno.cxx b/sc/source/ui/unoobj/funcuno.cxx index 4297d7255746..6eac293f084e 100644 --- a/sc/source/ui/unoobj/funcuno.cxx +++ b/sc/source/ui/unoobj/funcuno.cxx @@ -355,7 +355,7 @@ SC_IMPL_DUMMY_PROPERTY_LISTENER( ScFunctionAccess ) sal_Bool lcl_AddFunctionToken( ScTokenArray& rArray, const rtl::OUString& rName,const ScCompiler& rCompiler ) { // function names are always case-insensitive - String aUpper( ScGlobal::pCharClass->uppercase( rName ) ); + rtl::OUString aUpper = ScGlobal::pCharClass->uppercase(rName); // same options as in ScCompiler::IsOpCode: // 1. built-in function name @@ -364,25 +364,25 @@ sal_Bool lcl_AddFunctionToken( ScTokenArray& rArray, const rtl::OUString& rName, if ( eOp != ocNone ) { rArray.AddOpCode( eOp ); - return sal_True; + return true; } // 2. old add in functions - sal_uInt16 nIndex; - if ( ScGlobal::GetFuncCollection()->SearchFunc( aUpper, nIndex ) ) + if (ScGlobal::GetFuncCollection()->findByName(aUpper)) { - rArray.AddExternal( aUpper.GetBuffer() ); - return sal_True; + rArray.AddExternal(aUpper.getStr()); + return true; } // 3. new (uno) add in functions - String aIntName(ScGlobal::GetAddInCollection()->FindFunction( aUpper, false )); - if (aIntName.Len()) + rtl::OUString aIntName = + ScGlobal::GetAddInCollection()->FindFunction(aUpper, false); + if (!aIntName.isEmpty()) { - rArray.AddExternal( aIntName.GetBuffer() ); // international name - return sal_True; + rArray.AddExternal(aIntName.getStr()); // international name + return true; } return false; // no valid function name |