| Index: base/callback.h
|
| diff --git a/base/callback.h b/base/callback.h
|
| index ab8f7bb8a711d39f85069b3fdcbf65a09948ba44..d8da740d21184d9133b6997d850f25490fdb6d00 100644
|
| --- a/base/callback.h
|
| +++ b/base/callback.h
|
| @@ -39,6 +39,10 @@
|
| // The reason to pass via a const-reference is to avoid unnecessary
|
| // AddRef/Release pairs to the internal state.
|
| //
|
| +// If a Callback variable must be empty during the Run() of a previous value of
|
| +// that variable, use ResetAndRun(). E.g. if MyClass has a member variable
|
| +// Callback which gets set as a side-effect of Run()'ing the Callback (to
|
| +// something else), ResetAndRun() can be handy.
|
| //
|
| // EXAMPLE USAGE:
|
| //
|
| @@ -272,6 +276,13 @@ class Callback<R(void)> : public internal::CallbackBase {
|
| return f(bind_state_.get());
|
| }
|
|
|
| +
|
| + R ResetAndRun() {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run();
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*);
|
| @@ -311,6 +322,13 @@ class Callback<R(A1)> : public internal::CallbackBase {
|
| return f(bind_state_.get(), internal::CallbackForward(a1));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
| @@ -353,6 +371,15 @@ class Callback<R(A1, A2)> : public internal::CallbackBase {
|
| internal::CallbackForward(a2));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1,
|
| + typename internal::CallbackParamTraits<A2>::ForwardType a2) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1),
|
| + internal::CallbackForward(a2));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
| @@ -398,6 +425,17 @@ class Callback<R(A1, A2, A3)> : public internal::CallbackBase {
|
| internal::CallbackForward(a3));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1,
|
| + typename internal::CallbackParamTraits<A2>::ForwardType a2,
|
| + typename internal::CallbackParamTraits<A3>::ForwardType a3) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1),
|
| + internal::CallbackForward(a2),
|
| + internal::CallbackForward(a3));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
| @@ -446,6 +484,19 @@ class Callback<R(A1, A2, A3, A4)> : public internal::CallbackBase {
|
| internal::CallbackForward(a4));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1,
|
| + typename internal::CallbackParamTraits<A2>::ForwardType a2,
|
| + typename internal::CallbackParamTraits<A3>::ForwardType a3,
|
| + typename internal::CallbackParamTraits<A4>::ForwardType a4) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1),
|
| + internal::CallbackForward(a2),
|
| + internal::CallbackForward(a3),
|
| + internal::CallbackForward(a4));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
| @@ -498,6 +549,21 @@ class Callback<R(A1, A2, A3, A4, A5)> : public internal::CallbackBase {
|
| internal::CallbackForward(a5));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1,
|
| + typename internal::CallbackParamTraits<A2>::ForwardType a2,
|
| + typename internal::CallbackParamTraits<A3>::ForwardType a3,
|
| + typename internal::CallbackParamTraits<A4>::ForwardType a4,
|
| + typename internal::CallbackParamTraits<A5>::ForwardType a5) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1),
|
| + internal::CallbackForward(a2),
|
| + internal::CallbackForward(a3),
|
| + internal::CallbackForward(a4),
|
| + internal::CallbackForward(a5));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
| @@ -553,6 +619,23 @@ class Callback<R(A1, A2, A3, A4, A5, A6)> : public internal::CallbackBase {
|
| internal::CallbackForward(a6));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1,
|
| + typename internal::CallbackParamTraits<A2>::ForwardType a2,
|
| + typename internal::CallbackParamTraits<A3>::ForwardType a3,
|
| + typename internal::CallbackParamTraits<A4>::ForwardType a4,
|
| + typename internal::CallbackParamTraits<A5>::ForwardType a5,
|
| + typename internal::CallbackParamTraits<A6>::ForwardType a6) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1),
|
| + internal::CallbackForward(a2),
|
| + internal::CallbackForward(a3),
|
| + internal::CallbackForward(a4),
|
| + internal::CallbackForward(a5),
|
| + internal::CallbackForward(a6));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
| @@ -611,6 +694,25 @@ class Callback<R(A1, A2, A3, A4, A5, A6, A7)> : public internal::CallbackBase {
|
| internal::CallbackForward(a7));
|
| }
|
|
|
| +
|
| + R ResetAndRun(typename internal::CallbackParamTraits<A1>::ForwardType a1,
|
| + typename internal::CallbackParamTraits<A2>::ForwardType a2,
|
| + typename internal::CallbackParamTraits<A3>::ForwardType a3,
|
| + typename internal::CallbackParamTraits<A4>::ForwardType a4,
|
| + typename internal::CallbackParamTraits<A5>::ForwardType a5,
|
| + typename internal::CallbackParamTraits<A6>::ForwardType a6,
|
| + typename internal::CallbackParamTraits<A7>::ForwardType a7) {
|
| + Callback<RunType> tmp(*this);
|
| + Reset();
|
| + tmp.Run(internal::CallbackForward(a1),
|
| + internal::CallbackForward(a2),
|
| + internal::CallbackForward(a3),
|
| + internal::CallbackForward(a4),
|
| + internal::CallbackForward(a5),
|
| + internal::CallbackForward(a6),
|
| + internal::CallbackForward(a7));
|
| + }
|
| +
|
| private:
|
| typedef R(*PolymorphicInvoke)(
|
| internal::BindStateBase*,
|
|
|