Index: base/callback_old.h |
diff --git a/base/callback_old.h b/base/callback_old.h |
deleted file mode 100644 |
index 7719e6601f742979392750f693d9156075be3201..0000000000000000000000000000000000000000 |
--- a/base/callback_old.h |
+++ /dev/null |
@@ -1,254 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef BASE_CALLBACK_OLD_H_ |
-#define BASE_CALLBACK_OLD_H_ |
-#pragma once |
- |
-#include "base/memory/raw_scoped_refptr_mismatch_checker.h" |
-#include "base/tuple.h" |
- |
-// Callback -------------------------------------------------------------------- |
-// |
-// A Callback is like a Task but with unbound parameters. It is basically an |
-// object-oriented function pointer. |
-// |
-// Callbacks are designed to work with Tuples. A set of helper functions and |
-// classes is provided to hide the Tuple details from the consumer. Client |
-// code will generally work with the CallbackRunner base class, which merely |
-// provides a Run method and is returned by the New* functions. This allows |
-// users to not care which type of class implements the callback, only that it |
-// has a certain number and type of arguments. |
-// |
-// The implementation of this is done by CallbackImpl, which inherits |
-// CallbackStorage to store the data. This allows the storage of the data |
-// (requiring the class type T) to be hidden from users, who will want to call |
-// this regardless of the implementor's type T. |
-// |
-// Note that callbacks currently have no facility for cancelling or abandoning |
-// them. We currently handle this at a higher level for cases where this is |
-// necessary. The pointer in a callback must remain valid until the callback |
-// is made. |
-// |
-// Like Task, the callback executor is responsible for deleting the callback |
-// pointer once the callback has executed. |
-// |
-// Example client usage: |
-// void Object::DoStuff(int, string); |
-// Callback2<int, string>::Type* callback = |
-// NewCallback(obj, &Object::DoStuff); |
-// callback->Run(5, string("hello")); |
-// delete callback; |
-// or, equivalently, using tuples directly: |
-// CallbackRunner<Tuple2<int, string> >* callback = |
-// NewCallback(obj, &Object::DoStuff); |
-// callback->RunWithParams(MakeTuple(5, string("hello"))); |
-// |
-// There is also a 0-args version that returns a value. Example: |
-// int Object::GetNextInt(); |
-// CallbackWithReturnValue<int>::Type* callback = |
-// NewCallbackWithReturnValue(obj, &Object::GetNextInt); |
-// int next_int = callback->Run(); |
-// delete callback; |
- |
-// Base for all Callbacks that handles storage of the pointers. |
-template <class T, typename Method> |
-class CallbackStorage { |
- public: |
- CallbackStorage(T* obj, Method meth) : obj_(obj), meth_(meth) { |
- } |
- |
- protected: |
- T* obj_; |
- Method meth_; |
-}; |
- |
-// Interface that is exposed to the consumer, that does the actual calling |
-// of the method. |
-template <typename Params> |
-class CallbackRunner { |
- public: |
- typedef Params TupleType; |
- |
- virtual ~CallbackRunner() {} |
- virtual void RunWithParams(const Params& params) = 0; |
- |
- // Convenience functions so callers don't have to deal with Tuples. |
- inline void Run() { |
- RunWithParams(Tuple0()); |
- } |
- |
- template <typename Arg1> |
- inline void Run(const Arg1& a) { |
- RunWithParams(Params(a)); |
- } |
- |
- template <typename Arg1, typename Arg2> |
- inline void Run(const Arg1& a, const Arg2& b) { |
- RunWithParams(Params(a, b)); |
- } |
- |
- template <typename Arg1, typename Arg2, typename Arg3> |
- inline void Run(const Arg1& a, const Arg2& b, const Arg3& c) { |
- RunWithParams(Params(a, b, c)); |
- } |
- |
- template <typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
- inline void Run(const Arg1& a, const Arg2& b, const Arg3& c, const Arg4& d) { |
- RunWithParams(Params(a, b, c, d)); |
- } |
- |
- template <typename Arg1, typename Arg2, typename Arg3, |
- typename Arg4, typename Arg5> |
- inline void Run(const Arg1& a, const Arg2& b, const Arg3& c, |
- const Arg4& d, const Arg5& e) { |
- RunWithParams(Params(a, b, c, d, e)); |
- } |
-}; |
- |
-template <class T, typename Method, typename Params> |
-class CallbackImpl : public CallbackStorage<T, Method>, |
- public CallbackRunner<Params> { |
- public: |
- CallbackImpl(T* obj, Method meth) : CallbackStorage<T, Method>(obj, meth) { |
- } |
- virtual void RunWithParams(const Params& params) { |
- // use "this->" to force C++ to look inside our templatized base class; see |
- // Effective C++, 3rd Ed, item 43, p210 for details. |
- DispatchToMethod(this->obj_, this->meth_, params); |
- } |
-}; |
- |
-// 0-arg implementation |
-struct Callback0 { |
- typedef CallbackRunner<Tuple0> Type; |
-}; |
- |
-template <class T> |
-typename Callback0::Type* NewCallback(T* object, void (T::*method)()) { |
- return new CallbackImpl<T, void (T::*)(), Tuple0 >(object, method); |
-} |
- |
-// 1-arg implementation |
-template <typename Arg1> |
-struct Callback1 { |
- typedef CallbackRunner<Tuple1<Arg1> > Type; |
-}; |
- |
-template <class T, typename Arg1> |
-typename Callback1<Arg1>::Type* NewCallback(T* object, |
- void (T::*method)(Arg1)) { |
- return new CallbackImpl<T, void (T::*)(Arg1), Tuple1<Arg1> >(object, method); |
-} |
- |
-// 2-arg implementation |
-template <typename Arg1, typename Arg2> |
-struct Callback2 { |
- typedef CallbackRunner<Tuple2<Arg1, Arg2> > Type; |
-}; |
- |
-template <class T, typename Arg1, typename Arg2> |
-typename Callback2<Arg1, Arg2>::Type* NewCallback( |
- T* object, |
- void (T::*method)(Arg1, Arg2)) { |
- return new CallbackImpl<T, void (T::*)(Arg1, Arg2), |
- Tuple2<Arg1, Arg2> >(object, method); |
-} |
- |
-// 3-arg implementation |
-template <typename Arg1, typename Arg2, typename Arg3> |
-struct Callback3 { |
- typedef CallbackRunner<Tuple3<Arg1, Arg2, Arg3> > Type; |
-}; |
- |
-template <class T, typename Arg1, typename Arg2, typename Arg3> |
-typename Callback3<Arg1, Arg2, Arg3>::Type* NewCallback( |
- T* object, |
- void (T::*method)(Arg1, Arg2, Arg3)) { |
- return new CallbackImpl<T, void (T::*)(Arg1, Arg2, Arg3), |
- Tuple3<Arg1, Arg2, Arg3> >(object, method); |
-} |
- |
-// 4-arg implementation |
-template <typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
-struct Callback4 { |
- typedef CallbackRunner<Tuple4<Arg1, Arg2, Arg3, Arg4> > Type; |
-}; |
- |
-template <class T, typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
-typename Callback4<Arg1, Arg2, Arg3, Arg4>::Type* NewCallback( |
- T* object, |
- void (T::*method)(Arg1, Arg2, Arg3, Arg4)) { |
- return new CallbackImpl<T, void (T::*)(Arg1, Arg2, Arg3, Arg4), |
- Tuple4<Arg1, Arg2, Arg3, Arg4> >(object, method); |
-} |
- |
-// 5-arg implementation |
-template <typename Arg1, typename Arg2, typename Arg3, |
- typename Arg4, typename Arg5> |
-struct Callback5 { |
- typedef CallbackRunner<Tuple5<Arg1, Arg2, Arg3, Arg4, Arg5> > Type; |
-}; |
- |
-template <class T, typename Arg1, typename Arg2, |
- typename Arg3, typename Arg4, typename Arg5> |
-typename Callback5<Arg1, Arg2, Arg3, Arg4, Arg5>::Type* NewCallback( |
- T* object, |
- void (T::*method)(Arg1, Arg2, Arg3, Arg4, Arg5)) { |
- return new CallbackImpl<T, void (T::*)(Arg1, Arg2, Arg3, Arg4, Arg5), |
- Tuple5<Arg1, Arg2, Arg3, Arg4, Arg5> >(object, method); |
-} |
- |
-// An UnboundMethod is a wrapper for a method where the actual object is |
-// provided at Run dispatch time. |
-template <class T, class Method, class Params> |
-class UnboundMethod { |
- public: |
- UnboundMethod(Method m, const Params& p) : m_(m), p_(p) { |
- COMPILE_ASSERT( |
- (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value), |
- badunboundmethodparams); |
- } |
- void Run(T* obj) const { |
- DispatchToMethod(obj, m_, p_); |
- } |
- private: |
- Method m_; |
- Params p_; |
-}; |
- |
-// Return value implementation with no args. |
-template <typename ReturnValue> |
-struct CallbackWithReturnValue { |
- class Type { |
- public: |
- virtual ~Type() {} |
- virtual ReturnValue Run() = 0; |
- }; |
-}; |
- |
-template <class T, typename Method, typename ReturnValue> |
-class CallbackWithReturnValueImpl |
- : public CallbackStorage<T, Method>, |
- public CallbackWithReturnValue<ReturnValue>::Type { |
- public: |
- CallbackWithReturnValueImpl(T* obj, Method meth) |
- : CallbackStorage<T, Method>(obj, meth) {} |
- |
- virtual ReturnValue Run() { |
- return (this->obj_->*(this->meth_))(); |
- } |
- |
- protected: |
- virtual ~CallbackWithReturnValueImpl() {} |
-}; |
- |
-template <class T, typename ReturnValue> |
-typename CallbackWithReturnValue<ReturnValue>::Type* |
-NewCallbackWithReturnValue(T* object, ReturnValue (T::*method)()) { |
- return new CallbackWithReturnValueImpl<T, ReturnValue (T::*)(), ReturnValue>( |
- object, method); |
-} |
- |
-#endif // BASE_CALLBACK_OLD_H_ |