Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef BASE_CALLBACK_FORWARD_H_
      6 #define BASE_CALLBACK_FORWARD_H_
      7 
      8 namespace base {
      9 namespace internal {
     10 
     11 // CopyMode is used to control the copyablity of a Callback.
     12 // MoveOnly indicates the Callback is not copyable but movable, and Copyable
     13 // indicates it is copyable and movable.
     14 enum class CopyMode {
     15   MoveOnly,
     16   Copyable,
     17 };
     18 
     19 enum class RepeatMode {
     20   Once,
     21   Repeating,
     22 };
     23 
     24 }  // namespace internal
     25 
     26 template <typename Signature,
     27           internal::CopyMode copy_mode = internal::CopyMode::Copyable,
     28           internal::RepeatMode repeat_mode = internal::RepeatMode::Repeating>
     29 class Callback;
     30 
     31 // Syntactic sugar to make Callback<void()> easier to declare since it
     32 // will be used in a lot of APIs with delayed execution.
     33 using Closure = Callback<void()>;
     34 
     35 template <typename Signature>
     36 using OnceCallback = Callback<Signature,
     37                               internal::CopyMode::MoveOnly,
     38                               internal::RepeatMode::Once>;
     39 template <typename Signature>
     40 using RepeatingCallback = Callback<Signature,
     41                                    internal::CopyMode::Copyable,
     42                                    internal::RepeatMode::Repeating>;
     43 using OnceClosure = OnceCallback<void()>;
     44 using RepeatingClosure = RepeatingCallback<void()>;
     45 
     46 }  // namespace base
     47 
     48 #endif  // BASE_CALLBACK_FORWARD_H_
     49