Index: base/file_util_proxy.cc |
diff --git a/base/file_util_proxy.cc b/base/file_util_proxy.cc |
index 0873c9ccd5b3f61f7b2e84f75a8ed36c9ac6b1b9..3276300997b690ed6e752fc9d7f50446c683a751 100644 |
--- a/base/file_util_proxy.cc |
+++ b/base/file_util_proxy.cc |
@@ -8,37 +8,12 @@ |
#include "base/bind_helpers.h" |
#include "base/file_util.h" |
#include "base/message_loop_proxy.h" |
+#include "base/task_runner_helpers.h" |
namespace base { |
-namespace { |
- |
-// Helper templates to call file_util or base::PlatformFile methods |
-// and reply with the returned value. |
-// |
-// Typically when you have these methods: |
-// R DoWorkAndReturn(); |
-// void Callback(R& result); |
-// |
-// You can pass the result of DoWorkAndReturn to the Callback by: |
-// |
-// R* result = new R; |
-// message_loop_proxy->PostTaskAndReply( |
-// from_here, |
-// ReturnAsParam<R>(Bind(&DoWorkAndReturn), result), |
-// RelayHelper(Bind(&Callback), Owned(result))); |
-// |
-// Or just use PostTaskAndReplyWithStatus helper template (see the code below). |
-template <typename R1, typename R2> |
-struct ReturnValueTranslator { |
- static R2 Value(const R1& value); |
-}; |
- |
-template <typename R> |
-struct ReturnValueTranslator<R, R> { |
- static R Value(const R& value) { return value; } |
-}; |
- |
+// Translates a boolean return value into a PlatformFileError for callbacks in |
+// the ReturnAsParam helper. |
template <> |
struct ReturnValueTranslator<bool, PlatformFileError> { |
static PlatformFileError Value(const bool& value) { |
@@ -48,55 +23,7 @@ struct ReturnValueTranslator<bool, PlatformFileError> { |
} |
}; |
-template <typename R1, typename R2> |
-void ReturnAsParamAdapter(const Callback<R1(void)>& func, R2* result) { |
- if (!func.is_null()) |
- *result = ReturnValueTranslator<R1, R2>::Value(func.Run()); |
-} |
- |
-template <typename R1, typename R2> |
-Closure ReturnAsParam(const Callback<R1(void)>& func, R2* result) { |
- DCHECK(result); |
- return Bind(&ReturnAsParamAdapter<R1, R2>, func, result); |
-} |
- |
-template <typename R, typename A1> |
-void ReturnAsParamAdapter1(const Callback<R(A1)>& func, A1 a1, R* result) { |
- if (!func.is_null()) |
- *result = func.Run(a1); |
-} |
- |
-template <typename R, typename A1> |
-Closure ReturnAsParam(const Callback<R(A1)>& func, A1 a1, R* result) { |
- DCHECK(result); |
- return Bind(&ReturnAsParamAdapter1<R, A1>, func, a1, result); |
-} |
- |
-template <typename R> |
-void ReplyAdapter(const Callback<void(R)>& callback, R* result) { |
- DCHECK(result); |
- if (!callback.is_null()) |
- callback.Run(*result); |
-} |
- |
-template <typename R, typename OWNED> |
-Closure ReplyHelper(const Callback<void(R)>& callback, OWNED result) { |
- return Bind(&ReplyAdapter<R>, callback, result); |
-} |
- |
-// Putting everything together. |
-template <typename R1, typename R2> |
-bool PostTaskAndReplyWithStatus( |
- const scoped_refptr<MessageLoopProxy>& message_loop_proxy, |
- const tracked_objects::Location& from_here, |
- const Callback<R1(void)>& file_util_work, |
- const Callback<void(R2)>& callback, |
- R2* result) { |
- return message_loop_proxy->PostTaskAndReply( |
- from_here, |
- ReturnAsParam<R1>(file_util_work, result), |
- ReplyHelper(callback, Owned(result))); |
-} |
+namespace { |
// Helper classes or routines for individual methods. |
class CreateOrOpenHelper { |