Title: [102106] trunk/Source/WebCore
Revision
102106
Author
kl...@webkit.org
Date
2011-12-06 00:21:43 -0800 (Tue, 06 Dec 2011)

Log Message

Use HashMap<OwnPtr> for EventListenerMap's internal map.
<http://webkit.org/b/73761>

Reviewed by Benjamin Poulain.

Changed the value type of EventListenerMap::m_hashMap to OwnPtr<EventListenerVector>.
This means we no longer need to manually delete the vectors when taking them out of
the map, which makes the code a little prettier.

A few tweaks were necessary; release() instead of leakPtr() when switching modes
and adoptPtr()/get() sprinkled as needed.

* dom/EventListenerMap.h:
* dom/EventListenerMap.cpp:
(WebCore::EventListenerMap::clear):
(WebCore::EventListenerMap::add):
(WebCore::EventListenerMap::remove):
(WebCore::EventListenerMap::find):
(WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
(WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (102105 => 102106)


--- trunk/Source/WebCore/ChangeLog	2011-12-06 08:05:11 UTC (rev 102105)
+++ trunk/Source/WebCore/ChangeLog	2011-12-06 08:21:43 UTC (rev 102106)
@@ -1,3 +1,26 @@
+2011-12-06  Andreas Kling  <kl...@webkit.org>
+
+        Use HashMap<OwnPtr> for EventListenerMap's internal map.
+        <http://webkit.org/b/73761>
+
+        Reviewed by Benjamin Poulain.
+
+        Changed the value type of EventListenerMap::m_hashMap to OwnPtr<EventListenerVector>.
+        This means we no longer need to manually delete the vectors when taking them out of
+        the map, which makes the code a little prettier.
+
+        A few tweaks were necessary; release() instead of leakPtr() when switching modes
+        and adoptPtr()/get() sprinkled as needed.
+
+        * dom/EventListenerMap.h:
+        * dom/EventListenerMap.cpp:
+        (WebCore::EventListenerMap::clear):
+        (WebCore::EventListenerMap::add):
+        (WebCore::EventListenerMap::remove):
+        (WebCore::EventListenerMap::find):
+        (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
+        (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
+
 2011-12-05  Rafael Weinstein  <rafa...@chromium.org>
 
         [MutationObservers] Support 'attributes' mutation records for element.removeAttribute

Modified: trunk/Source/WebCore/dom/EventListenerMap.cpp (102105 => 102106)


--- trunk/Source/WebCore/dom/EventListenerMap.cpp	2011-12-06 08:05:11 UTC (rev 102105)
+++ trunk/Source/WebCore/dom/EventListenerMap.cpp	2011-12-06 08:21:43 UTC (rev 102106)
@@ -73,10 +73,9 @@
 {
     ASSERT(!m_activeIteratorCount);
 
-    if (m_hashMap) {
-        deleteAllValues(*m_hashMap);
+    if (m_hashMap)
         m_hashMap.clear();
-    } else {
+    else {
         m_singleEventListenerType = nullAtom;
         m_singleEventListenerVector.clear();
     }
@@ -117,16 +116,16 @@
         // of that type, so create the hash map and move the first listener vector there.
         ASSERT(!m_hashMap);
         m_hashMap = adoptPtr(new EventListenerHashMap);
-        m_hashMap->add(m_singleEventListenerType, m_singleEventListenerVector.leakPtr());
+        m_hashMap->add(m_singleEventListenerType, m_singleEventListenerVector.release());
         m_singleEventListenerType = nullAtom;
     }
 
     if (m_hashMap) {
-        pair<EventListenerHashMap::iterator, bool> result = m_hashMap->add(eventType, 0);
+        pair<EventListenerHashMap::iterator, bool> result = m_hashMap->add(eventType, nullptr);
         if (result.second)
-            result.first->second = new EventListenerVector;
+            result.first->second = adoptPtr(new EventListenerVector);
 
-        return addListenerToVector(result.first->second, listener, useCapture);
+        return addListenerToVector(result.first->second.get(), listener, useCapture);
     }
 
     if (!m_singleEventListenerVector) {
@@ -167,11 +166,9 @@
     if (it == m_hashMap->end())
         return false;
 
-    bool wasRemoved = removeListenerFromVector(it->second, listener, useCapture, indexOfRemovedListener);
-    if (it->second->isEmpty()) {
-        delete it->second;
+    bool wasRemoved = removeListenerFromVector(it->second.get(), listener, useCapture, indexOfRemovedListener);
+    if (it->second->isEmpty())
         m_hashMap->remove(it);
-    }
     return wasRemoved;
 }
 
@@ -183,7 +180,7 @@
         EventListenerHashMap::iterator it = m_hashMap->find(eventType);
         if (it == m_hashMap->end())
             return 0;
-        return it->second;
+        return it->second.get();
     }
 
     if (m_singleEventListenerType == eventType)
@@ -217,15 +214,13 @@
         EventListenerHashMap::iterator result = m_hashMap->find(eventType);
         ASSERT(result != m_hashMap->end());
 
-        EventListenerVector* listenerVector = result->second;
+        EventListenerVector* listenerVector = result->second.get();
         ASSERT(listenerVector);
 
         removeFirstListenerCreatedFromMarkup(listenerVector);
 
-        if (listenerVector->isEmpty()) {
-            delete listenerVector;
+        if (listenerVector->isEmpty())
             m_hashMap->remove(result);
-        }
 
         return;
     }
@@ -257,7 +252,7 @@
     if (m_hashMap) {
         EventListenerHashMap::iterator end = m_hashMap->end();
         for (EventListenerHashMap::iterator it = m_hashMap->begin(); it != end; ++it)
-            copyListenersNotCreatedFromMarkupToTarget(it->first, it->second, target);
+            copyListenersNotCreatedFromMarkupToTarget(it->first, it->second.get(), target);
         return;
     }
 

Modified: trunk/Source/WebCore/dom/EventListenerMap.h (102105 => 102106)


--- trunk/Source/WebCore/dom/EventListenerMap.h	2011-12-06 08:05:11 UTC (rev 102105)
+++ trunk/Source/WebCore/dom/EventListenerMap.h	2011-12-06 08:21:43 UTC (rev 102106)
@@ -69,7 +69,7 @@
     struct EventListenerHashMapTraits : HashTraits<WTF::AtomicString> {
         static const int minimumTableSize = 32;
     };
-    typedef HashMap<AtomicString, EventListenerVector*, AtomicStringHash, EventListenerHashMapTraits> EventListenerHashMap;
+    typedef HashMap<AtomicString, OwnPtr<EventListenerVector>, AtomicStringHash, EventListenerHashMapTraits> EventListenerHashMap;
 
     OwnPtr<EventListenerHashMap> m_hashMap;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to