[Libreoffice-commits] .: tools/inc tools/source

Joseph Powers jpowers at kemper.freedesktop.org
Tue Feb 15 07:44:47 PST 2011


 tools/inc/tools/fsys.hxx   |    2 
 tools/source/fsys/tdir.cxx |  107 ++++++++++++++++++---------------------------
 2 files changed, 45 insertions(+), 64 deletions(-)

New commits:
commit 45d5fb96f490600e1c2900dd9159e50ced19509e
Author: Joseph Powers <jpowers27 at cox.net>
Date:   Tue Feb 15 07:44:21 2011 -0800

    Remove DECLARE_LIST( FSysSortList, FSysSort* )
    
    Note: FSysSort is an int. So I just changed it to a vector< int >. This
    should reduce the chance of a memory leek and also speed things up a little.

diff --git a/tools/inc/tools/fsys.hxx b/tools/inc/tools/fsys.hxx
index 43e9819..6823cee 100644
--- a/tools/inc/tools/fsys.hxx
+++ b/tools/inc/tools/fsys.hxx
@@ -46,7 +46,6 @@
 // --------------
 
 class DirEntry;
-class FSysSortList;
 class FileStatList;
 struct FileCopier_Impl;
 class SvFileStream;
@@ -96,6 +95,7 @@ typedef int FSysSort;
 #define FSYS_SORT_KIND				((FSysSort) 256)
 #define FSYS_SORT_CREATOR			((FSysSort) 512)
 #define FSYS_SORT_END				((FSysSort)1024)
+typedef ::std::vector< FSysSort > FSysSortList;
 
 // DirEntryFlag
 enum DirEntryFlag
diff --git a/tools/source/fsys/tdir.cxx b/tools/source/fsys/tdir.cxx
index ebde24b..e27dd96 100644
--- a/tools/source/fsys/tdir.cxx
+++ b/tools/source/fsys/tdir.cxx
@@ -42,7 +42,6 @@
 
 DBG_NAME( Dir )
 
-DECLARE_LIST( FSysSortList, FSysSort* )
 DECLARE_LIST( FileStatList, FileStat* )
 
 #define APPEND (USHORT) 65535
@@ -67,7 +66,7 @@ BOOL Dir::ImpInsertPointReached( const DirEntry& rNewEntry,
     if ( pLst->empty() )
         return TRUE;
 
-    FSysSort  nSort      = *( pSortLst->GetObject( nSortIndex ) );
+    FSysSort  nSort      = (*pSortLst)[ nSortIndex ];
     FileStat *pOldStat   = NULL;
     DirEntry *pCurLstObj = (*pLst)[ nCurPos ];
     if ( pStatLst )
@@ -191,7 +190,7 @@ BOOL Dir::ImpInsertPointReached( const DirEntry& rNewEntry,
         default: /* Kann nicht sein */;
     }
 
-    if ( nSortIndex == ( pSortLst->Count() - 1 ) )
+    if ( nSortIndex == ( pSortLst->size() - 1 ) )
         return TRUE;
     else
         //Rekursion
@@ -315,19 +314,22 @@ void Dir::Reset()
         }
         pStatLst->Clear();
         delete pStatLst;
+        pStatLst = NULL;
     }
 
     // Verlangen die Sortierkriterien FileStat's?
     if ( pSortLst )
     {
-        pSortLst->First();
-        do
-        {
-            if ( *( pSortLst->GetCurObject() ) &
-                    ( FSYS_SORT_KIND | FSYS_SORT_SIZE |
-                    FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_ACCESSED ) )
+        for ( size_t i = 0, n = pSortLst->size(); i < n; ++i ) {
+            if ( (*pSortLst)[ i ]
+               & ( FSYS_SORT_KIND     | FSYS_SORT_SIZE     | FSYS_SORT_CREATED
+                 | FSYS_SORT_MODIFYED | FSYS_SORT_ACCESSED
+                 )
+            ) {
                 pStatLst = new FileStatList();
-        } while ( !pStatLst && pSortLst->Next() );
+                break;
+            }
+        }
     }
 
 #ifndef BOOTSTRAP
@@ -461,15 +463,7 @@ Dir::~Dir()
     // alle Sorts aus der Liste entfernen und deren Speicher freigeben
     if ( pSortLst )
     {
-        FSysSort* pEntry = pSortLst->First();
-        while (pEntry)
-        {
-            FSysSort*  pNext = pSortLst->Next();
-            delete pEntry;
-            pEntry = pNext;
-        }
-        pSortLst->Clear();
-
+        pSortLst->clear();
         delete pSortLst;
     }
 
@@ -500,18 +494,18 @@ Dir::~Dir()
 FSysError Dir::ImpSetSort( std::va_list pArgs, int nFirstSort )
 {
     BOOL             bLast;
-    FSysSort        *pSort;
+    FSysSort        aSort;
     FSysSortList    *pNewSortLst = new FSysSortList;
 
-    *( pSort = new FSysSort ) = nFirstSort;
+    aSort = nFirstSort;
     do
     {
         // letztes Kriterium?
-        bLast = FSYS_SORT_END == (*pSort & FSYS_SORT_END);
-        *pSort &= ~FSYS_SORT_END;
+        bLast = FSYS_SORT_END == (aSort & FSYS_SORT_END);
+        aSort &= ~FSYS_SORT_END;
 
-        FSysSort nSort = *pSort & ~(USHORT)FSYS_SORT_ASCENDING
-                              &  ~(USHORT)FSYS_SORT_DESCENDING;
+        FSysSort nSort = aSort & ~(USHORT)FSYS_SORT_ASCENDING
+                               & ~(USHORT)FSYS_SORT_DESCENDING;
 
         // g"utliges Sortierkriterium?
         if ( ( nSort ==  FSYS_SORT_NAME ) ||
@@ -522,49 +516,34 @@ FSysError Dir::ImpSetSort( std::va_list pArgs, int nFirstSort )
              ( nSort ==  FSYS_SORT_ACCESSED ) ||
              ( nSort ==  FSYS_SORT_KIND ) )
         {
-            pNewSortLst->Insert( pSort, APPEND );
-            *(pSort = new FSysSort) = va_arg( pArgs, FSysSort );
+            pNewSortLst->push_back( aSort );
+            aSort = va_arg( pArgs, FSysSort );
         }
         else
         {   // ungueltiger Sort oder FSYS_SORT_NONE
-            FSysSort* pEntry = pNewSortLst->First();
-            while (pEntry)
-            {
-                FSysSort* pNext = pNewSortLst->Next();
-                delete pEntry;
-                pEntry = pNext;
-            }
-            pNewSortLst->Clear();
+            pNewSortLst->clear();
             delete pNewSortLst;
-            if ( *pSort ==  FSYS_SORT_NONE )
+            if ( aSort ==  FSYS_SORT_NONE )
             {
-                delete pSort;
-                if ( pSortLst )
+                if ( pSortLst ) {
                     delete pSortLst;
+                    pSortLst = NULL;
+                }
                 return FSYS_ERR_OK;
             }
             else
             {
-                delete pSort;
                 return FSYS_ERR_NOTSUPPORTED;
             }
         }
     } while ( !bLast );
 
     va_end( pArgs );
-    delete pSort;			// JP:6.3.00 - delete the initial pointer
 
     //Enfernen der alten Sort-Elemente
     if ( pSortLst )
     {
-        FSysSort* pEntry = pSortLst->First();
-        while (pEntry)
-        {
-            FSysSort* pNext = pSortLst->Next();
-            delete pEntry;
-            pEntry = pNext;
-        }
-        pSortLst->Clear();
+        pSortLst->clear();
         delete pSortLst;
     }
     pSortLst = pNewSortLst;
@@ -575,17 +554,17 @@ FSysError Dir::ImpSetSort( std::va_list pArgs, int nFirstSort )
     //ist der Aufruf von Update() die einfachste Moeglichkeit
     if ( !pStatLst && pSortLst )
     {
-        pSortLst->First();
-        do
+        for ( size_t i = 0, n = pSortLst->size(); i < n && !pStatLst; ++i )
         {
-            if ( *(pSortLst->GetCurObject()) &
-                  ( FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE |
-                    FSYS_SORT_ACCESSED | FSYS_SORT_KIND ) )
-            {
+            if ( (*pSortLst)[ i ]
+               & ( FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE
+                 | FSYS_SORT_ACCESSED | FSYS_SORT_KIND
+                 )
+            ) {
                 Update();
                 return FSYS_ERR_OK;
             }
-        } while ( !pStatLst && pSortLst->Next() );
+        }
     }
 
     if ( pLst ) { //Keine DirEntry's, kein Sort.
@@ -662,16 +641,18 @@ Dir& Dir::operator+=( const Dir& rDir )
     //Verlangen die Sortierkriterien FileStat's?
     BOOL bStat = FALSE;
     if ( pSortLst ) {
-        pSortLst->First();
-        do {
-            if ( *(pSortLst->GetCurObject()) &
-                  ( FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE |
-                    FSYS_SORT_ACCESSED | FSYS_SORT_KIND ) )
+        for ( size_t i = 0, n = pSortLst->size(); i < n && !bStat; ++i ) {
+            if ( (*pSortLst)[ i ]
+               & ( FSYS_SORT_CREATED  | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE
+                 | FSYS_SORT_ACCESSED | FSYS_SORT_KIND
+                 )
+            ) {
                 bStat = TRUE;
-        } while ( !bStat && pSortLst->Next() );
+            }
+        }
     }
-    FileStat * stat = NULL;
-    for ( USHORT nNr = 0; nNr < rDir.Count(); nNr++ )
+    FileStat* stat = NULL;
+    for ( size_t nNr = 0; nNr < rDir.Count(); nNr++ )
     {
         if ( bStat )
         {


More information about the Libreoffice-commits mailing list