[PATCH] Convert SbxFactory from SV_DECL_PTRARR_DEL to boost::ptr_vector
Noel Grandin
noel at peralex.com
Mon Feb 27 06:26:41 PST 2012
---
basic/inc/basic/sbxbase.hxx | 3 ++-
basic/source/sbx/sbxbase.cxx | 25 +++++++++++--------------
basic/source/sbx/sbxscan.cxx | 1 +
3 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/basic/inc/basic/sbxbase.hxx b/basic/inc/basic/sbxbase.hxx
index 55341fa..e760c4f 100644
--- a/basic/inc/basic/sbxbase.hxx
+++ b/basic/inc/basic/sbxbase.hxx
@@ -33,12 +33,13 @@
#include "svl/svarray.hxx"
#include <basic/sbxdef.hxx>
#include "basicdllapi.h"
+#include <boost/ptr_container/ptr_vector.hpp>
class SbxFactory;
class SbxVariable;
class SbxBasicFormater;
-SV_DECL_PTRARR_DEL(SbxFacs,SbxFactory*,5)
+typedef boost::ptr_vector<SbxFactory> SbxFacs;
// AppData structure for SBX:
struct SbxAppData
diff --git a/basic/source/sbx/sbxbase.cxx b/basic/source/sbx/sbxbase.cxx
index e2987d0..048ea3c 100644
--- a/basic/source/sbx/sbxbase.cxx
+++ b/basic/source/sbx/sbxbase.cxx
@@ -36,11 +36,10 @@
#include <rtl/instance.hxx>
#include <rtl/oustringostreaminserter.hxx>
#include <sal/log.hxx>
+#include <boost/foreach.hpp>
// AppData-Structure for SBX:
-SV_IMPL_PTRARR(SbxFacs,SbxFactory*);
-
TYPEINIT0(SbxBase)
namespace
@@ -147,28 +146,27 @@ void SbxBase::ResetError()
void SbxBase::AddFactory( SbxFactory* pFac )
{
SbxAppData& r = GetSbxData_Impl();
- const SbxFactory* pTemp = pFac;
// From 1996-03-06: take the HandleLast-Flag into account
- sal_uInt16 nPos = r.aFacs.Count(); // Insert position
+ sal_uInt16 nPos = r.aFacs.size(); // Insert position
if( !pFac->IsHandleLast() ) // Only if not self HandleLast
{
// Rank new factory in front of factories with HandleLast
while( nPos > 0 &&
- (static_cast<SbxFactory*>(r.aFacs.GetObject( nPos-1 )))->IsHandleLast() )
+ r.aFacs[ nPos-1 ].IsHandleLast() )
nPos--;
}
- r.aFacs.Insert( pTemp, nPos );
+ r.aFacs.insert( r.aFacs.begin() + nPos, pFac );
}
void SbxBase::RemoveFactory( SbxFactory* pFac )
{
SbxAppData& r = GetSbxData_Impl();
- for( sal_uInt16 i = 0; i < r.aFacs.Count(); i++ )
+ for(SbxFacs::iterator it = r.aFacs.begin(); it != r.aFacs.end(); ++it)
{
- if( r.aFacs.GetObject( i ) == pFac )
+ if( &(*it) == pFac )
{
- r.aFacs.Remove( i, 1 ); break;
+ r.aFacs.release( it ).release(); break;
}
}
}
@@ -200,10 +198,9 @@ SbxBase* SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator )
// Unknown type: go over the factories!
SbxAppData& r = GetSbxData_Impl();
SbxBase* pNew = NULL;
- for( sal_uInt16 i = 0; i < r.aFacs.Count(); i++ )
+ BOOST_FOREACH(SbxFactory& rFac, r.aFacs)
{
- SbxFactory* pFac = r.aFacs.GetObject( i );
- pNew = pFac->Create( nSbxId, nCreator );
+ pNew = rFac.Create( nSbxId, nCreator );
if( pNew )
break;
}
@@ -215,9 +212,9 @@ SbxObject* SbxBase::CreateObject( const rtl::OUString& rClass )
{
SbxAppData& r = GetSbxData_Impl();
SbxObject* pNew = NULL;
- for( sal_uInt16 i = 0; i < r.aFacs.Count(); i++ )
+ BOOST_FOREACH(SbxFactory& rFac, r.aFacs)
{
- pNew = r.aFacs.GetObject( i )->CreateObject( rClass );
+ pNew = rFac.CreateObject( rClass );
if( pNew )
break;
}
diff --git a/basic/source/sbx/sbxscan.cxx b/basic/source/sbx/sbxscan.cxx
index 18bb46d..a253377 100644
--- a/basic/source/sbx/sbxscan.cxx
+++ b/basic/source/sbx/sbxscan.cxx
@@ -43,6 +43,7 @@
#include "sbxres.hxx"
#include <basic/sbxbase.hxx>
+#include <basic/sbxfac.hxx>
#include <basic/sbxform.hxx>
#include <svtools/svtools.hrc>
--
1.7.5.4
--------------000401060906090500060305--
More information about the LibreOffice
mailing list