Kaydet (Commit) 2e23b6b9 authored tarafından Ian's avatar Ian Kaydeden (comit) David Tardon

tdf#90222: Removed ScaList from pricing scaddin

Removed the ScaList type.

Migrated the ScaFuncDataList to a vector and changed lookup to
std::find_if with a functor. This reduces memory use slightly and makes
the use of the lookup result a little simpler.

Change-Id: I4e5f4d27107512a7c53935f123d5e7e8aca625ee
Reviewed-on: https://gerrit.libreoffice.org/17652Reviewed-by: 's avatarDavid Tardon <dtardon@redhat.com>
Tested-by: 's avatarDavid Tardon <dtardon@redhat.com>
üst a5cebd1b
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <cppuhelper/factory.hxx> #include <cppuhelper/factory.hxx>
#include <cppuhelper/supportsservice.hxx> #include <cppuhelper/supportsservice.hxx>
#include <iostream> #include <iostream>
#include <algorithm>
#include <osl/diagnose.h> #include <osl/diagnose.h>
#include <rtl/math.hxx> #include <rtl/math.hxx>
#include <rtl/ustrbuf.hxx> #include <rtl/ustrbuf.hxx>
...@@ -45,33 +46,6 @@ using namespace sca::pricing; ...@@ -45,33 +46,6 @@ using namespace sca::pricing;
#define STR_FROM_ANSI( s ) OUString( s, strlen( s ), RTL_TEXTENCODING_MS_1252 ) #define STR_FROM_ANSI( s ) OUString( s, strlen( s ), RTL_TEXTENCODING_MS_1252 )
const sal_uInt32 ScaList::nStartSize = 16;
const sal_uInt32 ScaList::nIncrSize = 16;
ScaList::ScaList() :
pData( new void*[ nStartSize ] ),
nSize( nStartSize ),
nCount( 0 ),
nCurr( 0 )
{
}
ScaList::~ScaList()
{
delete[] pData;
}
void ScaList::_Grow()
{
nSize += nIncrSize;
void** pNewData = new void*[ nSize ];
memcpy( pNewData, pData, nCount * sizeof( void* ) );
delete[] pData;
pData = pNewData;
}
ScaResId::ScaResId( sal_uInt16 nId, ResMgr& rResMgr ) : ScaResId::ScaResId( sal_uInt16 nId, ResMgr& rResMgr ) :
ResId( nId, rResMgr ) ResId( nId, rResMgr )
{ {
...@@ -122,14 +96,10 @@ sal_uInt16 ScaFuncData::GetStrIndex( sal_uInt16 nParam ) const ...@@ -122,14 +96,10 @@ sal_uInt16 ScaFuncData::GetStrIndex( sal_uInt16 nParam ) const
return (nParam > nParamCount) ? (nParamCount * 2) : (nParam * 2); return (nParam > nParamCount) ? (nParamCount * 2) : (nParam * 2);
} }
void sca::pricing::InitScaFuncDataMap( ScaFuncDataMap& rMap, ResMgr& rResMgr ) void sca::pricing::InitScaFuncDataList( ScaFuncDataList& rList, ResMgr& rResMgr )
{ {
for( sal_uInt16 nIndex = 0; nIndex < SAL_N_ELEMENTS(pFuncDataArr); nIndex++ ) for( sal_uInt16 nIndex = 0; nIndex < SAL_N_ELEMENTS(pFuncDataArr); nIndex++ )
{ rList.push_back( ScaFuncData( pFuncDataArr[ nIndex ], rResMgr ) ) ;
rMap.insert( std::make_pair(
OUString::createFromAscii(pFuncDataArr[ nIndex ].pIntName),
ScaFuncData( pFuncDataArr[ nIndex ], rResMgr ) ) );
}
} }
ScaFuncRes::ScaFuncRes( ResId& rResId, ResMgr& rResMgr, sal_uInt16 nIndex, OUString& rRet ) : ScaFuncRes::ScaFuncRes( ResId& rResId, ResMgr& rResMgr, sal_uInt16 nIndex, OUString& rRet ) :
...@@ -178,13 +148,13 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL pricing_component_getFactory( ...@@ -178,13 +148,13 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL pricing_component_getFactory(
ScaPricingAddIn::ScaPricingAddIn() : ScaPricingAddIn::ScaPricingAddIn() :
pDefLocales( NULL ), pDefLocales( NULL ),
pResMgr( NULL ), pResMgr( NULL ),
pFuncDataMap( NULL ) pFuncDataList( NULL )
{ {
} }
ScaPricingAddIn::~ScaPricingAddIn() ScaPricingAddIn::~ScaPricingAddIn()
{ {
delete pFuncDataMap; delete pFuncDataList;
delete pResMgr; delete pResMgr;
delete[] pDefLocales; delete[] pDefLocales;
} }
...@@ -227,16 +197,16 @@ void ScaPricingAddIn::InitData() ...@@ -227,16 +197,16 @@ void ScaPricingAddIn::InitData()
{ {
delete pResMgr; delete pResMgr;
pResMgr = ResMgr::CreateResMgr("pricing", LanguageTag( aFuncLoc) ); pResMgr = ResMgr::CreateResMgr("pricing", LanguageTag( aFuncLoc) );
delete pFuncDataMap; delete pFuncDataList;
if(pResMgr) if(pResMgr)
{ {
pFuncDataMap = new ScaFuncDataMap; pFuncDataList = new ScaFuncDataList;
InitScaFuncDataMap( *pFuncDataMap, *pResMgr ); InitScaFuncDataList( *pFuncDataList, *pResMgr );
} }
else else
{ {
pFuncDataMap = nullptr; pFuncDataList = nullptr;
} }
if( pDefLocales ) if( pDefLocales )
...@@ -328,12 +298,12 @@ OUString SAL_CALL ScaPricingAddIn::getDisplayFunctionName( const OUString& aProg ...@@ -328,12 +298,12 @@ OUString SAL_CALL ScaPricingAddIn::getDisplayFunctionName( const OUString& aProg
{ {
OUString aRet; OUString aRet;
auto fDataIt = pFuncDataMap->find( aProgrammaticName ); auto fDataIt = std::find_if(pFuncDataList->begin(), pFuncDataList->end(),
if(fDataIt != pFuncDataMap->end() ) FindScaFuncData( aProgrammaticName ) );
if(fDataIt != pFuncDataList->end() )
{ {
auto data = fDataIt->second; aRet = GetDisplFuncStr( fDataIt->GetUINameID() );
aRet = GetDisplFuncStr( data.GetUINameID() ); if( fDataIt->IsDouble() )
if( data.IsDouble() )
aRet += STR_FROM_ANSI( "_ADD" ); aRet += STR_FROM_ANSI( "_ADD" );
} }
else else
...@@ -349,9 +319,10 @@ OUString SAL_CALL ScaPricingAddIn::getFunctionDescription( const OUString& aProg ...@@ -349,9 +319,10 @@ OUString SAL_CALL ScaPricingAddIn::getFunctionDescription( const OUString& aProg
{ {
OUString aRet; OUString aRet;
auto fDataIt = pFuncDataMap->find( aProgrammaticName ); auto fDataIt = std::find_if( pFuncDataList->begin(), pFuncDataList->end(),
if( fDataIt != pFuncDataMap->end() ) FindScaFuncData( aProgrammaticName ) );
aRet = GetFuncDescrStr( fDataIt->second.GetDescrID(), 1 ); if( fDataIt != pFuncDataList->end() )
aRet = GetFuncDescrStr( fDataIt->GetDescrID(), 1 );
return aRet; return aRet;
} }
...@@ -361,13 +332,13 @@ OUString SAL_CALL ScaPricingAddIn::getDisplayArgumentName( ...@@ -361,13 +332,13 @@ OUString SAL_CALL ScaPricingAddIn::getDisplayArgumentName(
{ {
OUString aRet; OUString aRet;
auto fDataIt = pFuncDataMap->find( aProgrammaticName ); auto fDataIt = std::find_if( pFuncDataList->begin(), pFuncDataList->end(),
if( fDataIt != pFuncDataMap->end() && (nArgument <= 0xFFFF) ) FindScaFuncData( aProgrammaticName ) );
if( fDataIt != pFuncDataList->end() && (nArgument <= 0xFFFF) )
{ {
auto data = fDataIt->second; sal_uInt16 nStr = fDataIt->GetStrIndex( static_cast< sal_uInt16 >( nArgument ) );
sal_uInt16 nStr = data.GetStrIndex( static_cast< sal_uInt16 >( nArgument ) );
if( nStr ) if( nStr )
aRet = GetFuncDescrStr( data.GetDescrID(), nStr ); aRet = GetFuncDescrStr( fDataIt->GetDescrID(), nStr );
else else
aRet = STR_FROM_ANSI( "internal" ); aRet = STR_FROM_ANSI( "internal" );
} }
...@@ -380,13 +351,13 @@ OUString SAL_CALL ScaPricingAddIn::getArgumentDescription( ...@@ -380,13 +351,13 @@ OUString SAL_CALL ScaPricingAddIn::getArgumentDescription(
{ {
OUString aRet; OUString aRet;
auto fDataIt = pFuncDataMap->find( aProgrammaticName ); auto fDataIt = std::find_if( pFuncDataList->begin(), pFuncDataList->end(),
if( fDataIt != pFuncDataMap->end() && (nArgument <= 0xFFFF) ) FindScaFuncData( aProgrammaticName ) );
if( fDataIt != pFuncDataList->end() && (nArgument <= 0xFFFF) )
{ {
auto data = fDataIt->second; sal_uInt16 nStr = fDataIt->GetStrIndex( static_cast< sal_uInt16 >( nArgument ) );
sal_uInt16 nStr = data.GetStrIndex( static_cast< sal_uInt16 >( nArgument ) );
if( nStr ) if( nStr )
aRet = GetFuncDescrStr( data.GetDescrID(), nStr + 1 ); aRet = GetFuncDescrStr( fDataIt->GetDescrID(), nStr + 1 );
else else
aRet = STR_FROM_ANSI( "for internal use only" ); aRet = STR_FROM_ANSI( "for internal use only" );
} }
...@@ -399,10 +370,11 @@ OUString SAL_CALL ScaPricingAddIn::getProgrammaticCategoryName( ...@@ -399,10 +370,11 @@ OUString SAL_CALL ScaPricingAddIn::getProgrammaticCategoryName(
{ {
OUString aRet; OUString aRet;
auto fDataIt = pFuncDataMap->find( aProgrammaticName ); auto fDataIt = std::find_if( pFuncDataList->begin(), pFuncDataList->end(),
if( fDataIt != pFuncDataMap->end() ) FindScaFuncData( aProgrammaticName ) );
if( fDataIt != pFuncDataList->end() )
{ {
switch( fDataIt->second.GetCategory() ) switch( fDataIt->GetCategory() )
{ {
case ScaCat_DateTime: aRet = STR_FROM_ANSI( "Date&Time" ); break; case ScaCat_DateTime: aRet = STR_FROM_ANSI( "Date&Time" ); break;
case ScaCat_Text: aRet = STR_FROM_ANSI( "Text" ); break; case ScaCat_Text: aRet = STR_FROM_ANSI( "Text" ); break;
...@@ -431,11 +403,12 @@ OUString SAL_CALL ScaPricingAddIn::getDisplayCategoryName( ...@@ -431,11 +403,12 @@ OUString SAL_CALL ScaPricingAddIn::getDisplayCategoryName(
uno::Sequence< sheet::LocalizedName > SAL_CALL ScaPricingAddIn::getCompatibilityNames( uno::Sequence< sheet::LocalizedName > SAL_CALL ScaPricingAddIn::getCompatibilityNames(
const OUString& aProgrammaticName ) throw( uno::RuntimeException, std::exception ) const OUString& aProgrammaticName ) throw( uno::RuntimeException, std::exception )
{ {
auto fDataIt = pFuncDataMap->find( aProgrammaticName ); auto fDataIt = std::find_if( pFuncDataList->begin(), pFuncDataList->end(),
if( fDataIt == pFuncDataMap->end() ) FindScaFuncData( aProgrammaticName ) );
if( fDataIt == pFuncDataList->end() )
return uno::Sequence< sheet::LocalizedName >( 0 ); return uno::Sequence< sheet::LocalizedName >( 0 );
const std::vector<OUString>& rStrList = fDataIt->second.GetCompNameList(); const std::vector<OUString>& rStrList = fDataIt->GetCompNameList();
sal_uInt32 nCount = rStrList.size(); sal_uInt32 nCount = rStrList.size();
uno::Sequence< sheet::LocalizedName > aRet( nCount ); uno::Sequence< sheet::LocalizedName > aRet( nCount );
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <string.h> #include <string.h>
#include <vector> #include <vector>
#include <map>
#include <com/sun/star/lang/XServiceName.hpp> #include <com/sun/star/lang/XServiceName.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp>
...@@ -49,49 +48,6 @@ ...@@ -49,49 +48,6 @@
namespace sca { namespace sca {
namespace pricing { namespace pricing {
class ScaList
{
private:
static const sal_uInt32 nStartSize;
static const sal_uInt32 nIncrSize;
void** pData; // pointer array
sal_uInt32 nSize; // array size
sal_uInt32 nCount; // next index to be inserted at
sal_uInt32 nCurr; // current pos for iterations
void _Grow();
inline void Grow();
public:
ScaList();
virtual ~ScaList();
inline sal_uInt32 Count() const { return nCount; }
inline const void* GetObject( sal_uInt32 nIndex ) const
{ return (nIndex < nCount) ? pData[ nIndex ] : NULL; }
inline void* First() { return nCount ? pData[ nCurr = 0 ] : NULL; }
inline void* Next() { return (nCurr + 1 < nCount) ? pData[ ++nCurr ] : NULL; }
inline void Append( void* pNew );
};
inline void ScaList::Grow()
{
if( nCount >= nSize )
_Grow();
}
inline void ScaList::Append( void* pNew )
{
Grow();
pData[ nCount++ ] = pNew;
}
class ScaResId : public ResId class ScaResId : public ResId
{ {
public: public:
...@@ -211,9 +167,17 @@ public: ...@@ -211,9 +167,17 @@ public:
}; };
typedef std::map<OUString, ScaFuncData> ScaFuncDataMap; typedef std::vector<ScaFuncData> ScaFuncDataList;
void InitScaFuncDataList ( ScaFuncDataList& rMap, ResMgr& rResMgr );
void InitScaFuncDataMap ( ScaFuncDataMap& rMap, ResMgr& rResMgr ); // Predicate for use with std::find_if
struct FindScaFuncData
{
const OUString& m_rId;
explicit FindScaFuncData( const OUString& rId ) : m_rId(rId) {}
bool operator() ( ScaFuncData& rCandidate ) const { return rCandidate.Is(m_rId); }
};
} // namespace pricing } // namespace pricing
} // namespace sca } // namespace sca
...@@ -238,7 +202,7 @@ private: ...@@ -238,7 +202,7 @@ private:
css::lang::Locale aFuncLoc; css::lang::Locale aFuncLoc;
css::lang::Locale* pDefLocales; css::lang::Locale* pDefLocales;
ResMgr* pResMgr; ResMgr* pResMgr;
sca::pricing::ScaFuncDataMap* pFuncDataMap; sca::pricing::ScaFuncDataList* pFuncDataList;
void InitDefLocales(); void InitDefLocales();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment