| 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 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 operator PassRefPtr<U>() { return PassRefPtr<U>(m_raw); } | 602 operator PassRefPtr<U>() { return PassRefPtr<U>(m_raw); } |
| 603 | 603 |
| 604 protected: | 604 protected: |
| 605 void verifyTypeIsGarbageCollected() const | 605 void verifyTypeIsGarbageCollected() const |
| 606 { | 606 { |
| 607 COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, NonGarbageCollectedObjectInMember
); | 607 COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, NonGarbageCollectedObjectInMember
); |
| 608 } | 608 } |
| 609 | 609 |
| 610 T* m_raw; | 610 T* m_raw; |
| 611 | 611 |
| 612 template<bool x, bool y, ShouldWeakPointersBeMarkedStrongly z, typename U, t
ypename V> friend struct CollectionBackingTraceTrait; | 612 template<bool x, WTF::WeakHandlingFlag y, ShouldWeakPointersBeMarkedStrongly
z, typename U, typename V> friend struct CollectionBackingTraceTrait; |
| 613 friend class Visitor; | 613 friend class Visitor; |
| 614 }; | 614 }; |
| 615 | 615 |
| 616 template<typename T> | 616 template<typename T> |
| 617 class TraceTrait<Member<T> > { | 617 class TraceTrait<Member<T> > { |
| 618 public: | 618 public: |
| 619 static void trace(Visitor* visitor, void* self) | 619 static void trace(Visitor* visitor, void* self) |
| 620 { | 620 { |
| 621 TraceTrait<T>::mark(visitor, *static_cast<Member<T>*>(self)); | 621 TraceTrait<T>::mark(visitor, *static_cast<Member<T>*>(self)); |
| 622 } | 622 } |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1035 // FIXME: Similarly, there is no need for a distinction between PeekOutType | 1035 // FIXME: Similarly, there is no need for a distinction between PeekOutType |
| 1036 // and PassOutType without reference counting. | 1036 // and PassOutType without reference counting. |
| 1037 typedef T* PeekOutType; | 1037 typedef T* PeekOutType; |
| 1038 typedef T* PassOutType; | 1038 typedef T* PassOutType; |
| 1039 | 1039 |
| 1040 template<typename U> | 1040 template<typename U> |
| 1041 static void store(const U& value, WebCore::WeakMember<T>& storage) { storage
= value; } | 1041 static void store(const U& value, WebCore::WeakMember<T>& storage) { storage
= value; } |
| 1042 | 1042 |
| 1043 static PeekOutType peek(const WebCore::WeakMember<T>& value) { return value;
} | 1043 static PeekOutType peek(const WebCore::WeakMember<T>& value) { return value;
} |
| 1044 static PassOutType passOut(const WebCore::WeakMember<T>& value) { return val
ue; } | 1044 static PassOutType passOut(const WebCore::WeakMember<T>& value) { return val
ue; } |
| 1045 static bool shouldRemoveFromCollection(WebCore::Visitor* visitor, WebCore::W
eakMember<T>& value) { return !visitor->isAlive(value); } |
| 1046 static void traceInCollection(WebCore::Visitor* visitor, WebCore::WeakMember
<T>& weakMember, WebCore::ShouldWeakPointersBeMarkedStrongly strongify) |
| 1047 { |
| 1048 if (strongify == WebCore::WeakPointersActStrong) |
| 1049 visitor->trace(reinterpret_cast<WebCore::Member<T>&>(weakMember)); /
/ Strongified visit. |
| 1050 } |
| 1045 }; | 1051 }; |
| 1046 | 1052 |
| 1047 template<typename T> struct PtrHash<WebCore::Member<T> > : PtrHash<T*> { | 1053 template<typename T> struct PtrHash<WebCore::Member<T> > : PtrHash<T*> { |
| 1048 template<typename U> | 1054 template<typename U> |
| 1049 static unsigned hash(const U& key) { return PtrHash<T*>::hash(key); } | 1055 static unsigned hash(const U& key) { return PtrHash<T*>::hash(key); } |
| 1050 static bool equal(T* a, const WebCore::Member<T>& b) { return a == b; } | 1056 static bool equal(T* a, const WebCore::Member<T>& b) { return a == b; } |
| 1051 static bool equal(const WebCore::Member<T>& a, T* b) { return a == b; } | 1057 static bool equal(const WebCore::Member<T>& a, T* b) { return a == b; } |
| 1052 template<typename U, typename V> | 1058 template<typename U, typename V> |
| 1053 static bool equal(const U& a, const V& b) { return a == b; } | 1059 static bool equal(const U& a, const V& b) { return a == b; } |
| 1054 }; | 1060 }; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1081 template<typename T> | 1087 template<typename T> |
| 1082 struct NeedsTracing<WebCore::Member<T> > { | 1088 struct NeedsTracing<WebCore::Member<T> > { |
| 1083 static const bool value = true; | 1089 static const bool value = true; |
| 1084 }; | 1090 }; |
| 1085 | 1091 |
| 1086 template<typename T> | 1092 template<typename T> |
| 1087 struct IsWeak<WebCore::WeakMember<T> > { | 1093 struct IsWeak<WebCore::WeakMember<T> > { |
| 1088 static const bool value = true; | 1094 static const bool value = true; |
| 1089 }; | 1095 }; |
| 1090 | 1096 |
| 1091 template<typename Table> | |
| 1092 struct IsWeak<WebCore::HeapHashTableBacking<Table> > { | |
| 1093 static const bool value = Table::ValueTraits::isWeak; | |
| 1094 }; | |
| 1095 | |
| 1096 template<typename T> inline T* getPtr(const WebCore::Member<T>& p) | 1097 template<typename T> inline T* getPtr(const WebCore::Member<T>& p) |
| 1097 { | 1098 { |
| 1098 return p.get(); | 1099 return p.get(); |
| 1099 } | 1100 } |
| 1100 | 1101 |
| 1101 template<typename T, typename U> | 1102 template<typename T, typename U> |
| 1102 struct NeedsTracing<std::pair<T, U> > { | 1103 struct NeedsTracing<std::pair<T, U> > { |
| 1103 static const bool value = NeedsTracing<T>::value || NeedsTracing<U>::value |
| IsWeak<T>::value || IsWeak<U>::value; | 1104 static const bool value = NeedsTracing<T>::value || NeedsTracing<U>::value |
| IsWeak<T>::value || IsWeak<U>::value; |
| 1104 }; | 1105 }; |
| 1105 | 1106 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1179 template<typename T> struct ParamStorageTraits<RawPtr<T> > { | 1180 template<typename T> struct ParamStorageTraits<RawPtr<T> > { |
| 1180 typedef WebCore::CrossThreadPersistent<T> StorageType; | 1181 typedef WebCore::CrossThreadPersistent<T> StorageType; |
| 1181 | 1182 |
| 1182 static StorageType wrap(RawPtr<T> value) { return value.get(); } | 1183 static StorageType wrap(RawPtr<T> value) { return value.get(); } |
| 1183 static T* unwrap(const StorageType& value) { return value.get(); } | 1184 static T* unwrap(const StorageType& value) { return value.get(); } |
| 1184 }; | 1185 }; |
| 1185 | 1186 |
| 1186 } // namespace WTF | 1187 } // namespace WTF |
| 1187 | 1188 |
| 1188 #endif | 1189 #endif |
| OLD | NEW |