diff options
-rw-r--r-- | base/bind_internal.h | 84 | ||||
-rw-r--r-- | base/bind_internal.h.pump | 17 | ||||
-rw-r--r-- | base/observer_list.h | 4 |
3 files changed, 52 insertions, 53 deletions
diff --git a/base/bind_internal.h b/base/bind_internal.h index 301b681..ae17ebf 100644 --- a/base/bind_internal.h +++ b/base/bind_internal.h @@ -872,15 +872,14 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1> +template <typename Runnable, typename BoundWeakPtr> struct InvokeHelper<true, void, Runnable, - void(A1)> { - static void MakeItSo(Runnable runnable, A1 a1) { - if (!a1.get()) { + void(BoundWeakPtr)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1)); + runnable.Run(weak_ptr.get()); } }; @@ -900,15 +899,14 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1, typename A2> +template <typename Runnable, typename BoundWeakPtr, typename A2> struct InvokeHelper<true, void, Runnable, - void(A1, A2)> { - static void MakeItSo(Runnable runnable, A1 a1, A2 a2) { - if (!a1.get()) { + void(BoundWeakPtr, A2)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, A2 a2) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1), CallbackForward(a2)); + runnable.Run(weak_ptr.get(), CallbackForward(a2)); } }; @@ -930,15 +928,14 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1, typename A2, typename A3> +template <typename Runnable, typename BoundWeakPtr, typename A2, typename A3> struct InvokeHelper<true, void, Runnable, - void(A1, A2, A3)> { - static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3) { - if (!a1.get()) { + void(BoundWeakPtr, A2, A3)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, A2 a2, A3 a3) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1), CallbackForward(a2), CallbackForward(a3)); + runnable.Run(weak_ptr.get(), CallbackForward(a2), CallbackForward(a3)); } }; @@ -961,15 +958,16 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1, typename A2, typename A3, typename A4> +template <typename Runnable, typename BoundWeakPtr, typename A2, typename A3, + typename A4> struct InvokeHelper<true, void, Runnable, - void(A1, A2, A3, A4)> { - static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4) { - if (!a1.get()) { + void(BoundWeakPtr, A2, A3, A4)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, A2 a2, A3 a3, + A4 a4) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1), CallbackForward(a2), CallbackForward(a3), + runnable.Run(weak_ptr.get(), CallbackForward(a2), CallbackForward(a3), CallbackForward(a4)); } }; @@ -995,16 +993,16 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1, typename A2, typename A3, +template <typename Runnable, typename BoundWeakPtr, typename A2, typename A3, typename A4, typename A5> struct InvokeHelper<true, void, Runnable, - void(A1, A2, A3, A4, A5)> { - static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { - if (!a1.get()) { + void(BoundWeakPtr, A2, A3, A4, A5)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, A2 a2, A3 a3, + A4 a4, A5 a5) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1), CallbackForward(a2), CallbackForward(a3), + runnable.Run(weak_ptr.get(), CallbackForward(a2), CallbackForward(a3), CallbackForward(a4), CallbackForward(a5)); } }; @@ -1032,17 +1030,16 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1, typename A2, typename A3, +template <typename Runnable, typename BoundWeakPtr, typename A2, typename A3, typename A4, typename A5, typename A6> struct InvokeHelper<true, void, Runnable, - void(A1, A2, A3, A4, A5, A6)> { - static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, - A6 a6) { - if (!a1.get()) { + void(BoundWeakPtr, A2, A3, A4, A5, A6)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, A2 a2, A3 a3, + A4 a4, A5 a5, A6 a6) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1), CallbackForward(a2), CallbackForward(a3), + runnable.Run(weak_ptr.get(), CallbackForward(a2), CallbackForward(a3), CallbackForward(a4), CallbackForward(a5), CallbackForward(a6)); } }; @@ -1071,17 +1068,16 @@ struct InvokeHelper<false, void, Runnable, } }; -template <typename Runnable, typename A1, typename A2, typename A3, +template <typename Runnable, typename BoundWeakPtr, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> struct InvokeHelper<true, void, Runnable, - void(A1, A2, A3, A4, A5, A6, A7)> { - static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, - A6 a6, A7 a7) { - if (!a1.get()) { + void(BoundWeakPtr, A2, A3, A4, A5, A6, A7)> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr, A2 a2, A3 a3, + A4 a4, A5 a5, A6 a6, A7 a7) { + if (!weak_ptr.get()) { return; } - - runnable.Run(CallbackForward(a1), CallbackForward(a2), CallbackForward(a3), + runnable.Run(weak_ptr.get(), CallbackForward(a2), CallbackForward(a3), CallbackForward(a4), CallbackForward(a5), CallbackForward(a6), CallbackForward(a7)); } diff --git a/base/bind_internal.h.pump b/base/bind_internal.h.pump index ac228e6e..f632b99 100644 --- a/base/bind_internal.h.pump +++ b/base/bind_internal.h.pump @@ -286,6 +286,7 @@ struct InvokeHelper; $for ARITY [[ $range ARG 1..ARITY +$range WEAKCALL_ARG 2..ARITY template <typename ReturnType, typename Runnable[[]] $if ARITY > 0 [[,]] $for ARG , [[typename A$(ARG)]]> @@ -309,16 +310,18 @@ $if ARITY > 0[[, ]] $for ARG , [[A$(ARG) a$(ARG)]]) { $if ARITY > 0 [[ -template <typename Runnable[[]], $for ARG , [[typename A$(ARG)]]> +template <typename Runnable[[]], typename BoundWeakPtr +$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[typename A$(WEAKCALL_ARG)]]> struct InvokeHelper<true, void, Runnable, - void($for ARG , [[A$(ARG)]])> { - static void MakeItSo(Runnable runnable[[]] -$if ARITY > 0[[, ]] $for ARG , [[A$(ARG) a$(ARG)]]) { - if (!a1.get()) { + void(BoundWeakPtr +$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[A$(WEAKCALL_ARG)]])> { + static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr +$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[A$(WEAKCALL_ARG) a$(WEAKCALL_ARG)]]) { + if (!weak_ptr.get()) { return; } - - runnable.Run($for ARG , [[CallbackForward(a$(ARG))]]); + runnable.Run(weak_ptr.get() +$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[CallbackForward(a$(WEAKCALL_ARG))]]); } }; diff --git a/base/observer_list.h b/base/observer_list.h index 364b180..20f183d 100644 --- a/base/observer_list.h +++ b/base/observer_list.h @@ -89,12 +89,12 @@ class ObserverListBase } ~Iterator() { - if (list_ && --list_->notify_depth_ == 0) + if (list_.get() && --list_->notify_depth_ == 0) list_->Compact(); } ObserverType* GetNext() { - if (!list_) + if (!list_.get()) return NULL; ListType& observers = list_->observers_; // Advance if the current element is null |