From a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 25 May 2012 15:09:11 +0200 Subject: Imported WebKit commit eb5c1b8fe4d4b1b90b5137433fc58a91da0e6878 (http://svn.webkit.org/repository/webkit/trunk@118516) --- Source/JavaScriptCore/runtime/WeakGCMap.h | 70 ++----------------------------- 1 file changed, 4 insertions(+), 66 deletions(-) (limited to 'Source/JavaScriptCore/runtime/WeakGCMap.h') diff --git a/Source/JavaScriptCore/runtime/WeakGCMap.h b/Source/JavaScriptCore/runtime/WeakGCMap.h index ec010fb4b..98483c312 100644 --- a/Source/JavaScriptCore/runtime/WeakGCMap.h +++ b/Source/JavaScriptCore/runtime/WeakGCMap.h @@ -53,80 +53,25 @@ class WeakGCMap : private WeakHandleOwner { typedef HashMap MapType; typedef typename HandleTypes::ExternalType ExternalType; - typedef typename MapType::iterator map_iterator; public: - - struct iterator { - friend class WeakGCMap; - iterator(map_iterator iter) - : m_iterator(iter) - { - } - - std::pair get() const { return std::make_pair(m_iterator->first, HandleTypes::getFromSlot(const_cast(&m_iterator->second->jsValue()))); } - - iterator& operator++() { ++m_iterator; return *this; } - - // postfix ++ intentionally omitted - - // Comparison. - bool operator==(const iterator& other) const { return m_iterator == other.m_iterator; } - bool operator!=(const iterator& other) const { return m_iterator != other.m_iterator; } - - private: - map_iterator m_iterator; - }; - - typedef WTF::HashTableAddResult AddResult; - WeakGCMap() { } - bool isEmpty() { return m_map.isEmpty(); } void clear() { - map_iterator end = m_map.end(); - for (map_iterator ptr = m_map.begin(); ptr != end; ++ptr) + typename MapType::iterator end = m_map.end(); + for (typename MapType::iterator ptr = m_map.begin(); ptr != end; ++ptr) WeakSet::deallocate(ptr->second); m_map.clear(); } - bool contains(const KeyType& key) const - { - return m_map.contains(key); - } - - iterator find(const KeyType& key) - { - return m_map.find(key); - } - - void remove(iterator iter) - { - ASSERT(iter.m_iterator != m_map.end()); - WeakImpl* impl = iter.m_iterator->second; - ASSERT(impl); - WeakSet::deallocate(impl); - m_map.remove(iter.m_iterator); - } - ExternalType get(const KeyType& key) const { return HandleTypes::getFromSlot(const_cast(&m_map.get(key)->jsValue())); } - AddResult add(JSGlobalData&, const KeyType& key, ExternalType value) - { - typename MapType::AddResult result = m_map.add(key, 0); - if (result.isNewEntry) - result.iterator->second = WeakSet::allocate(value, this, FinalizerCallback::finalizerContextFor(key)); - - // WeakGCMap exposes a different iterator, so we need to wrap it and create our own AddResult. - return AddResult(iterator(result.iterator), result.isNewEntry); - } - void set(JSGlobalData&, const KeyType& key, ExternalType value) { typename MapType::AddResult result = m_map.add(key, 0); @@ -135,21 +80,14 @@ public: result.iterator->second = WeakSet::allocate(value, this, FinalizerCallback::finalizerContextFor(key)); } - ExternalType take(const KeyType& key) + void remove(const KeyType& key) { WeakImpl* impl = m_map.take(key); if (!impl) - return HashTraits::emptyValue(); - ExternalType result = HandleTypes::getFromSlot(const_cast(&impl->jsValue())); + return; WeakSet::deallocate(impl); - return result; } - size_t size() { return m_map.size(); } - - iterator begin() { return iterator(m_map.begin()); } - iterator end() { return iterator(m_map.end()); } - ~WeakGCMap() { clear(); -- cgit v1.2.1