Un-indent HashTraits.h.
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Sep 2013 22:54:54 +0000 (22:54 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Sep 2013 22:54:54 +0000 (22:54 +0000)
Rubber-stamped by Andreas Kling.

* wtf/HashTraits.h:

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

Source/WTF/ChangeLog
Source/WTF/wtf/HashTraits.h

index 0f0acd0..a81255e 100644 (file)
@@ -1,3 +1,11 @@
+2013-09-25  Anders Carlsson  <andersca@apple.com>
+
+        Un-indent HashTraits.h.
+
+        Rubber-stamped by Andreas Kling.
+
+        * wtf/HashTraits.h:
+
 2013-09-25  Patrick Gansterer  <paroga@webkit.org>
 
         Fix template deduction for CollatorDefault
index f28eec3..ea25a42 100644 (file)
 
 namespace WTF {
 
-    class String;
-
-    template<typename T> class OwnPtr;
-    template<typename T> class PassOwnPtr;
-
-    template<typename T> struct HashTraits;
-
-    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;
-
-        // The starting table size. Can be overridden when we know beforehand that
-        // a hash table will have at least N entries.
-        static const int minimumTableSize = 8;
-    };
-
-    // Default integer traits disallow both 0 and -1 as keys (max value instead of -1 for unsigned).
-    template<typename T> struct GenericHashTraitsBase<true, T> : GenericHashTraitsBase<false, T> {
-        static const bool emptyValueIsZero = true;
-        static const bool needsDestruction = false;
-        static void constructDeletedValue(T& slot) { slot = static_cast<T>(-1); }
-        static bool isDeletedValue(T value) { return value == static_cast<T>(-1); }
-    };
-
-    template<typename T> struct GenericHashTraits : GenericHashTraitsBase<std::is_integral<T>::value, T> {
-        typedef T TraitType;
-        typedef T EmptyValueType;
-
-        static T emptyValue() { return T(); }
-
-        // Type for functions that take ownership, such as add.
-        // The store function either not be called or called once to store something passed in.
-        // The value passed to the store function will be either PassInType or PassInType&.
-        typedef const T& PassInType;
-        static void store(const T& value, T& storage) { storage = value; }
-
-        // Type for return value of functions that transfer ownership, such as take. 
-        typedef T PassOutType;
-        static PassOutType passOut(const T& value) { return value; }
-        static T& passOut(T& value) { return value; } // Overloaded to avoid copying of non-temporary values.
-
-        // Type for return value of functions that do not transfer ownership, such as get.
-        // FIXME: We could change this type to const T& for better performance if we figured out
-        // a way to handle the return value from emptyValue, which is a temporary.
-        typedef T PeekType;
-        static PeekType peek(const T& value) { return value; }
-        static T& peek(T& value) { return value; } // Overloaded to avoid copying of non-temporary values.
-    };
-
-    template<typename T> struct HashTraits : GenericHashTraits<T> { };
-
-    template<typename T> struct FloatHashTraits : GenericHashTraits<T> {
-        static const bool needsDestruction = false;
-        static T emptyValue() { return std::numeric_limits<T>::infinity(); }
-        static void constructDeletedValue(T& slot) { slot = -std::numeric_limits<T>::infinity(); }
-        static bool isDeletedValue(T value) { return value == -std::numeric_limits<T>::infinity(); }
-    };
-
-    template<> struct HashTraits<float> : FloatHashTraits<float> { };
-    template<> struct HashTraits<double> : FloatHashTraits<double> { };
-
-    // Default unsigned traits disallow both 0 and max as keys -- use these traits to allow zero and disallow max - 1.
-    template<typename T> struct UnsignedWithZeroKeyHashTraits : GenericHashTraits<T> {
-        static const bool emptyValueIsZero = false;
-        static const bool needsDestruction = false;
-        static T emptyValue() { return std::numeric_limits<T>::max(); }
-        static void constructDeletedValue(T& slot) { slot = std::numeric_limits<T>::max() - 1; }
-        static bool isDeletedValue(T value) { return value == std::numeric_limits<T>::max() - 1; }
-    };
-
-    template<typename P> struct HashTraits<P*> : GenericHashTraits<P*> {
-        static const bool emptyValueIsZero = true;
-        static const bool needsDestruction = false;
-        static void constructDeletedValue(P*& slot) { slot = reinterpret_cast<P*>(-1); }
-        static bool isDeletedValue(P* value) { return value == reinterpret_cast<P*>(-1); }
-    };
-
-    template<typename T> struct SimpleClassHashTraits : GenericHashTraits<T> {
-        static const bool emptyValueIsZero = true;
-        static void constructDeletedValue(T& slot) { new (NotNull, &slot) T(HashTableDeletedValue); }
-        static bool isDeletedValue(const T& value) { return value.isHashTableDeletedValue(); }
-    };
-
-    template<typename T, typename Deleter> struct HashTraits<std::unique_ptr<T, Deleter>> : SimpleClassHashTraits<std::unique_ptr<T>> {
-        typedef std::nullptr_t EmptyValueType;
-        static EmptyValueType emptyValue() { return nullptr; }
-
-        typedef T* PeekType;
-        static T* peek(const std::unique_ptr<T, Deleter>& value) { return value.get(); }
-        static T* peek(std::nullptr_t) { return nullptr; }
-    };
-
-    template<typename T> struct HashTraits<OwnPtr<T>> : SimpleClassHashTraits<OwnPtr<T>> {
-        typedef std::nullptr_t EmptyValueType;
-        static EmptyValueType emptyValue() { return nullptr; }
-
-        typedef T* PeekType;
-        static T* peek(const OwnPtr<T>& value) { return value.get(); }
-        static T* peek(std::nullptr_t) { return nullptr; }
-    };
-
-    template<typename P> struct HashTraits<RefPtr<P>> : SimpleClassHashTraits<RefPtr<P>> {
-        static P* emptyValue() { return 0; }
-
-        typedef PassRefPtr<P> PassInType;
-        static void store(PassRefPtr<P> value, RefPtr<P>& storage) { storage = value; }
-
-        typedef PassRefPtr<P> PassOutType;
-        static PassRefPtr<P> passOut(RefPtr<P>& value) { return value.release(); }
-        static PassRefPtr<P> passOut(P* value) { return value; }
-
-        typedef P* PeekType;
-        static PeekType peek(const RefPtr<P>& value) { return value.get(); }
-        static PeekType peek(P* value) { return value; }
-    };
-
-    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)
+class String;
+
+template<typename T> class OwnPtr;
+template<typename T> class PassOwnPtr;
+
+template<typename T> struct HashTraits;
+
+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;
+
+    // The starting table size. Can be overridden when we know beforehand that
+    // a hash table will have at least N entries.
+    static const int minimumTableSize = 8;
+};
+
+// Default integer traits disallow both 0 and -1 as keys (max value instead of -1 for unsigned).
+template<typename T> struct GenericHashTraitsBase<true, T> : GenericHashTraitsBase<false, T> {
+    static const bool emptyValueIsZero = true;
+    static const bool needsDestruction = false;
+    static void constructDeletedValue(T& slot) { slot = static_cast<T>(-1); }
+    static bool isDeletedValue(T value) { return value == static_cast<T>(-1); }
+};
+
+template<typename T> struct GenericHashTraits : GenericHashTraitsBase<std::is_integral<T>::value, T> {
+    typedef T TraitType;
+    typedef T EmptyValueType;
+
+    static T emptyValue() { return T(); }
+
+    // Type for functions that take ownership, such as add.
+    // The store function either not be called or called once to store something passed in.
+    // The value passed to the store function will be either PassInType or PassInType&.
+    typedef const T& PassInType;
+    static void store(const T& value, T& storage) { storage = value; }
+
+    // Type for return value of functions that transfer ownership, such as take. 
+    typedef T PassOutType;
+    static PassOutType passOut(const T& value) { return value; }
+    static T& passOut(T& value) { return value; } // Overloaded to avoid copying of non-temporary values.
+
+    // Type for return value of functions that do not transfer ownership, such as get.
+    // FIXME: We could change this type to const T& for better performance if we figured out
+    // a way to handle the return value from emptyValue, which is a temporary.
+    typedef T PeekType;
+    static PeekType peek(const T& value) { return value; }
+    static T& peek(T& value) { return value; } // Overloaded to avoid copying of non-temporary values.
+};
+
+template<typename T> struct HashTraits : GenericHashTraits<T> { };
+
+template<typename T> struct FloatHashTraits : GenericHashTraits<T> {
+    static const bool needsDestruction = false;
+    static T emptyValue() { return std::numeric_limits<T>::infinity(); }
+    static void constructDeletedValue(T& slot) { slot = -std::numeric_limits<T>::infinity(); }
+    static bool isDeletedValue(T value) { return value == -std::numeric_limits<T>::infinity(); }
+};
+
+template<> struct HashTraits<float> : FloatHashTraits<float> { };
+template<> struct HashTraits<double> : FloatHashTraits<double> { };
+
+// Default unsigned traits disallow both 0 and max as keys -- use these traits to allow zero and disallow max - 1.
+template<typename T> struct UnsignedWithZeroKeyHashTraits : GenericHashTraits<T> {
+    static const bool emptyValueIsZero = false;
+    static const bool needsDestruction = false;
+    static T emptyValue() { return std::numeric_limits<T>::max(); }
+    static void constructDeletedValue(T& slot) { slot = std::numeric_limits<T>::max() - 1; }
+    static bool isDeletedValue(T value) { return value == std::numeric_limits<T>::max() - 1; }
+};
+
+template<typename P> struct HashTraits<P*> : GenericHashTraits<P*> {
+    static const bool emptyValueIsZero = true;
+    static const bool needsDestruction = false;
+    static void constructDeletedValue(P*& slot) { slot = reinterpret_cast<P*>(-1); }
+    static bool isDeletedValue(P* value) { return value == reinterpret_cast<P*>(-1); }
+};
+
+template<typename T> struct SimpleClassHashTraits : GenericHashTraits<T> {
+    static const bool emptyValueIsZero = true;
+    static void constructDeletedValue(T& slot) { new (NotNull, &slot) T(HashTableDeletedValue); }
+    static bool isDeletedValue(const T& value) { return value.isHashTableDeletedValue(); }
+};
+
+template<typename T, typename Deleter> struct HashTraits<std::unique_ptr<T, Deleter>> : SimpleClassHashTraits<std::unique_ptr<T>> {
+    typedef std::nullptr_t EmptyValueType;
+    static EmptyValueType emptyValue() { return nullptr; }
+
+    typedef T* PeekType;
+    static T* peek(const std::unique_ptr<T, Deleter>& value) { return value.get(); }
+    static T* peek(std::nullptr_t) { return nullptr; }
+};
+
+template<typename T> struct HashTraits<OwnPtr<T>> : SimpleClassHashTraits<OwnPtr<T>> {
+    typedef std::nullptr_t EmptyValueType;
+    static EmptyValueType emptyValue() { return nullptr; }
+
+    typedef T* PeekType;
+    static T* peek(const OwnPtr<T>& value) { return value.get(); }
+    static T* peek(std::nullptr_t) { return nullptr; }
+};
+
+template<typename P> struct HashTraits<RefPtr<P>> : SimpleClassHashTraits<RefPtr<P>> {
+    static P* emptyValue() { return 0; }
+
+    typedef PassRefPtr<P> PassInType;
+    static void store(PassRefPtr<P> value, RefPtr<P>& storage) { storage = value; }
+
+    typedef PassRefPtr<P> PassOutType;
+    static PassRefPtr<P> passOut(RefPtr<P>& value) { return value.release(); }
+    static PassRefPtr<P> passOut(P* value) { return value; }
+
+    typedef P* PeekType;
+    static PeekType peek(const RefPtr<P>& value) { return value.get(); }
+    static PeekType peek(P* value) { return value; }
+};
+
+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<typename FirstTraitsArg, typename SecondTraitsArg>
+struct PairHashTraits : GenericHashTraits<std::pair<typename FirstTraitsArg::TraitType, typename SecondTraitsArg::TraitType>> {
+    typedef FirstTraitsArg FirstTraits;
+    typedef SecondTraitsArg SecondTraits;
+    typedef std::pair<typename FirstTraits::TraitType, typename SecondTraits::TraitType> TraitType;
+    typedef std::pair<typename FirstTraits::EmptyValueType, typename SecondTraits::EmptyValueType> EmptyValueType;
+
+    static const bool emptyValueIsZero = FirstTraits::emptyValueIsZero && SecondTraits::emptyValueIsZero;
+    static EmptyValueType emptyValue() { return std::make_pair(FirstTraits::emptyValue(), SecondTraits::emptyValue()); }
+
+    static const bool needsDestruction = FirstTraits::needsDestruction || SecondTraits::needsDestruction;
+
+    static const int minimumTableSize = FirstTraits::minimumTableSize;
+
+    static void constructDeletedValue(TraitType& slot) { FirstTraits::constructDeletedValue(slot.first); }
+    static bool isDeletedValue(const TraitType& value) { return FirstTraits::isDeletedValue(value.first); }
+};
+
+template<typename First, typename Second>
+struct HashTraits<std::pair<First, Second>> : public PairHashTraits<HashTraits<First>, HashTraits<Second>> { };
+
+template<typename KeyTypeArg, typename ValueTypeArg>
+struct KeyValuePair {
+    typedef KeyTypeArg KeyType;
+
+    KeyValuePair()
     {
-        return HashTraitsEmptyValueChecker<Traits, Traits::hasIsEmptyValueFunction>::isEmptyValue(value);
     }
 
-    template<typename FirstTraitsArg, typename SecondTraitsArg>
-    struct PairHashTraits : GenericHashTraits<std::pair<typename FirstTraitsArg::TraitType, typename SecondTraitsArg::TraitType>> {
-        typedef FirstTraitsArg FirstTraits;
-        typedef SecondTraitsArg SecondTraits;
-        typedef std::pair<typename FirstTraits::TraitType, typename SecondTraits::TraitType> TraitType;
-        typedef std::pair<typename FirstTraits::EmptyValueType, typename SecondTraits::EmptyValueType> EmptyValueType;
-
-        static const bool emptyValueIsZero = FirstTraits::emptyValueIsZero && SecondTraits::emptyValueIsZero;
-        static EmptyValueType emptyValue() { return std::make_pair(FirstTraits::emptyValue(), SecondTraits::emptyValue()); }
-
-        static const bool needsDestruction = FirstTraits::needsDestruction || SecondTraits::needsDestruction;
-
-        static const int minimumTableSize = FirstTraits::minimumTableSize;
-
-        static void constructDeletedValue(TraitType& slot) { FirstTraits::constructDeletedValue(slot.first); }
-        static bool isDeletedValue(const TraitType& value) { return FirstTraits::isDeletedValue(value.first); }
-    };
-
-    template<typename First, typename Second>
-    struct HashTraits<std::pair<First, Second>> : public PairHashTraits<HashTraits<First>, HashTraits<Second>> { };
-
-    template<typename KeyTypeArg, typename ValueTypeArg>
-    struct KeyValuePair {
-        typedef KeyTypeArg KeyType;
-
-        KeyValuePair()
-        {
-        }
-
-        template<typename K, typename V>
-        KeyValuePair(K&& key, V&& value)
-            : key(std::forward<K>(key))
-            , value(std::forward<V>(value))
-        {
-        }
+    template<typename K, typename V>
+    KeyValuePair(K&& key, V&& value)
+        : key(std::forward<K>(key))
+        , value(std::forward<V>(value))
+    {
+    }
 
-        template <typename OtherKeyType, typename OtherValueType>
-        KeyValuePair(KeyValuePair<OtherKeyType, OtherValueType>&& other)
-            : key(std::forward<OtherKeyType>(other.key))
-            , value(std::forward<OtherValueType>(other.value))
-        {
-        }
+    template <typename OtherKeyType, typename OtherValueType>
+    KeyValuePair(KeyValuePair<OtherKeyType, OtherValueType>&& other)
+        : key(std::forward<OtherKeyType>(other.key))
+        , value(std::forward<OtherValueType>(other.value))
+    {
+    }
 
-        KeyTypeArg key;
-        ValueTypeArg value;
-    };
+    KeyTypeArg key;
+    ValueTypeArg value;
+};
 
-    template<typename KeyTraitsArg, typename ValueTraitsArg>
-    struct KeyValuePairHashTraits : GenericHashTraits<KeyValuePair<typename KeyTraitsArg::TraitType, typename ValueTraitsArg::TraitType>> {
-        typedef KeyTraitsArg KeyTraits;
-        typedef ValueTraitsArg ValueTraits;
-        typedef KeyValuePair<typename KeyTraits::TraitType, typename ValueTraits::TraitType> TraitType;
-        typedef KeyValuePair<typename KeyTraits::EmptyValueType, typename ValueTraits::EmptyValueType> EmptyValueType;
+template<typename KeyTraitsArg, typename ValueTraitsArg>
+struct KeyValuePairHashTraits : GenericHashTraits<KeyValuePair<typename KeyTraitsArg::TraitType, typename ValueTraitsArg::TraitType>> {
+    typedef KeyTraitsArg KeyTraits;
+    typedef ValueTraitsArg ValueTraits;
+    typedef KeyValuePair<typename KeyTraits::TraitType, typename ValueTraits::TraitType> TraitType;
+    typedef KeyValuePair<typename KeyTraits::EmptyValueType, typename ValueTraits::EmptyValueType> EmptyValueType;
 
-        static const bool emptyValueIsZero = KeyTraits::emptyValueIsZero && ValueTraits::emptyValueIsZero;
-        static EmptyValueType emptyValue() { return KeyValuePair<typename KeyTraits::EmptyValueType, typename ValueTraits::EmptyValueType>(KeyTraits::emptyValue(), ValueTraits::emptyValue()); }
+    static const bool emptyValueIsZero = KeyTraits::emptyValueIsZero && ValueTraits::emptyValueIsZero;
+    static EmptyValueType emptyValue() { return KeyValuePair<typename KeyTraits::EmptyValueType, typename ValueTraits::EmptyValueType>(KeyTraits::emptyValue(), ValueTraits::emptyValue()); }
 
-        static const bool needsDestruction = KeyTraits::needsDestruction || ValueTraits::needsDestruction;
+    static const bool needsDestruction = KeyTraits::needsDestruction || ValueTraits::needsDestruction;
 
-        static const int minimumTableSize = KeyTraits::minimumTableSize;
+    static const int minimumTableSize = KeyTraits::minimumTableSize;
 
-        static void constructDeletedValue(TraitType& slot) { KeyTraits::constructDeletedValue(slot.key); }
-        static bool isDeletedValue(const TraitType& value) { return KeyTraits::isDeletedValue(value.key); }
-    };
+    static void constructDeletedValue(TraitType& slot) { KeyTraits::constructDeletedValue(slot.key); }
+    static bool isDeletedValue(const TraitType& value) { return KeyTraits::isDeletedValue(value.key); }
+};
 
-    template<typename Key, typename Value>
-    struct HashTraits<KeyValuePair<Key, Value>> : public KeyValuePairHashTraits<HashTraits<Key>, HashTraits<Value>> { };
+template<typename Key, typename Value>
+struct HashTraits<KeyValuePair<Key, Value>> : public KeyValuePairHashTraits<HashTraits<Key>, HashTraits<Value>> { };
 
-    template<typename T>
-    struct NullableHashTraits : public HashTraits<T> {
-        static const bool emptyValueIsZero = false;
-        static T emptyValue() { return reinterpret_cast<T>(1); }
-    };
+template<typename T>
+struct NullableHashTraits : public HashTraits<T> {
+    static const bool emptyValueIsZero = false;
+    static T emptyValue() { return reinterpret_cast<T>(1); }
+};
 
 } // namespace WTF