summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/bind_internal.h84
-rw-r--r--base/bind_internal.h.pump17
-rw-r--r--base/observer_list.h4
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