[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