| OLD | NEW |
| 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 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 | 658 |
| 659 template<typename T> | 659 template<typename T> |
| 660 class TraceTrait<OwnPtr<T> > { | 660 class TraceTrait<OwnPtr<T> > { |
| 661 public: | 661 public: |
| 662 static void trace(Visitor* visitor, OwnPtr<T>* ptr) | 662 static void trace(Visitor* visitor, OwnPtr<T>* ptr) |
| 663 { | 663 { |
| 664 TraceTrait<T>::trace(visitor, ptr->get()); | 664 TraceTrait<T>::trace(visitor, ptr->get()); |
| 665 } | 665 } |
| 666 }; | 666 }; |
| 667 | 667 |
| 668 template<bool needsTracing, typename T> | 668 template<typename T, bool needsTracing> |
| 669 struct StdPairHelper; | 669 struct TraceIfEnabled; |
| 670 | 670 |
| 671 template<typename T> | 671 template<typename T> |
| 672 struct StdPairHelper<false, T> { | 672 struct TraceIfEnabled<T, false> { |
| 673 static void trace(Visitor*, T*) { } | 673 static void trace(Visitor*, T*) { } |
| 674 }; | 674 }; |
| 675 | 675 |
| 676 template<typename T> | 676 template<typename T> |
| 677 struct StdPairHelper<true, T> { | 677 struct TraceIfEnabled<T, true> { |
| 678 static void trace(Visitor* visitor, T* t) | 678 static void trace(Visitor* visitor, T* t) |
| 679 { | 679 { |
| 680 visitor->trace(*t); | 680 visitor->trace(*t); |
| 681 } | 681 } |
| 682 }; | 682 }; |
| 683 | 683 |
| 684 template <typename T> struct RemoveHeapPointerWrapperTypes { |
| 685 typedef typename WTF::RemoveTemplate<typename WTF::RemoveTemplate<typename W
TF::RemoveTemplate<T, Member>::Type, WeakMember>::Type, RawPtr>::Type Type; |
| 686 }; |
| 687 |
| 688 template<typename T> |
| 689 struct TraceIfNeeded : public TraceIfEnabled<T, WebCore::IsGarbageCollectedType<
typename RemoveHeapPointerWrapperTypes<typename WTF::RemovePointer<T>::Type>::Ty
pe>::value> { }; |
| 690 |
| 684 // This trace trait for std::pair will null weak members if their referent is | 691 // This trace trait for std::pair will null weak members if their referent is |
| 685 // collected. If you have a collection that contain weakness it does not remove | 692 // collected. If you have a collection that contain weakness it does not remove |
| 686 // entries from the collection that contain nulled weak members. | 693 // entries from the collection that contain nulled weak members. |
| 687 template<typename T, typename U> | 694 template<typename T, typename U> |
| 688 class TraceTrait<std::pair<T, U> > { | 695 class TraceTrait<std::pair<T, U> > { |
| 689 public: | 696 public: |
| 690 static const bool firstNeedsTracing = WTF::NeedsTracing<T>::value || WTF::Is
Weak<T>::value; | 697 static const bool firstNeedsTracing = WTF::NeedsTracing<T>::value || WTF::Is
Weak<T>::value; |
| 691 static const bool secondNeedsTracing = WTF::NeedsTracing<U>::value || WTF::I
sWeak<U>::value; | 698 static const bool secondNeedsTracing = WTF::NeedsTracing<U>::value || WTF::I
sWeak<U>::value; |
| 692 static void trace(Visitor* visitor, std::pair<T, U>* pair) | 699 static void trace(Visitor* visitor, std::pair<T, U>* pair) |
| 693 { | 700 { |
| 694 StdPairHelper<firstNeedsTracing, T>::trace(visitor, &pair->first); | 701 TraceIfEnabled<T, firstNeedsTracing>::trace(visitor, &pair->first); |
| 695 StdPairHelper<secondNeedsTracing, U>::trace(visitor, &pair->second); | 702 TraceIfEnabled<U, secondNeedsTracing>::trace(visitor, &pair->second); |
| 696 } | 703 } |
| 697 }; | 704 }; |
| 698 | 705 |
| 699 // WeakMember is similar to Member in that it is used to point to other oilpan | 706 // WeakMember is similar to Member in that it is used to point to other oilpan |
| 700 // heap allocated objects. | 707 // heap allocated objects. |
| 701 // However instead of creating a strong pointer to the object, the WeakMember cr
eates | 708 // However instead of creating a strong pointer to the object, the WeakMember cr
eates |
| 702 // a weak pointer, which does not keep the pointee alive. Hence if all pointers
to | 709 // a weak pointer, which does not keep the pointee alive. Hence if all pointers
to |
| 703 // to a heap allocated object are weak the object will be garbage collected. At
the | 710 // to a heap allocated object are weak the object will be garbage collected. At
the |
| 704 // time of GC the weak pointers will automatically be set to null. | 711 // time of GC the weak pointers will automatically be set to null. |
| 705 template<typename T> | 712 template<typename T> |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1174 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, WebCore::Is
GarbageCollectedType<T>::value> { | 1181 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, WebCore::Is
GarbageCollectedType<T>::value> { |
| 1175 }; | 1182 }; |
| 1176 | 1183 |
| 1177 template<typename T> | 1184 template<typename T> |
| 1178 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, Web
Core::IsGarbageCollectedType<T>::value> { | 1185 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, Web
Core::IsGarbageCollectedType<T>::value> { |
| 1179 }; | 1186 }; |
| 1180 | 1187 |
| 1181 } // namespace WTF | 1188 } // namespace WTF |
| 1182 | 1189 |
| 1183 #endif | 1190 #endif |
| OLD | NEW |