| // 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_BIND_HELPERS_H_ |
| #define BASE_BIND_HELPERS_H_ |
| |
| #include <type_traits> |
| #include <utility> |
| |
| #include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/memory/weak_ptr.h" |
| #include "build/build_config.h" |
| #include "starboard/types.h" |
| |
| // This defines a set of simple functions and utilities that people want when |
| // using Callback<> and Bind(). |
| |
| namespace base { |
| |
| // Creates a null callback. |
| class BASE_EXPORT NullCallback { |
| public: |
| template <typename R, typename... Args> |
| operator RepeatingCallback<R(Args...)>() const { |
| return RepeatingCallback<R(Args...)>(); |
| } |
| template <typename R, typename... Args> |
| operator OnceCallback<R(Args...)>() const { |
| return OnceCallback<R(Args...)>(); |
| } |
| }; |
| |
| // Creates a callback that does nothing when called. |
| class BASE_EXPORT DoNothing { |
| public: |
| template <typename... Args> |
| operator RepeatingCallback<void(Args...)>() const { |
| return Repeatedly<Args...>(); |
| } |
| template <typename... Args> |
| operator OnceCallback<void(Args...)>() const { |
| return Once<Args...>(); |
| } |
| // Explicit way of specifying a specific callback type when the compiler can't |
| // deduce it. |
| template <typename... Args> |
| static RepeatingCallback<void(Args...)> Repeatedly() { |
| return BindRepeating([](Args... /*args*/) {}); |
| } |
| template <typename... Args> |
| static OnceCallback<void(Args...)> Once() { |
| return BindOnce([](Args... /*args*/) {}); |
| } |
| }; |
| |
| // Useful for creating a Closure that will delete a pointer when invoked. Only |
| // use this when necessary. In most cases MessageLoop::DeleteSoon() is a better |
| // fit. |
| template <typename T> |
| void DeletePointer(T* obj) { |
| delete obj; |
| } |
| |
| } // namespace base |
| |
| #endif // BASE_BIND_HELPERS_H_ |