JavaScriptCore:
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 May 2007 00:20:16 +0000 (00:20 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 May 2007 00:20:16 +0000 (00:20 +0000)
        Reviewed by Oliver Hunt.

        Added HashMap::swap and HashSet::swap. WebCore now uses HashSet::swap.
        I figured while I was in the neighborhood I might as well add HashMap::swap,
        too.

        * wtf/HashMap.h:
        (WTF::::operator):
        (WTF::::swap):
        * wtf/HashSet.h:
        (WTF::::operator):
        (WTF::::swap):

WebCore:

        Reviewed by Oliver Hunt.

        Some improvements on my last patch, suggested by Darin.

        * history/PageCache.cpp:
        (WebCore::PageCache::autoreleaseNow): Swap with an empty set instead of
        building up an array and then calling clear(). This is slightly more
        efficient and the code is cleaner.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@21468 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/wtf/HashMap.h
JavaScriptCore/wtf/HashSet.h
WebCore/ChangeLog
WebCore/history/PageCache.cpp

index 135e4f8..e3d5c32 100644 (file)
@@ -1,3 +1,18 @@
+2007-05-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Added HashMap::swap and HashSet::swap. WebCore now uses HashSet::swap.
+        I figured while I was in the neighborhood I might as well add HashMap::swap,
+        too.
+
+        * wtf/HashMap.h:
+        (WTF::::operator):
+        (WTF::::swap):
+        * wtf/HashSet.h:
+        (WTF::::operator):
+        (WTF::::swap):
+
 2007-05-11  Kimmo Kinnunen  <kimmok@iki.fi>
 
         Reviewed by Darin.
index 32ef800..717224d 100644 (file)
@@ -68,6 +68,8 @@ namespace WTF {
         HashMap& operator=(const HashMap&);
         ~HashMap();
 
+        void swap(HashMap&);
+
         int size() const;
         int capacity() const;
         bool isEmpty() const;
@@ -176,11 +178,17 @@ namespace WTF {
     inline HashMap<T, U, V, W, X>& HashMap<T, U, V, W, X>::operator=(const HashMap& other)
     {
         HashMap tmp(other);
-        m_impl.swap(tmp.m_impl); 
+        swap(tmp); 
         return *this;
     }
 
     template<typename T, typename U, typename V, typename W, typename X>
+    inline void HashMap<T, U, V, W, X>::swap(HashMap& other)
+    {
+        m_impl.swap(other.m_impl); 
+    }
+
+    template<typename T, typename U, typename V, typename W, typename X>
     inline HashMap<T, U, V, W, X>::~HashMap()
     {
         derefAll();
index 4215255..0047672 100644 (file)
@@ -58,6 +58,8 @@ namespace WTF {
         HashSet& operator=(const HashSet&);
         ~HashSet();
 
+        void swap(HashSet&);
+
         int size() const;
         int capacity() const;
         bool isEmpty() const;
@@ -182,11 +184,17 @@ namespace WTF {
     inline HashSet<T, U, V>& HashSet<T, U, V>::operator=(const HashSet& other)
     {
         HashSet tmp(other);
-        m_impl.swap(tmp.m_impl); 
+        swap(other); 
         return *this;
     }
 
     template<typename T, typename U, typename V>
+    inline void HashSet<T, U, V>::swap(HashSet& other)
+    {
+        m_impl.swap(other.m_impl); 
+    }
+
+    template<typename T, typename U, typename V>
     inline HashSet<T, U, V>::~HashSet()
     {
         derefAll();
index b42535c..1caba6c 100644 (file)
@@ -1,3 +1,14 @@
+2007-05-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Some improvements on my last patch, suggested by Darin.
+
+        * history/PageCache.cpp:
+        (WebCore::PageCache::autoreleaseNow): Swap with an empty set instead of 
+        building up an array and then calling clear(). This is slightly more 
+        efficient and the code is cleaner.
+
 2007-05-14  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by darin
index bc76867..869226a 100644 (file)
@@ -69,18 +69,12 @@ void PageCache::autoreleaseNow()
 {
     m_autoreleaseTimer.stop();
 
-    Vector<CachedPage*> cachedPages;
-    cachedPages.reserveCapacity(m_autoreleaseSet.size());
-    
-    CachedPageSet::iterator i = m_autoreleaseSet.begin();
-    CachedPageSet::iterator end = m_autoreleaseSet.end();
-    for (; i != end; ++i)
-        cachedPages.append((*i).get());
+    CachedPageSet tmp;
+    tmp.swap(m_autoreleaseSet);
 
-    m_autoreleaseSet.clear();
-        
-    for (unsigned j = 0; j < cachedPages.size(); ++j)
-        cachedPages[j]->close();
+    CachedPageSet::iterator end = tmp.end();
+    for (CachedPageSet::iterator it = tmp.begin(); it != end; ++it)
+        (*it)->close();
 }
 
 void PageCache::autorelease(PassRefPtr<CachedPage> page)