OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 return Result<T>(static_cast<T*>(other.releaseRaw())); | 755 return Result<T>(static_cast<T*>(other.releaseRaw())); |
756 } | 756 } |
757 | 757 |
758 typedef T* (Result::*UnspecifiedBoolType); | 758 typedef T* (Result::*UnspecifiedBoolType); |
759 operator UnspecifiedBoolType() const | 759 operator UnspecifiedBoolType() const |
760 { | 760 { |
761 // See the comment in operator!(). | 761 // See the comment in operator!(). |
762 return releaseRaw() ? &Result::m_raw : 0; | 762 return releaseRaw() ? &Result::m_raw : 0; |
763 } | 763 } |
764 | 764 |
765 // FIXME(oilpan): Make this private. | |
766 T* releaseRaw() const | |
767 { | |
768 T* raw = m_raw; | |
769 m_raw = 0; | |
770 #ifndef NDEBUG | |
771 m_doNotAllocate.release(); | |
772 #endif | |
773 return raw; | |
774 } | |
775 | |
776 // FIXME(oilpan): Remove once TreeShared no longer requires reference counti
ng. | 765 // FIXME(oilpan): Remove once TreeShared no longer requires reference counti
ng. |
777 PassRefPtr<T> passRefPtr() const | 766 PassRefPtr<T> passRefPtr() const |
778 { | 767 { |
779 return PassRefPtr<T>(releaseRaw()); | 768 return PassRefPtr<T>(releaseRaw()); |
780 } | 769 } |
781 | 770 |
782 private: | 771 private: |
783 explicit Result(T* raw) | 772 explicit Result(T* raw) |
784 : m_raw(raw) | 773 : m_raw(raw) |
785 #ifndef NDEBUG | 774 #ifndef NDEBUG |
786 , m_doNotAllocate() | 775 , m_doNotAllocate() |
787 #endif | 776 #endif |
788 { | 777 { |
789 } | 778 } |
790 | 779 |
| 780 T* releaseRaw() const |
| 781 { |
| 782 T* raw = m_raw; |
| 783 m_raw = 0; |
| 784 #ifndef NDEBUG |
| 785 m_doNotAllocate.release(); |
| 786 #endif |
| 787 return raw; |
| 788 } |
| 789 |
791 // Mutable to allow raw() to steal the pointer when creating a | 790 // Mutable to allow raw() to steal the pointer when creating a |
792 // Handle from the Result. | 791 // Handle from the Result. |
793 mutable T* m_raw; | 792 mutable T* m_raw; |
794 | 793 |
795 #ifndef NDEBUG | 794 #ifndef NDEBUG |
796 mutable NoAllocation m_doNotAllocate; | 795 mutable NoAllocation m_doNotAllocate; |
797 #endif | 796 #endif |
798 | 797 |
799 template<typename U> friend class Persistent; | 798 template<typename U> friend class Persistent; |
800 template<typename U> friend class Handle; | 799 template<typename U> friend class Handle; |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 return *this; | 955 return *this; |
957 } | 956 } |
958 | 957 |
959 template<typename U> | 958 template<typename U> |
960 bool operator==(const Handle<U>& other) const | 959 bool operator==(const Handle<U>& other) const |
961 { | 960 { |
962 return other.raw() == raw(); | 961 return other.raw() == raw(); |
963 } | 962 } |
964 | 963 |
965 template<typename U> | 964 template<typename U> |
| 965 bool operator!=(const Handle<U>& other) const |
| 966 { |
| 967 return other.raw() != raw(); |
| 968 } |
| 969 |
| 970 template<typename U> |
966 bool operator==(const Persistent<U>& other) const | 971 bool operator==(const Persistent<U>& other) const |
967 { | 972 { |
968 return other.raw() == raw(); | 973 return other.raw() == raw(); |
969 } | 974 } |
970 | 975 |
971 template<typename U> | 976 template<typename U> |
972 bool operator==(const Member<U>& other) const | 977 bool operator==(const Member<U>& other) const |
973 { | 978 { |
974 return other.raw() == raw(); | 979 return other.raw() == raw(); |
975 } | 980 } |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1254 | 1259 |
1255 // PtrHash is the default hash for hash tables with members, but you can use | 1260 // PtrHash is the default hash for hash tables with members, but you can use |
1256 // HeapObjectHash<T> instead. | 1261 // HeapObjectHash<T> instead. |
1257 template<typename T> struct DefaultHash<WebCore::Member<T> > { | 1262 template<typename T> struct DefaultHash<WebCore::Member<T> > { |
1258 typedef PtrHash<WebCore::Member<T> > Hash; | 1263 typedef PtrHash<WebCore::Member<T> > Hash; |
1259 }; | 1264 }; |
1260 | 1265 |
1261 } | 1266 } |
1262 | 1267 |
1263 #endif | 1268 #endif |
OLD | NEW |