// 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 #include #include #include "base/bind.h" #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "build/build_config.h" // This defines a set of simple functions and utilities that people want when // using {Once,Repeating}Callback<> and Bind{Once,Repeating}(). namespace base { // Creates a null callback. class BASE_EXPORT NullCallback { public: template operator RepeatingCallback() const { return RepeatingCallback(); } template operator OnceCallback() const { return OnceCallback(); } }; // Creates a callback that does nothing when called. class BASE_EXPORT DoNothing { public: template operator RepeatingCallback() const { return Repeatedly(); } template operator OnceCallback() const { return Once(); } // Explicit way of specifying a specific callback type when the compiler can't // deduce it. template static RepeatingCallback Repeatedly() { return BindRepeating([](Args... args) {}); } template static OnceCallback 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 void DeletePointer(T* obj) { delete obj; } } // namespace base #endif // BASE_BIND_HELPERS_H_