1 $$ This is a pump file for generating file templates. Pump is a python
2 $$ script that is part of the Google Test suite of utilities. Description
5 $$ http://code.google.com/p/googletest/wiki/PumpManual
10 // Copyright 2014 The Chromium Authors. All rights reserved.
11 // Use of this source code is governed by a BSD-style license that can be
12 // found in the LICENSE file.
14 #ifndef MOJO_PUBLIC_BINDINGS_CALLBACK_H_
15 #define MOJO_PUBLIC_BINDINGS_CALLBACK_H_
17 #include "mojo/public/bindings/lib/callback_internal.h"
18 #include "mojo/public/bindings/lib/shared_ptr.h"
22 template <typename Sig>
25 $range ARITY 0..MAX_ARITY
29 template <$for ARG , [[typename A$(ARG)]]>
30 class Callback<void($for ARG , [[A$(ARG)]])> {
33 virtual ~Runnable() {}
36 [[typename internal::Callback_ParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) const = 0;
41 // The Callback assumes ownership of |runnable|.
42 explicit Callback(Runnable* runnable) : sink_(runnable) {}
44 // Any class that is copy-constructable and has a compatible Run method may
45 // be adapted to a Callback using this constructor.
46 template <typename Sink>
47 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {}
51 [[typename internal::Callback_ParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) const {
55 [[internal::Callback_Forward(a$(ARG))]]);
59 template <typename Sink>
60 struct Adapter : public Runnable {
61 explicit Adapter(const Sink& sink) : sink(sink) {}
64 [[typename internal::Callback_ParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) const MOJO_OVERRIDE {
67 [[internal::Callback_Forward(a$(ARG))]]);
72 internal::SharedPtr<Runnable> sink_;
79 #endif // MOJO_PUBLIC_BINDINGS_CALLBACK_H_