| 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 {
|
|
|