libchromeos: Migrate bind_lambda.h from Buffet Now that libchromeos is converted to C++11 I can finally move this common code to the place where it belongs and can be reused by different projects. BUG=chromium:405714 TEST=USE=buffet ./build_packages Change-Id: I6605d2ccc61b33627cfaaa9b868dc404cf78dd0c Reviewed-on: https://chromium-review.googlesource.com/213320 Tested-by: Alex Vakulenko <avakulenko@chromium.org> Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org> Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/bind_lambda.h b/buffet/bind_lambda.h deleted file mode 100644 index 0172ab3..0000000 --- a/buffet/bind_lambda.h +++ /dev/null
@@ -1,65 +0,0 @@ -// Copyright 2014 The Chromium OS 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 BUFFET_BIND_LAMBDA_H_ -#define BUFFET_BIND_LAMBDA_H_ - -#include <base/bind.h> - -//////////////////////////////////////////////////////////////////////////////// -// This file is an extension to base/bind_internal.h and adds a RunnableAdapter -// class specialization that wraps a functor (including lambda objects), so -// they can be used in base::Callback/base::Bind constructs. -// By including this file you will gain the ability to write expressions like: -// base::Callback<int(int)> callback = base::Bind([](int value) { -// return value * value; -// }); -//////////////////////////////////////////////////////////////////////////////// -namespace base { -namespace internal { - -// LambdaAdapter is a helper class that specializes on different function call -// signatures and provides the RunType and Run() method required by -// RunnableAdapter<> class. -template <typename Lambda, typename Sig> -class LambdaAdapter; - -// R(...) -template <typename Lambda, typename R, typename... Args> -class LambdaAdapter<Lambda, R(Lambda::*)(Args... args)> { - public: - typedef R(RunType)(Args...); - LambdaAdapter(Lambda lambda) : lambda_(lambda) {} - R Run(Args... args) { return lambda_(args...); } - - private: - Lambda lambda_; -}; - -// R(...) const -template <typename Lambda, typename R, typename... Args> -class LambdaAdapter<Lambda, R(Lambda::*)(Args... args) const> { - public: - typedef R(RunType)(Args...); - LambdaAdapter(Lambda lambda) : lambda_(lambda) {} - R Run(Args... args) { return lambda_(args...); } - - private: - Lambda lambda_; -}; - -template <typename Lambda> -class RunnableAdapter : public LambdaAdapter<Lambda, - decltype(&Lambda::operator())> { - public: - explicit RunnableAdapter(Lambda lambda) : - LambdaAdapter<Lambda, decltype(&Lambda::operator())>(lambda) { - } -}; - - -} // namespace internal -} // namespace base - -#endif // BUFFET_BIND_LAMBDA_H_
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc index 635b539..f883802 100644 --- a/buffet/device_registration_info_unittest.cc +++ b/buffet/device_registration_info_unittest.cc
@@ -4,9 +4,9 @@ #include <base/json/json_reader.h> #include <base/values.h> +#include <chromeos/bind_lambda.h> #include <gtest/gtest.h> -#include "buffet/bind_lambda.h" #include "buffet/commands/command_manager.h" #include "buffet/commands/unittest_utils.h" #include "buffet/device_registration_info.h"
diff --git a/buffet/http_transport_fake.cc b/buffet/http_transport_fake.cc index 2c59cb3..d4b7f44 100644 --- a/buffet/http_transport_fake.cc +++ b/buffet/http_transport_fake.cc
@@ -9,8 +9,8 @@ #include <base/json/json_reader.h> #include <base/json/json_writer.h> #include <base/logging.h> +#include <chromeos/bind_lambda.h> -#include "buffet/bind_lambda.h" #include "buffet/http_connection_fake.h" #include "buffet/http_request.h" #include "buffet/mime_utils.h"
diff --git a/buffet/http_utils_unittest.cc b/buffet/http_utils_unittest.cc index 190b566..22c2209 100644 --- a/buffet/http_utils_unittest.cc +++ b/buffet/http_utils_unittest.cc
@@ -6,9 +6,9 @@ #include <vector> #include <base/values.h> +#include <chromeos/bind_lambda.h> #include <gtest/gtest.h> -#include "buffet/bind_lambda.h" #include "buffet/http_transport_fake.h" #include "buffet/http_utils.h" #include "buffet/mime_utils.h"