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

Side by Side Diff: Source/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: Remove inadvertent changes 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/heap/Heap.h » ('j') | Source/heap/Heap.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 43
44 namespace WebCore { 44 namespace WebCore {
45 45
46 template<typename T> class HeapTerminatedArray; 46 template<typename T> class HeapTerminatedArray;
47 47
48 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage) \ 48 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage) \
49 typedef typename WTF::RemoveConst<T>::Type NonConstType; \ 49 typedef typename WTF::RemoveConst<T>::Type NonConstType; \
50 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> GarbageCol lectedSubclass; \ 50 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> GarbageCol lectedSubclass; \
51 typedef WTF::IsSubclass<NonConstType, GarbageCollectedMixin> GarbageCollecte dMixinSubclass; \ 51 typedef WTF::IsSubclass<NonConstType, GarbageCollectedMixin> GarbageCollecte dMixinSubclass; \
52 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSetSub class; \ 52 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSetSub class; \
53 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapLinkedHashSet> HeapLink edHashSetSubclass; \
53 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMapSub class; \ 54 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMapSub class; \
54 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector> Heap VectorSubclass; \ 55 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector> Heap VectorSubclass; \
55 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> HeapTer minatedArraySubclass; \ 56 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> HeapTer minatedArraySubclass; \
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 65
64 template<typename T> class Member; 66 template<typename T> class Member;
65 67
66 class PersistentNode { 68 class PersistentNode {
67 public: 69 public:
68 explicit PersistentNode(TraceCallback trace) 70 explicit PersistentNode(TraceCallback trace)
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 typename KeyTraitsArg = HashTraits<KeyArg>, 391 typename KeyTraitsArg = HashTraits<KeyArg>,
390 typename MappedTraitsArg = HashTraits<MappedArg> > 392 typename MappedTraitsArg = HashTraits<MappedArg> >
391 class PersistentHeapHashMap : public PersistentHeapCollectionBase<HeapHashMap<Ke yArg, MappedArg, HashArg, KeyTraitsArg, MappedTraitsArg> > { }; 393 class PersistentHeapHashMap : public PersistentHeapCollectionBase<HeapHashMap<Ke yArg, MappedArg, HashArg, KeyTraitsArg, MappedTraitsArg> > { };
392 394
393 template< 395 template<
394 typename ValueArg, 396 typename ValueArg,
395 typename HashArg = typename DefaultHash<ValueArg>::Hash, 397 typename HashArg = typename DefaultHash<ValueArg>::Hash,
396 typename TraitsArg = HashTraits<ValueArg> > 398 typename TraitsArg = HashTraits<ValueArg> >
397 class PersistentHeapHashSet : public PersistentHeapCollectionBase<HeapHashSet<Va lueArg, HashArg, TraitsArg> > { }; 399 class PersistentHeapHashSet : public PersistentHeapCollectionBase<HeapHashSet<Va lueArg, HashArg, TraitsArg> > { };
398 400
401 template<
402 typename ValueArg,
403 typename HashArg = typename DefaultHash<ValueArg>::Hash,
404 typename TraitsArg = HashTraits<ValueArg> >
405 class PersistentHeapLinkedHashSet : public PersistentHeapCollectionBase<HeapLink edHashSet<ValueArg, HashArg, TraitsArg> > { };
406
399 template<typename T, size_t inlineCapacity = 0> 407 template<typename T, size_t inlineCapacity = 0>
400 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i nlineCapacity> > { 408 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i nlineCapacity> > {
401 public: 409 public:
402 PersistentHeapVector() { } 410 PersistentHeapVector() { }
403 411
404 template<size_t otherCapacity> 412 template<size_t otherCapacity>
405 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) 413 PersistentHeapVector(const HeapVector<T, otherCapacity>& other)
406 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other) 414 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other)
407 { 415 {
408 } 416 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 bool isHashTableDeletedValue() const { return m_raw == reinterpret_cast<T*>( -1); } 449 bool isHashTableDeletedValue() const { return m_raw == reinterpret_cast<T*>( -1); }
442 450
443 template<typename U> 451 template<typename U>
444 Member(const Persistent<U>& other) : m_raw(other) { } 452 Member(const Persistent<U>& other) : m_raw(other) { }
445 453
446 Member(const Member& other) : m_raw(other) { } 454 Member(const Member& other) : m_raw(other) { }
447 455
448 template<typename U> 456 template<typename U>
449 Member(const Member<U>& other) : m_raw(other) { } 457 Member(const Member<U>& other) : m_raw(other) { }
450 458
459 template<typename U>
460 Member(const RawPtr<U>& other) : m_raw(other) { }
461
451 T* release() 462 T* release()
452 { 463 {
453 T* result = m_raw; 464 T* result = m_raw;
454 m_raw = 0; 465 m_raw = 0;
455 return result; 466 return result;
456 } 467 }
457 468
458 template<typename U> 469 template<typename U>
459 U* as() const 470 U* as() const
460 { 471 {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, NonGarbageCollectedObjectInWeakMe mber); 608 COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, NonGarbageCollectedObjectInWeakMe mber);
598 } 609 }
599 610
600 template<typename U> 611 template<typename U>
601 WeakMember(const Persistent<U>& other) : Member<T>(other) { } 612 WeakMember(const Persistent<U>& other) : Member<T>(other) { }
602 613
603 template<typename U> 614 template<typename U>
604 WeakMember(const Member<U>& other) : Member<T>(other) { } 615 WeakMember(const Member<U>& other) : Member<T>(other) { }
605 616
606 template<typename U> 617 template<typename U>
618 WeakMember(const RawPtr<U>& other) : Member<T>(other) { }
619
620 template<typename U>
607 WeakMember& operator=(const Persistent<U>& other) 621 WeakMember& operator=(const Persistent<U>& other)
608 { 622 {
609 this->m_raw = other; 623 this->m_raw = other;
610 return *this; 624 return *this;
611 } 625 }
612 626
613 template<typename U> 627 template<typename U>
614 WeakMember& operator=(const Member<U>& other) 628 WeakMember& operator=(const Member<U>& other)
615 { 629 {
616 this->m_raw = other; 630 this->m_raw = other;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 #define OwnPtrWillBeMember WebCore::Member 700 #define OwnPtrWillBeMember WebCore::Member
687 #define OwnPtrWillBePersistent WebCore::Persistent 701 #define OwnPtrWillBePersistent WebCore::Persistent
688 #define OwnPtrWillBeRawPtr WTF::RawPtr 702 #define OwnPtrWillBeRawPtr WTF::RawPtr
689 #define PassOwnPtrWillBeRawPtr WTF::RawPtr 703 #define PassOwnPtrWillBeRawPtr WTF::RawPtr
690 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected 704 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected
691 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized 705 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized
692 #define WillBeHeapHashMap WebCore::HeapHashMap 706 #define WillBeHeapHashMap WebCore::HeapHashMap
693 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap 707 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap
694 #define WillBeHeapHashSet WebCore::HeapHashSet 708 #define WillBeHeapHashSet WebCore::HeapHashSet
695 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet 709 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet
710 #define WillBeHeapLinkedHashSet WebCore::HeapLinkedHashSet
711 #define WillBePersistentHeapLinkedHashSet WebCore::PersistentHeapLinkedHashSet
696 #define WillBeHeapVector WebCore::HeapVector 712 #define WillBeHeapVector WebCore::HeapVector
697 #define WillBePersistentHeapVector WebCore::PersistentHeapVector 713 #define WillBePersistentHeapVector WebCore::PersistentHeapVector
698 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin 714 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin
699 #define WillBeHeapSupplement WebCore::HeapSupplement 715 #define WillBeHeapSupplement WebCore::HeapSupplement
700 #define WillBeHeapSupplementable WebCore::HeapSupplementable 716 #define WillBeHeapSupplementable WebCore::HeapSupplementable
701 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray 717 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray
702 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder 718 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder
703 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack 719 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack
704 720
705 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) 721 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 #define OwnPtrWillBeMember WTF::OwnPtr 772 #define OwnPtrWillBeMember WTF::OwnPtr
757 #define OwnPtrWillBePersistent WTF::OwnPtr 773 #define OwnPtrWillBePersistent WTF::OwnPtr
758 #define OwnPtrWillBeRawPtr WTF::OwnPtr 774 #define OwnPtrWillBeRawPtr WTF::OwnPtr
759 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr 775 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr
760 #define NoBaseWillBeGarbageCollected WebCore::DummyBase 776 #define NoBaseWillBeGarbageCollected WebCore::DummyBase
761 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase 777 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase
762 #define WillBeHeapHashMap WTF::HashMap 778 #define WillBeHeapHashMap WTF::HashMap
763 #define WillBePersistentHeapHashMap WTF::HashMap 779 #define WillBePersistentHeapHashMap WTF::HashMap
764 #define WillBeHeapHashSet WTF::HashSet 780 #define WillBeHeapHashSet WTF::HashSet
765 #define WillBePersistentHeapHashSet WTF::HashSet 781 #define WillBePersistentHeapHashSet WTF::HashSet
782 #define WillBeHeapLinkedHashSet WTF::LinkedHashSet
783 #define WillBePersistentLinkedHeapHashSet WTF::LinkedHashSet
766 #define WillBeHeapVector WTF::Vector 784 #define WillBeHeapVector WTF::Vector
767 #define WillBePersistentHeapVector WTF::Vector 785 #define WillBePersistentHeapVector WTF::Vector
768 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void> 786 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void>
769 #define WillBeHeapSupplement WebCore::Supplement 787 #define WillBeHeapSupplement WebCore::Supplement
770 #define WillBeHeapSupplementable WebCore::Supplementable 788 #define WillBeHeapSupplementable WebCore::Supplementable
771 #define WillBeHeapTerminatedArray WTF::TerminatedArray 789 #define WillBeHeapTerminatedArray WTF::TerminatedArray
772 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder 790 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder
773 #define WillBeHeapLinkedStack WTF::LinkedStack 791 #define WillBeHeapLinkedStack WTF::LinkedStack
774 792
775 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu rn adoptRef(ptr); } 793 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu rn adoptRef(ptr); }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 template<typename T, size_t N> 955 template<typename T, size_t N>
938 struct NeedsTracing<Vector<T, N> > { 956 struct NeedsTracing<Vector<T, N> > {
939 static const bool value = false; 957 static const bool value = false;
940 }; 958 };
941 959
942 template<typename T, size_t N> 960 template<typename T, size_t N>
943 struct NeedsTracing<Deque<T, N> > { 961 struct NeedsTracing<Deque<T, N> > {
944 static const bool value = false; 962 static const bool value = false;
945 }; 963 };
946 964
947 template<typename T> 965 template<typename T, typename U, typename V>
948 struct NeedsTracing<HashSet<T> > { 966 struct NeedsTracing<HashSet<T, U, V> > {
949 static const bool value = false; 967 static const bool value = false;
950 }; 968 };
951 969
952 template<typename T> 970 template<typename T, size_t U, typename V>
953 struct NeedsTracing<ListHashSet<T> > { 971 struct NeedsTracing<ListHashSet<T, U, V> > {
954 static const bool value = false; 972 static const bool value = false;
955 }; 973 };
956 974
957 template<typename T, typename U> 975 template<typename T, typename U, typename V>
958 struct NeedsTracing<HashMap<T, U> > { 976 struct NeedsTracing<LinkedHashSet<T, U, V> > {
959 static const bool value = false; 977 static const bool value = false;
960 }; 978 };
961 979
980 template<typename T, typename U, typename V, typename W, typename X>
981 struct NeedsTracing<HashMap<T, U, V, W, X> > {
982 static const bool value = false;
983 };
984
962 } // namespace WTF 985 } // namespace WTF
963 986
964 #endif 987 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/heap/Heap.h » ('j') | Source/heap/Heap.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698