Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: Source/platform/heap/Handle.h

Issue 223373002: Create HeapLinkedHashSet and LinkedHashSet, ordered heap-friendly hash sets. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Review feedback and many more tests Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/platform/heap/Heap.h » ('j') | Source/wtf/LinkedHashSet.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 namespace WebCore { 43 namespace WebCore {
44 44
45 template<typename T> class HeapTerminatedArray; 45 template<typename T> class HeapTerminatedArray;
46 46
47 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage) \ 47 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage) \
48 do { \ 48 do { \
49 typedef typename WTF::RemoveConst<T>::Type NonConstType; \ 49 typedef typename WTF::RemoveConst<T>::Type NonConstType; \
50 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> Garbag eCollectedSubclass; \ 50 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> Garbag eCollectedSubclass; \
51 typedef WTF::IsSubclass<NonConstType, GarbageCollectedMixin> GarbageColl ectedMixinSubclass; \ 51 typedef WTF::IsSubclass<NonConstType, GarbageCollectedMixin> GarbageColl ectedMixinSubclass; \
52 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSe tSubclass; \ 52 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSe tSubclass; \
53 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapLinkedHashSet> Heap LinkedHashSetSubclass; \
53 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMa pSubclass; \ 54 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMa pSubclass; \
54 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector> HeapVectorSubclass; \ 55 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector> HeapVectorSubclass; \
55 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> Hea pTerminatedArraySubclass; \ 56 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> Hea pTerminatedArraySubclass; \
56 COMPILE_ASSERT(GarbageCollectedSubclass::value || \ 57 COMPILE_ASSERT(GarbageCollectedSubclass::value || \
57 GarbageCollectedMixinSubclass::value || \ 58 GarbageCollectedMixinSubclass::value || \
58 HeapHashSetSubclass::value || \ 59 HeapHashSetSubclass::value || \
60 HeapLinkedHashSetSubclass::value || \
59 HeapHashMapSubclass::value || \ 61 HeapHashMapSubclass::value || \
60 HeapVectorSubclass::value || \ 62 HeapVectorSubclass::value || \
61 HeapTerminatedArraySubclass::value, \ 63 HeapTerminatedArraySubclass::value, \
62 ErrorMessage); \ 64 ErrorMessage); \
63 } while (0) 65 } while (0)
64 66
65 template<typename T> class Member; 67 template<typename T> class Member;
66 68
67 class PersistentNode { 69 class PersistentNode {
68 public: 70 public:
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 typename KeyTraitsArg = HashTraits<KeyArg>, 403 typename KeyTraitsArg = HashTraits<KeyArg>,
402 typename MappedTraitsArg = HashTraits<MappedArg> > 404 typename MappedTraitsArg = HashTraits<MappedArg> >
403 class PersistentHeapHashMap : public PersistentHeapCollectionBase<HeapHashMap<Ke yArg, MappedArg, HashArg, KeyTraitsArg, MappedTraitsArg> > { }; 405 class PersistentHeapHashMap : public PersistentHeapCollectionBase<HeapHashMap<Ke yArg, MappedArg, HashArg, KeyTraitsArg, MappedTraitsArg> > { };
404 406
405 template< 407 template<
406 typename ValueArg, 408 typename ValueArg,
407 typename HashArg = typename DefaultHash<ValueArg>::Hash, 409 typename HashArg = typename DefaultHash<ValueArg>::Hash,
408 typename TraitsArg = HashTraits<ValueArg> > 410 typename TraitsArg = HashTraits<ValueArg> >
409 class PersistentHeapHashSet : public PersistentHeapCollectionBase<HeapHashSet<Va lueArg, HashArg, TraitsArg> > { }; 411 class PersistentHeapHashSet : public PersistentHeapCollectionBase<HeapHashSet<Va lueArg, HashArg, TraitsArg> > { };
410 412
413 template<
414 typename ValueArg,
415 typename HashArg = typename DefaultHash<ValueArg>::Hash,
416 typename TraitsArg = HashTraits<ValueArg> >
417 class PersistentHeapLinkedHashSet : public PersistentHeapCollectionBase<HeapLink edHashSet<ValueArg, HashArg, TraitsArg> > { };
418
411 template<typename T, size_t inlineCapacity = 0> 419 template<typename T, size_t inlineCapacity = 0>
412 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i nlineCapacity> > { 420 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i nlineCapacity> > {
413 public: 421 public:
414 PersistentHeapVector() { } 422 PersistentHeapVector() { }
415 423
416 template<size_t otherCapacity> 424 template<size_t otherCapacity>
417 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) 425 PersistentHeapVector(const HeapVector<T, otherCapacity>& other)
418 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other) 426 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other)
419 { 427 {
420 } 428 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 537
530 void swap(Member<T>& other) { std::swap(m_raw, other.m_raw); } 538 void swap(Member<T>& other) { std::swap(m_raw, other.m_raw); }
531 539
532 T* get() const { return m_raw; } 540 T* get() const { return m_raw; }
533 541
534 void clear() { m_raw = 0; } 542 void clear() { m_raw = 0; }
535 543
536 protected: 544 protected:
537 T* m_raw; 545 T* m_raw;
538 546
539 template<bool x, bool y, bool z, typename U, typename V> friend struct Colle ctionBackingTraceTrait; 547 template<bool x, bool y, ShouldWeakPointersBeMarkedStrongly z, typename U, t ypename V> friend struct CollectionBackingTraceTrait;
540 }; 548 };
541 549
542 template<typename T> 550 template<typename T>
543 class TraceTrait<Member<T> > { 551 class TraceTrait<Member<T> > {
544 public: 552 public:
545 static void trace(Visitor* visitor, void* self) 553 static void trace(Visitor* visitor, void* self)
546 { 554 {
547 TraceTrait<T>::mark(visitor, *static_cast<Member<T>*>(self)); 555 TraceTrait<T>::mark(visitor, *static_cast<Member<T>*>(self));
548 } 556 }
549 }; 557 };
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 #define OwnPtrWillBeMember WebCore::Member 718 #define OwnPtrWillBeMember WebCore::Member
711 #define OwnPtrWillBePersistent WebCore::Persistent 719 #define OwnPtrWillBePersistent WebCore::Persistent
712 #define OwnPtrWillBeRawPtr WTF::RawPtr 720 #define OwnPtrWillBeRawPtr WTF::RawPtr
713 #define PassOwnPtrWillBeRawPtr WTF::RawPtr 721 #define PassOwnPtrWillBeRawPtr WTF::RawPtr
714 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected 722 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected
715 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized 723 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized
716 #define WillBeHeapHashMap WebCore::HeapHashMap 724 #define WillBeHeapHashMap WebCore::HeapHashMap
717 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap 725 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap
718 #define WillBeHeapHashSet WebCore::HeapHashSet 726 #define WillBeHeapHashSet WebCore::HeapHashSet
719 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet 727 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet
728 #define WillBeHeapLinkedHashSet WebCore::HeapLinkedHashSet
729 #define WillBePersistentHeapLinkedHashSet WebCore::PersistentHeapLinkedHashSet
720 #define WillBeHeapVector WebCore::HeapVector 730 #define WillBeHeapVector WebCore::HeapVector
721 #define WillBePersistentHeapVector WebCore::PersistentHeapVector 731 #define WillBePersistentHeapVector WebCore::PersistentHeapVector
722 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin 732 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin
723 #define WillBeHeapSupplement WebCore::HeapSupplement 733 #define WillBeHeapSupplement WebCore::HeapSupplement
724 #define WillBeHeapSupplementable WebCore::HeapSupplementable 734 #define WillBeHeapSupplementable WebCore::HeapSupplementable
725 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray 735 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray
726 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder 736 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder
727 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack 737 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack
728 738
729 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) 739 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 #define OwnPtrWillBeMember WTF::OwnPtr 790 #define OwnPtrWillBeMember WTF::OwnPtr
781 #define OwnPtrWillBePersistent WTF::OwnPtr 791 #define OwnPtrWillBePersistent WTF::OwnPtr
782 #define OwnPtrWillBeRawPtr WTF::OwnPtr 792 #define OwnPtrWillBeRawPtr WTF::OwnPtr
783 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr 793 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr
784 #define NoBaseWillBeGarbageCollected WebCore::DummyBase 794 #define NoBaseWillBeGarbageCollected WebCore::DummyBase
785 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase 795 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase
786 #define WillBeHeapHashMap WTF::HashMap 796 #define WillBeHeapHashMap WTF::HashMap
787 #define WillBePersistentHeapHashMap WTF::HashMap 797 #define WillBePersistentHeapHashMap WTF::HashMap
788 #define WillBeHeapHashSet WTF::HashSet 798 #define WillBeHeapHashSet WTF::HashSet
789 #define WillBePersistentHeapHashSet WTF::HashSet 799 #define WillBePersistentHeapHashSet WTF::HashSet
800 #define WillBeHeapLinkedHashSet WTF::LinkedHashSet
801 #define WillBePersistentLinkedHeapHashSet WTF::LinkedHashSet
790 #define WillBeHeapVector WTF::Vector 802 #define WillBeHeapVector WTF::Vector
791 #define WillBePersistentHeapVector WTF::Vector 803 #define WillBePersistentHeapVector WTF::Vector
792 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void> 804 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void>
793 #define WillBeHeapSupplement WebCore::Supplement 805 #define WillBeHeapSupplement WebCore::Supplement
794 #define WillBeHeapSupplementable WebCore::Supplementable 806 #define WillBeHeapSupplementable WebCore::Supplementable
795 #define WillBeHeapTerminatedArray WTF::TerminatedArray 807 #define WillBeHeapTerminatedArray WTF::TerminatedArray
796 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder 808 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder
797 #define WillBeHeapLinkedStack WTF::LinkedStack 809 #define WillBeHeapLinkedStack WTF::LinkedStack
798 810
799 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu rn adoptRef(ptr); } 811 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu rn adoptRef(ptr); }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 template<typename T, size_t N> 973 template<typename T, size_t N>
962 struct NeedsTracing<Vector<T, N> > { 974 struct NeedsTracing<Vector<T, N> > {
963 static const bool value = false; 975 static const bool value = false;
964 }; 976 };
965 977
966 template<typename T, size_t N> 978 template<typename T, size_t N>
967 struct NeedsTracing<Deque<T, N> > { 979 struct NeedsTracing<Deque<T, N> > {
968 static const bool value = false; 980 static const bool value = false;
969 }; 981 };
970 982
971 template<typename T> 983 template<typename T, typename U, typename V>
972 struct NeedsTracing<HashSet<T> > { 984 struct NeedsTracing<HashSet<T, U, V> > {
973 static const bool value = false; 985 static const bool value = false;
974 }; 986 };
975 987
976 template<typename T> 988 template<typename T, size_t U, typename V>
977 struct NeedsTracing<ListHashSet<T> > { 989 struct NeedsTracing<ListHashSet<T, U, V> > {
978 static const bool value = false; 990 static const bool value = false;
979 }; 991 };
980 992
981 template<typename T, typename U> 993 template<typename T, typename U, typename V>
982 struct NeedsTracing<HashMap<T, U> > { 994 struct NeedsTracing<LinkedHashSet<T, U, V> > {
983 static const bool value = false; 995 static const bool value = false;
984 }; 996 };
985 997
998 template<typename T, typename U, typename V, typename W, typename X>
999 struct NeedsTracing<HashMap<T, U, V, W, X> > {
1000 static const bool value = false;
1001 };
1002
986 } // namespace WTF 1003 } // namespace WTF
987 1004
988 #endif 1005 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/platform/heap/Heap.h » ('j') | Source/wtf/LinkedHashSet.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698