Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi

License is on file.

Regards, Noel Grandin

Disclaimer: http://www.peralex.com/disclaimer.html


From dcb00e7ca3c52d3c371eeb614629e3bcb4861e8b Mon Sep 17 00:00:00 2001
From: Noel Grandin <noel@peralex.com>
Date: Mon, 27 Feb 2012 16:26:41 +0200
Subject: [PATCH] Convert SbxFactory from SV_DECL_PTRARR_DEL to
 boost::ptr_vector

---
 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


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.