Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef Persistent_h | 5 #ifndef Persistent_h |
| 6 #define Persistent_h | 6 #define Persistent_h |
| 7 | 7 |
| 8 #include "platform/heap/Member.h" | 8 #include "platform/heap/Member.h" |
| 9 #include "platform/heap/PersistentNode.h" | 9 #include "platform/heap/PersistentNode.h" |
| 10 #include "wtf/Allocator.h" | 10 #include "wtf/Allocator.h" |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 376 CrossThreadPersistent(std::nullptr_t) : Parent(nullptr) { } | 376 CrossThreadPersistent(std::nullptr_t) : Parent(nullptr) { } |
| 377 CrossThreadPersistent(T* raw) : Parent(raw) { } | 377 CrossThreadPersistent(T* raw) : Parent(raw) { } |
| 378 CrossThreadPersistent(T& raw) : Parent(raw) { } | 378 CrossThreadPersistent(T& raw) : Parent(raw) { } |
| 379 CrossThreadPersistent(const CrossThreadPersistent& other) : Parent(other) { } | 379 CrossThreadPersistent(const CrossThreadPersistent& other) : Parent(other) { } |
| 380 template<typename U> | 380 template<typename U> |
| 381 CrossThreadPersistent(const CrossThreadPersistent<U>& other) : Parent(other) { } | 381 CrossThreadPersistent(const CrossThreadPersistent<U>& other) : Parent(other) { } |
| 382 template<typename U> | 382 template<typename U> |
| 383 CrossThreadPersistent(const Member<U>& other) : Parent(other) { } | 383 CrossThreadPersistent(const Member<U>& other) : Parent(other) { } |
| 384 CrossThreadPersistent(WTF::HashTableDeletedValueType x) : Parent(x) { } | 384 CrossThreadPersistent(WTF::HashTableDeletedValueType x) : Parent(x) { } |
| 385 | 385 |
| 386 T* atomicGet() { return Parent::atomicGet(); } | 386 T* unsafeGet() const { return Parent::get(); } |
| 387 | 387 |
| 388 template<typename U> | 388 template<typename U> |
| 389 CrossThreadPersistent& operator=(U* other) | 389 CrossThreadPersistent& operator=(U* other) |
| 390 { | 390 { |
| 391 Parent::operator=(other); | 391 Parent::operator=(other); |
| 392 return *this; | 392 return *this; |
| 393 } | 393 } |
| 394 | 394 |
| 395 CrossThreadPersistent& operator=(std::nullptr_t) | 395 CrossThreadPersistent& operator=(std::nullptr_t) |
| 396 { | 396 { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 410 Parent::operator=(other); | 410 Parent::operator=(other); |
| 411 return *this; | 411 return *this; |
| 412 } | 412 } |
| 413 | 413 |
| 414 template<typename U> | 414 template<typename U> |
| 415 CrossThreadPersistent& operator=(const Member<U>& other) | 415 CrossThreadPersistent& operator=(const Member<U>& other) |
| 416 { | 416 { |
| 417 Parent::operator=(other); | 417 Parent::operator=(other); |
| 418 return *this; | 418 return *this; |
| 419 } | 419 } |
| 420 | |
| 421 protected: | |
| 422 friend class CrossThreadPersistentRegion; | |
| 423 friend struct WTF::PointerParamStorageTraits<T*, true>; | |
| 424 | |
| 425 T* get() const { return Parent::get(); } | |
|
sof
2016/06/02 07:00:12
Could you add a comment (here or next to unsafeGet
| |
| 426 T* atomicGet() { return Parent::atomicGet(); } | |
| 420 }; | 427 }; |
| 421 | 428 |
| 422 // Combines the behavior of CrossThreadPersistent and WeakPersistent. | 429 // Combines the behavior of CrossThreadPersistent and WeakPersistent. |
| 423 template<typename T> | 430 template<typename T> |
| 424 class CrossThreadWeakPersistent : public PersistentBase<T, WeakPersistentConfigu ration, CrossThreadPersistentConfiguration> { | 431 class CrossThreadWeakPersistent : public PersistentBase<T, WeakPersistentConfigu ration, CrossThreadPersistentConfiguration> { |
| 425 typedef PersistentBase<T, WeakPersistentConfiguration, CrossThreadPersistent Configuration> Parent; | 432 typedef PersistentBase<T, WeakPersistentConfiguration, CrossThreadPersistent Configuration> Parent; |
| 426 public: | 433 public: |
| 427 CrossThreadWeakPersistent() : Parent() { } | 434 CrossThreadWeakPersistent() : Parent() { } |
| 428 CrossThreadWeakPersistent(std::nullptr_t) : Parent(nullptr) { } | 435 CrossThreadWeakPersistent(std::nullptr_t) : Parent(nullptr) { } |
| 429 CrossThreadWeakPersistent(T* raw) : Parent(raw) { } | 436 CrossThreadWeakPersistent(T* raw) : Parent(raw) { } |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 670 { | 677 { |
| 671 return Persistent<T>(value); | 678 return Persistent<T>(value); |
| 672 } | 679 } |
| 673 | 680 |
| 674 template <typename T> | 681 template <typename T> |
| 675 CrossThreadPersistent<T> wrapCrossThreadPersistent(T* value) | 682 CrossThreadPersistent<T> wrapCrossThreadPersistent(T* value) |
| 676 { | 683 { |
| 677 return CrossThreadPersistent<T>(value); | 684 return CrossThreadPersistent<T>(value); |
| 678 } | 685 } |
| 679 | 686 |
| 687 template <typename T> | |
| 688 CrossThreadPersistent<T> wrapCrossThreadPersistent(CrossThreadPersistent<T> valu e) | |
| 689 { | |
| 690 return CrossThreadPersistent<T>(value); | |
| 691 } | |
| 692 | |
| 680 // Comparison operators between (Weak)Members, Persistents, and UntracedMembers. | 693 // Comparison operators between (Weak)Members, Persistents, and UntracedMembers. |
| 681 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Member<U>& b) { return a.get() == b.get(); } | 694 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Member<U>& b) { return a.get() == b.get(); } |
| 682 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Member<U>& b) { return a.get() != b.get(); } | 695 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Member<U>& b) { return a.get() != b.get(); } |
| 683 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Persistent<U>& b) { return a.get() == b.get(); } | 696 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Persistent<U>& b) { return a.get() == b.get(); } |
| 684 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Persistent<U>& b) { return a.get() != b.get(); } | 697 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Persistent<U>& b) { return a.get() != b.get(); } |
| 685 | 698 |
| 686 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Persistent<U>& b) { return a.get() == b.get(); } | 699 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Persistent<U>& b) { return a.get() == b.get(); } |
| 687 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Persistent<U>& b) { return a.get() != b.get(); } | 700 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Persistent<U>& b) { return a.get() != b.get(); } |
| 688 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Member<U>& b) { return a.get() == b.get(); } | 701 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Member<U>& b) { return a.get() == b.get(); } |
| 689 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Member<U>& b) { return a.get() != b.get(); } | 702 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Member<U>& b) { return a.get() != b.get(); } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 742 // into it. | 755 // into it. |
| 743 // | 756 // |
| 744 // TODO(sof): remove this hack once wtf/Functional.h can also work with a ty pe like | 757 // TODO(sof): remove this hack once wtf/Functional.h can also work with a ty pe like |
| 745 // CrossThreadWeakPersistent<>. | 758 // CrossThreadWeakPersistent<>. |
| 746 static WeakPtr<T> unwrap(const StorageType& value) { return WeakPtr<T>(WeakR eference<T>::create(value.get())); } | 759 static WeakPtr<T> unwrap(const StorageType& value) { return WeakPtr<T>(WeakR eference<T>::create(value.get())); } |
| 747 }; | 760 }; |
| 748 | 761 |
| 749 } // namespace WTF | 762 } // namespace WTF |
| 750 | 763 |
| 751 #endif // Persistent_h | 764 #endif // Persistent_h |
| OLD | NEW |