Unreviewed, rolling out r114914.
authordimich@chromium.org <dimich@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Apr 2012 18:34:58 +0000 (18:34 +0000)
committerdimich@chromium.org <dimich@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Apr 2012 18:34:58 +0000 (18:34 +0000)
http://trac.webkit.org/changeset/114914
https://bugs.webkit.org/show_bug.cgi?id=84615

Causing infinite hangs on some tests involving HashMaps with
integer keys (Requested by dimich on #webkit).

Patch by Sheriff Bot <webkit.review.bot@gmail.com> on 2012-04-23

* wtf/HashTable.h:
(WTF::HashTable::isEmptyBucket):
* wtf/HashTraits.h:
* wtf/text/StringHash.h:

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

Source/WTF/ChangeLog
Source/WTF/wtf/HashTable.h
Source/WTF/wtf/HashTraits.h
Source/WTF/wtf/text/StringHash.h

index 2b9b6b9..d7b651e 100644 (file)
@@ -1,3 +1,17 @@
+2012-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>
+
+        Unreviewed, rolling out r114914.
+        http://trac.webkit.org/changeset/114914
+        https://bugs.webkit.org/show_bug.cgi?id=84615
+
+        Causing infinite hangs on some tests involving HashMaps with
+        integer keys (Requested by dimich on #webkit).
+
+        * wtf/HashTable.h:
+        (WTF::HashTable::isEmptyBucket):
+        * wtf/HashTraits.h:
+        * wtf/text/StringHash.h:
+
 2012-04-23  Darin Adler  <darin@apple.com>
 
         Iterating a HashMap<String, X> involves a string equality comparison to check for the empty value
index 06feed6..9bd5482 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
  * Copyright (C) 2008 David Levin <levin@chromium.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -359,7 +359,7 @@ namespace WTF {
         void removeWithoutEntryConsistencyCheck(const_iterator);
         void clear();
 
-        static bool isEmptyBucket(const ValueType& value) { return isHashTraitsEmptyValue<KeyTraits>(Extractor::extract(value)); }
+        static bool isEmptyBucket(const ValueType& value) { return Extractor::extract(value) == KeyTraits::emptyValue(); }
         static bool isDeletedBucket(const ValueType& value) { return KeyTraits::isDeletedValue(Extractor::extract(value)); }
         static bool isEmptyOrDeletedBucket(const ValueType& value) { return isEmptyBucket(value) || isDeletedBucket(value); }
 
index 92306e0..10f14d1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -42,17 +42,8 @@ namespace WTF {
     template<bool isInteger, typename T> struct GenericHashTraitsBase;
 
     template<typename T> struct GenericHashTraitsBase<false, T> {
-        // The emptyValueIsZero flag is used to optimize allocation of empty hash tables with zeroed memory.
         static const bool emptyValueIsZero = false;
-        
-        // The hasIsEmptyValueFunction flag allows the hash table to automatically generate code to check
-        // for the empty value when it can be done with the equality operator, but allows custom functions
-        // for cases like String that need them.
-        static const bool hasIsEmptyValueFunction = false;
-
-        // The needsDestruction flag is used to optimize destruction and rehashing.
         static const bool needsDestruction = true;
-
         static const int minimumTableSize = 64;
     };
 
@@ -147,24 +138,7 @@ namespace WTF {
         // but then callers won't need to call get; doing so will require updating many call sites.
     };
 
-    template<> struct HashTraits<String> : SimpleClassHashTraits<String> {
-        static const bool hasIsEmptyValueFunction = true;
-        static bool isEmptyValue(const String&);
-    };
-
-    // This struct template is an implementation detail of the isHashTraitsEmptyValue function,
-    // which selects either the emptyValue function or the isEmptyValue function to check for empty values.
-    template<typename Traits, bool hasEmptyValueFunction> struct HashTraitsEmptyValueChecker;
-    template<typename Traits> struct HashTraitsEmptyValueChecker<Traits, true> {
-        template<typename T> static bool isEmptyValue(const T& value) { return Traits::isEmptyValue(value); }
-    };
-    template<typename Traits> struct HashTraitsEmptyValueChecker<Traits, false> {
-        template<typename T> static bool isEmptyValue(const T& value) { return value == Traits::emptyValue(); }
-    };
-    template<typename Traits, typename T> inline bool isHashTraitsEmptyValue(const T& value)
-    {
-        return HashTraitsEmptyValueChecker<Traits, Traits::hasIsEmptyValueFunction>::isEmptyValue(value);
-    }
+    template<> struct HashTraits<String> : SimpleClassHashTraits<String> { };
 
     // special traits for pairs, helpful for their use in HashMap implementation
 
@@ -178,10 +152,6 @@ namespace WTF {
         static const bool emptyValueIsZero = FirstTraits::emptyValueIsZero && SecondTraits::emptyValueIsZero;
         static EmptyValueType emptyValue() { return make_pair(FirstTraits::emptyValue(), SecondTraits::emptyValue()); }
 
-        static const bool hasIsEmptyValueFunction = true;
-        static bool isEmptyValue(const TraitType& value)
-            { return isHashTraitsEmptyValue<FirstTraits>(value.first) && isHashTraitsEmptyValue<SecondTraits>(value.second); }
-
         static const bool needsDestruction = FirstTraits::needsDestruction || SecondTraits::needsDestruction;
 
         static const int minimumTableSize = FirstTraits::minimumTableSize;
index 2d34d2c..acc97b9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007, 2008, 2012 Apple Inc. All rights reserved
+ * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved
  * Copyright (C) Research In Motion Limited 2009. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
 #define StringHash_h
 
 #include <wtf/text/AtomicString.h>
+#include <wtf/text/WTFString.h>
+#include <wtf/Forward.h>
 #include <wtf/HashTraits.h>
 #include <wtf/StringHasher.h>
+#include <wtf/unicode/Unicode.h>
 
 namespace WTF {
 
-    inline bool HashTraits<String>::isEmptyValue(const String& value)
-    {
-        return value.isNull();
-    }
-
     // The hash() functions on StringHash and CaseFoldingHash do not support
     // null strings. get(), contains(), and add() on HashMap<String,..., StringHash>
     // cause a null-pointer dereference when passed null strings.
@@ -181,8 +179,8 @@ namespace WTF {
 
 }
 
-using WTF::AlreadyHashed;
-using WTF::CaseFoldingHash;
 using WTF::StringHash;
+using WTF::CaseFoldingHash;
+using WTF::AlreadyHashed;
 
 #endif