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


Hi,

See attached.

Note 1
------
I assume casting from size_t to sal_uInt16 is reasonable in the following scenario (I didn't want to update all callers in this patch)?

 sal_uInt16 SwGlossaries::GetGroupCnt()
 {
-    return  GetNameList()->Count();
+    return static_cast<sal_uInt16>(GetNameList()->size());
 }

Note 2
------
In 2 functions I made the following change. Is this ok or should I also call reserve(16) to be safe?

-            SvStrings aFiles( 16, 16 );
+            std::vector<String*> aFiles;

Regards,
Brad

From 45e2073a191c346b12d596899a7e07e4c4bc2585 Mon Sep 17 00:00:00 2001
From: Brad Sowden <code@sowden.org>
Date: Wed, 28 Dec 2011 13:11:32 +1300
Subject: [PATCH 1/8] fdo#38831 convert SvStrings to std::vector glos*.cxx/hxx
 + misc

---
 sw/inc/swunohelper.hxx                 |    6 ++-
 sw/source/core/unocore/swunohelper.cxx |    8 +--
 sw/source/ui/inc/glosdoc.hxx           |   11 +---
 sw/source/ui/misc/glosdoc.cxx          |   90 ++++++++++++-------------------
 sw/source/ui/utlui/gloslst.cxx         |   10 ++--
 5 files changed, 50 insertions(+), 75 deletions(-)

diff --git a/sw/inc/swunohelper.hxx b/sw/inc/swunohelper.hxx
index 9f7b05b..6d61d2e 100644
--- a/sw/inc/swunohelper.hxx
+++ b/sw/inc/swunohelper.hxx
@@ -32,6 +32,8 @@
 #include <sal/types.h>
 #include "swdllapi.h"
 
+#include <vector>
+
 namespace com { namespace sun { namespace star {
     namespace uno {
         class Any;
@@ -39,7 +41,6 @@ namespace com { namespace sun { namespace star {
 }}}
 
 class String;
-class SvStrings;
 class SvPtrarr;
 
 namespace SWUnoHelper {
@@ -68,7 +69,8 @@ SW_DLLPUBLIC sal_Bool UCB_IsReadOnlyFileName( const String& rURL );
     //          pDateTime != 0 -> returns also the modified date/time of
     //                       the files in a SvPtrarr -->
     //                       !! objects must be deleted from the caller!!
-sal_Bool UCB_GetFileListOfFolder( const String& rURL, SvStrings& rList,
+sal_Bool UCB_GetFileListOfFolder( const String& rURL,
+                                std::vector<String*>& rList,
                                 const String* pExtension = 0,
                                 SvPtrarr* pDateTimeList = 0 );
 
diff --git a/sw/source/core/unocore/swunohelper.cxx b/sw/source/core/unocore/swunohelper.cxx
index 9946c2c..c3896fa 100644
--- a/sw/source/core/unocore/swunohelper.cxx
+++ b/sw/source/core/unocore/swunohelper.cxx
@@ -26,8 +26,6 @@
  *
  ************************************************************************/
 
-
-#define _SVSTDARR_STRINGS
 #include <com/sun/star/uno/Sequence.h>
 #include <com/sun/star/uno/Exception.hpp>
 #include <com/sun/star/ucb/XContentIdentifier.hpp>
@@ -204,7 +202,8 @@ sal_Bool UCB_IsDirectory( const String& rURL )
     //          pDateTime != 0 -> returns also the modified date/time of
     //                       the files in a SvPtrarr -->
     //                       !! objects must be deleted from the caller!!
-sal_Bool UCB_GetFileListOfFolder( const String& rURL, SvStrings& rList,
+sal_Bool UCB_GetFileListOfFolder( const String& rURL,
+                                std::vector<String*>& rList,
                                 const String* pExtension,
                                 SvPtrarr* pDateTimeList )
 {
@@ -245,8 +244,7 @@ sal_Bool UCB_GetFileListOfFolder( const String& rURL, SvStrings& rList,
                               sTitle.Equals( *pExtension,
                                           sTitle.Len() - nExtLen, nExtLen )) )
                         {
-                            String* pStr = new String( sTitle );
-                            rList.Insert( pStr, rList.Count() );
+                            rList.push_back( new String(sTitle) );
 
                             if( pDateTimeList )
                             {
diff --git a/sw/source/ui/inc/glosdoc.hxx b/sw/source/ui/inc/glosdoc.hxx
index 2cea838..7588509 100644
--- a/sw/source/ui/inc/glosdoc.hxx
+++ b/sw/source/ui/inc/glosdoc.hxx
@@ -29,11 +29,9 @@
 #define _GLOSDOC_HXX
 
 #include <tools/string.hxx>
-#include <svl/svarray.hxx>
 #include <com/sun/star/text/XAutoTextGroup.hpp>
 
 class SwTextBlocks;
-class SvStrings;
 class SwDocShell;
 
 #ifndef SW_DECL_SWDOCSHELL_DEFINED
@@ -43,10 +41,7 @@ SV_DECL_REF( SwDocShell )
 #endif
 #include <cppuhelper/weakref.hxx>
 
-#ifndef INCLUDED_VECTOR
 #include <vector>
-#define INCLUDED_VECTOR
-#endif
 #include "swdllapi.h"
 
 typedef ::com::sun::star::uno::WeakReference< ::com::sun::star::text::XAutoTextGroup > 
AutoTextGroupRef;
@@ -67,11 +62,11 @@ class SW_DLLPUBLIC SwGlossaries
     String                  m_sOldErrPath;
     String                  m_sErrPath;
     std::vector<String*>    m_vPathArr;
-    SvStrings               *m_pGlosArr;
-    sal_Bool                    m_bError;
+    std::vector<String*>   *m_pGlosArr;
+    sal_Bool                m_bError;
 
     SW_DLLPRIVATE SwTextBlocks* GetGlosDoc(const String &rName, sal_Bool bCreate = sal_True) const;
-    SW_DLLPRIVATE SvStrings     *GetNameList();
+    SW_DLLPRIVATE std::vector<String*>* GetNameList();
 
     // implementation in unoatxt.cxx
     SW_DLLPRIVATE void RemoveFileFromList( const String& rGroup );
diff --git a/sw/source/ui/misc/glosdoc.cxx b/sw/source/ui/misc/glosdoc.cxx
index 1e35c49..39a7207 100644
--- a/sw/source/ui/misc/glosdoc.cxx
+++ b/sw/source/ui/misc/glosdoc.cxx
@@ -31,7 +31,6 @@
 
 #include <com/sun/star/container/XNamed.hpp>
 
-#define _SVSTDARR_STRINGS
 #include <unotools/transliterationwrapper.hxx>
 
 #include <svl/svstdarr.hxx>
@@ -115,7 +114,7 @@ String  SwGlossaries::GetDefName()
 ------------------------------------------------------------------------*/
 sal_uInt16 SwGlossaries::GetGroupCnt()
 {
-    return  GetNameList()->Count();
+    return static_cast<sal_uInt16>(GetNameList()->size());
 }
 
 /*------------------------------------------------------------------------
@@ -156,7 +155,7 @@ sal_Bool SwGlossaries::FindGroupName(String & rGroup)
 
 String SwGlossaries::GetGroupName(sal_uInt16 nGroupId)
 {
-    OSL_ENSURE(nGroupId < m_pGlosArr->Count(), "Textbausteinarray ueberindiziert");
+    OSL_ENSURE(static_cast<size_t>(nGroupId) < m_pGlosArr->size(), "Textbausteinarray 
ueberindiziert");
     return *(*m_pGlosArr)[nGroupId];
 }
 
@@ -181,23 +180,18 @@ String  SwGlossaries::GetGroupTitle( const String& rGroupName )
 SwTextBlocks* SwGlossaries::GetGroupDoc(const String &rName,
                                         sal_Bool bCreate) const
 {
-        // insert to the list of text blocks if applicable
+    // insert to the list of text blocks if applicable
     if(bCreate && m_pGlosArr)
     {
-        const String aName(rName);
-        const sal_uInt16 nCount = m_pGlosArr->Count();
-        sal_uInt16 i;
-
-        for( i = 0; i < nCount; ++i)
+        std::vector<String*>::const_iterator it(m_pGlosArr->begin());
+        for(; it != m_pGlosArr->end(); ++it)
         {
-            const String *pName = (*m_pGlosArr)[i];
-            if(*pName == aName)
+            if(**it == rName)
                 break;
         }
-        if(i == nCount)
+        if( it == m_pGlosArr->end() )
         {   // block not in the list
-            String *pTmp = new String(aName);
-            m_pGlosArr->Insert(pTmp, m_pGlosArr->Count());
+            m_pGlosArr->push_back(new String(rName));
         }
     }
     return GetGlosDoc( rName, bCreate );
@@ -227,10 +221,7 @@ sal_Bool SwGlossaries::NewGroupDoc(String& rGroupName, const String& rTitle)
     SwTextBlocks *pBlock = GetGlosDoc( sNewGroup );
     if(pBlock)
     {
-        String *pTmp =
-            new String(sNewGroup);
-        SvStrings* pList = GetNameList();
-        pList->Insert(pTmp, pList->Count());
+        GetNameList()->push_back(new String(sNewGroup));
         pBlock->SetName(rTitle);
         PutGroupDoc(pBlock);
         rGroupName = sNewGroup;
@@ -279,11 +270,10 @@ sal_Bool    SwGlossaries::RenameGroupDoc(
                         rNewGroup = sNewFileName.Copy(0, nFileNameLen);
                         rNewGroup += GLOS_DELIM;
                         rNewGroup += String::CreateFromInt32(nNewPath);
-                        String *pTmp = new String(rNewGroup);
                         if(!m_pGlosArr)
                             GetNameList();
                         else
-                            m_pGlosArr->Insert(pTmp, m_pGlosArr->Count());
+                            m_pGlosArr->push_back(new String(rNewGroup));
 
                         sNewFilePath += INET_PATH_TOKEN;
                         sNewFilePath += sNewFileName ;
@@ -326,20 +316,13 @@ sal_Bool SwGlossaries::DelGroupDoc(const String &rName)
 
 SwGlossaries::~SwGlossaries()
 {
-    sal_uInt16 nCount = m_pGlosArr? m_pGlosArr->Count() : 0;
-    sal_uInt16 i;
-
-    for( i = 0; i < nCount; ++i)
-    {
-        String *pTmp = (*m_pGlosArr)[i];
-        delete pTmp;
-    }
+    for(std::vector<String*>::const_iterator it(m_pGlosArr->begin()); it != m_pGlosArr->end(); 
++it)
+        delete *it;
+    delete m_pGlosArr;
 
     for(std::vector<String*>::const_iterator it(m_vPathArr.begin()); it != m_vPathArr.end(); ++it)
         delete *it;
 
-    delete m_pGlosArr;
-
     InvalidateUNOOjects();
 }
 
@@ -383,37 +366,37 @@ SwTextBlocks* SwGlossaries::GetGlosDoc( const String &rName, sal_Bool bCreate 
)
 /*------------------------------------------------------------------------
     Description: access to the list of names; read in if applicable
 ------------------------------------------------------------------------*/
-SvStrings* SwGlossaries::GetNameList()
+std::vector<String*>* SwGlossaries::GetNameList()
 {
     if( !m_pGlosArr )
     {
-        m_pGlosArr = new SvStrings;
+        m_pGlosArr = new std::vector<String*>;
         String sExt( SwGlossaries::GetExtension() );
         for( size_t i = 0; i < m_vPathArr.size(); i++ )
         {
-            SvStrings aFiles( 16, 16 );
+            std::vector<String*> aFiles;
 
             SWUnoHelper::UCB_GetFileListOfFolder( *m_vPathArr[i], aFiles, &sExt );
-            for( sal_uInt16 nFiles = 0, nFEnd = aFiles.Count();
-                    nFiles < nFEnd; ++nFiles )
+            for( std::vector<String*>::const_iterator filesIt(aFiles.begin());
+                 filesIt != aFiles.end(); ++filesIt)
             {
-                String* pTitle = aFiles[ nFiles ];
+                String *pTitle = *filesIt;
                 String sName( pTitle->Copy( 0, pTitle->Len() - sExt.Len() ));
                 sName += GLOS_DELIM;
                 sName += String::CreateFromInt32( static_cast<sal_Int16>(i) );
-                m_pGlosArr->Insert( new String(sName), m_pGlosArr->Count() );
+                m_pGlosArr->push_back( new String(sName) );
 
                 // don't need any more these pointers
                 delete pTitle;
             }
         }
-        if(!m_pGlosArr->Count())
+        if( m_pGlosArr->empty() )
         {
             // the standard block is inside of the path's first part
             String *pTmp = new String( SwGlossaries::GetDefName() );
             (*pTmp) += GLOS_DELIM;
             (*pTmp) += '0';
-            m_pGlosArr->Insert(pTmp, m_pGlosArr->Count());
+            m_pGlosArr->push_back( pTmp );
         }
     }
     return m_pGlosArr;
@@ -432,10 +415,10 @@ SwGlossaries::SwGlossaries() :
 /* --------------------------------------------------
 *   #61050# double paths cause irritation - get rid of it
  * --------------------------------------------------*/
-sal_Bool lcl_FindSameEntry(const SvStrings& rDirArr, const String& rEntryURL)
+sal_Bool lcl_FindSameEntry(const std::vector<String*>& rDirArr, const String& rEntryURL)
 {
-    for(sal_uInt16 i = 0; i < rDirArr.Count(); i++)
-        if(rEntryURL == (*rDirArr.GetObject(i)))
+    for(std::vector<String*>::const_iterator it(rDirArr.begin()); it != rDirArr.end(); ++it)
+        if( **it == rEntryURL )
             return sal_True;
     return sal_False;
 }
@@ -454,7 +437,7 @@ void SwGlossaries::UpdateGlosPath(sal_Bool bFull)
         m_vPathArr.clear();
 
         sal_uInt16 nTokenCount = m_aPath.GetTokenCount(SVT_SEARCHPATH_DELIMITER);
-        SvStrings aDirArr;
+        std::vector<String*> aDirArr;
         for( sal_uInt16 i = 0; i < nTokenCount; i++ )
         {
             String sPth(m_aPath.GetToken(i, SVT_SEARCHPATH_DELIMITER));
@@ -465,7 +448,7 @@ void SwGlossaries::UpdateGlosPath(sal_Bool bFull)
             {
                 continue;
             }
-            aDirArr.Insert(new String(sPth), aDirArr.Count());
+            aDirArr.push_back(new String(sPth));
             if( !FStatHelper::IsFolder( sPth ) )
             {
                 if( m_sErrPath.Len() )
@@ -476,7 +459,8 @@ void SwGlossaries::UpdateGlosPath(sal_Bool bFull)
             else
                 m_vPathArr.push_back(new String(sPth));
         }
-        aDirArr.DeleteAndDestroy(0, aDirArr.Count());
+        for(std::vector<String*>::const_iterator it(aDirArr.begin()); it != aDirArr.end(); ++it)
+            delete *it;
 
         if(!nTokenCount ||
             (m_sErrPath.Len() && (bPathChanged || m_sOldErrPath != m_sErrPath)) )
@@ -494,10 +478,8 @@ void SwGlossaries::UpdateGlosPath(sal_Bool bFull)
 
         if(m_pGlosArr)
         {
-            for(sal_uInt16 i = 0; i < m_pGlosArr->Count(); ++i)
-            {
-                delete (String *)(*m_pGlosArr)[i];
-            }
+            for(std::vector<String*>::const_iterator it(m_pGlosArr->begin()); it != 
m_pGlosArr->end(); ++it)
+                delete *it;
             DELETEZ(m_pGlosArr);
             GetNameList();
         }
@@ -520,11 +502,9 @@ void SwGlossaries::RemoveFileFromList( const String& rGroup )
 {
     if(m_pGlosArr)
     {
-        const sal_uInt16 nCount = m_pGlosArr->Count();
-        for(sal_uInt16 i = 0; i < nCount; ++i)
+        for(std::vector<String*>::iterator it(m_pGlosArr->begin()); it != m_pGlosArr->end(); ++it)
         {
-            String *pTmp = (*m_pGlosArr)[i];
-            if(*pTmp == rGroup)
+            if(**it == rGroup)
             {
                 rtl::OUString aUName = rGroup;
                 {
@@ -569,8 +549,8 @@ void SwGlossaries::RemoveFileFromList( const String& rGroup )
                     }
                 }
 
-                m_pGlosArr->Remove(i);
-                delete pTmp;
+                delete *it;
+                m_pGlosArr->erase(it);
                 break;
             }
         }
diff --git a/sw/source/ui/utlui/gloslst.cxx b/sw/source/ui/utlui/gloslst.cxx
index 860b5d1..b19f92d 100644
--- a/sw/source/ui/utlui/gloslst.cxx
+++ b/sw/source/ui/utlui/gloslst.cxx
@@ -31,7 +31,6 @@
 
 #define _SVSTDARR_STRINGSDTOR
 #define _SVSTDARR_STRINGSISORTDTOR
-#define _SVSTDARR_STRINGS
 #include <svl/svstdarr.hxx>
 #include <tools/urlobj.hxx>
 #include <vcl/dialog.hxx>
@@ -50,6 +49,8 @@
 #include <gloslst.hxx>
 #include <swunohelper.hxx>
 
+#include <vector>
+
 #include <utlui.hrc>
 #include <gloslst.hrc>
 
@@ -325,16 +326,15 @@ void SwGlossaryList::Update()
         for( size_t nPath = 0; nPath < pPathArr->size(); nPath++ )
         {
             SvStringsDtor aFoundGroupNames;
-            SvStrings aFiles( 16, 16 );
+            std::vector<String*> aFiles;
             SvPtrarr aDateTimeArr( 16, 16 );
 
             SWUnoHelper::UCB_GetFileListOfFolder( *(*pPathArr)[nPath], aFiles,
                                                     &sExt, &aDateTimeArr );
-            for( sal_uInt16 nFiles = 0, nFEnd = aFiles.Count();
-                    nFiles < nFEnd; ++nFiles )
+            for( size_t nFiles = 0; nFiles < aFiles.size(); ++nFiles )
             {
                 String* pTitle = aFiles[ nFiles ];
-                ::DateTime* pDT = (::DateTime*) aDateTimeArr[ nFiles ];
+                ::DateTime* pDT = (::DateTime*) aDateTimeArr[ static_cast<sal_uInt16>(nFiles) ];
 
                 String sName( pTitle->Copy( 0, pTitle->Len() - sExt.Len() ));
 
-- 
1.7.7.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.