| Index: Source/platform/heap/Heap.h
|
| diff --git a/Source/platform/heap/Heap.h b/Source/platform/heap/Heap.h
|
| index 12e40a33d76ded590c7b6f2aa6bc4e7fe8129e66..18af2544fd838e7730a92523bdfdd00a24e49b4d 100644
|
| --- a/Source/platform/heap/Heap.h
|
| +++ b/Source/platform/heap/Heap.h
|
| @@ -37,6 +37,7 @@
|
| #include "platform/heap/Visitor.h"
|
|
|
| #include "wtf/Assertions.h"
|
| +#include "wtf/HashCountedSet.h"
|
| #include "wtf/LinkedHashSet.h"
|
| #include "wtf/OwnPtr.h"
|
| #include "wtf/PassRefPtr.h"
|
| @@ -1446,6 +1447,12 @@ template<
|
| typename TraitsArg = HashTraits<ValueArg> >
|
| class HeapLinkedHashSet : public LinkedHashSet<ValueArg, HashArg, TraitsArg, HeapAllocator> { };
|
|
|
| +template<
|
| + typename Value,
|
| + typename HashFunctions = typename DefaultHash<Value>::Hash,
|
| + typename Traits = HashTraits<Value> >
|
| +class HeapHashCountedSet : public HashCountedSet<Value, HashFunctions, Traits, HeapAllocator> { };
|
| +
|
| template<typename T, size_t inlineCapacity = 0>
|
| class HeapVector : public Vector<T, inlineCapacity, HeapAllocator> {
|
| public:
|
| @@ -1570,6 +1577,11 @@ struct ThreadingTrait<Deque<T, inlineCapacity, HeapAllocator> > {
|
| static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity;
|
| };
|
|
|
| +template<typename T, typename U, typename V>
|
| +struct ThreadingTrait<HashCountedSet<T, U, V, HeapAllocator> > {
|
| + static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity;
|
| +};
|
| +
|
| template<typename Table>
|
| struct ThreadingTrait<HeapHashTableBacking<Table> > {
|
| typedef typename Table::KeyType Key;
|
| @@ -1591,10 +1603,13 @@ struct ThreadingTrait<HeapVector<T, inlineCapacity> > : public ThreadingTrait<Ve
|
| template<typename T, size_t inlineCapacity>
|
| struct ThreadingTrait<HeapDeque<T, inlineCapacity> > : public ThreadingTrait<Deque<T, inlineCapacity, HeapAllocator> > { };
|
|
|
| +template<typename T, typename U, typename V>
|
| +struct ThreadingTrait<HeapHashCountedSet<T, U, V> > : public ThreadingTrait<HashCountedSet<T, U, V, HeapAllocator> > { };
|
| +
|
| // The standard implementation of GCInfoTrait<T>::get() just returns a static
|
| -// from the class T, but we can't do that for HashMap, HashSet, Deque and
|
| -// Vector because they are in WTF and know nothing of GCInfos. Instead we have
|
| -// a specialization of GCInfoTrait for these four classes here.
|
| +// from the class T, but we can't do that for HashMap, HashSet, Vector, etc.
|
| +// because they are in WTF and know nothing of GCInfos. Instead we have a
|
| +// specialization of GCInfoTrait for these four classes here.
|
|
|
| template<typename Key, typename Value, typename T, typename U, typename V>
|
| struct GCInfoTrait<HashMap<Key, Value, T, U, V, HeapAllocator> > {
|
| @@ -1710,6 +1725,25 @@ struct GCInfoTrait<Deque<T, 0, HeapAllocator> > {
|
| static const GCInfo info;
|
| };
|
|
|
| +template<typename T, typename U, typename V>
|
| +struct GCInfoTrait<HashCountedSet<T, U, V, HeapAllocator> > {
|
| + static const GCInfo* get()
|
| + {
|
| + typedef HashCountedSet<T, U, V, HeapAllocator> TargetType;
|
| + static const GCInfo info = {
|
| + TraceTrait<TargetType>::trace,
|
| + 0,
|
| + false, // HashCountedSet is just a HashTable, and needs no finalizer.
|
| + VTableTrait<TargetType>::hasVTable,
|
| +#if ENABLE(GC_TRACING)
|
| + TypenameStringTrait<TargetType>::get()
|
| +#endif
|
| + };
|
| + return &info;
|
| + }
|
| + static const GCInfo info;
|
| +};
|
| +
|
| template<typename T, size_t inlineCapacity>
|
| struct FinalizerTrait<Deque<T, inlineCapacity, HeapAllocator> > : public FinalizerTraitImpl<Deque<T, inlineCapacity, HeapAllocator>, true> { };
|
|
|
| @@ -2003,6 +2037,8 @@ template<typename T, size_t inlineCapacity>
|
| struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator> > { };
|
| template<typename T, size_t inlineCapacity>
|
| struct GCInfoTrait<HeapDeque<T, inlineCapacity> > : public GCInfoTrait<Deque<T, inlineCapacity, HeapAllocator> > { };
|
| +template<typename T, typename U, typename V>
|
| +struct GCInfoTrait<HeapHashCountedSet<T, U, V> > : public GCInfoTrait<HashCountedSet<T, U, V, HeapAllocator> > { };
|
|
|
| template<typename T>
|
| struct IfWeakMember;
|
|
|