1 // This file was GENERATED by command: 2 // pump.py callback.h.pump 3 // DO NOT EDIT BY HAND!!! 4 5 6 7 // Copyright 2014 The Chromium Authors. All rights reserved. 8 // Use of this source code is governed by a BSD-style license that can be 9 // found in the LICENSE file. 10 11 #ifndef MOJO_PUBLIC_CPP_BINDINGS_CALLBACK_H_ 12 #define MOJO_PUBLIC_CPP_BINDINGS_CALLBACK_H_ 13 14 #include "mojo/public/cpp/bindings/lib/callback_internal.h" 15 #include "mojo/public/cpp/bindings/lib/shared_ptr.h" 16 #include "mojo/public/cpp/bindings/lib/template_util.h" 17 18 namespace mojo { 19 20 template <typename Sig> 21 class Callback; 22 23 template <> 24 class Callback<void()> { 25 public: 26 struct Runnable { 27 virtual ~Runnable() {} 28 virtual void Run() const = 0; 29 }; 30 31 Callback() {} 32 33 // The Callback assumes ownership of |runnable|. 34 explicit Callback(Runnable* runnable) : sink_(runnable) {} 35 36 // Any class that is copy-constructable and has a compatible Run method may 37 // be adapted to a Callback using this constructor. 38 template <typename Sink> 39 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 40 41 void Run() const { 42 if (sink_.get()) 43 sink_->Run(); 44 } 45 46 private: 47 template <typename Sink> 48 struct Adapter : public Runnable { 49 explicit Adapter(const Sink& sink) : sink(sink) {} 50 virtual void Run() const MOJO_OVERRIDE { 51 sink.Run(); 52 } 53 Sink sink; 54 }; 55 56 internal::SharedPtr<Runnable> sink_; 57 }; 58 59 template <typename A1> 60 class Callback<void(A1)> { 61 public: 62 struct Runnable { 63 virtual ~Runnable() {} 64 virtual void Run( 65 typename internal::Callback_ParamTraits<A1>::ForwardType a1) const = 0; 66 }; 67 68 Callback() {} 69 70 // The Callback assumes ownership of |runnable|. 71 explicit Callback(Runnable* runnable) : sink_(runnable) {} 72 73 // Any class that is copy-constructable and has a compatible Run method may 74 // be adapted to a Callback using this constructor. 75 template <typename Sink> 76 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 77 78 void Run( 79 typename internal::Callback_ParamTraits<A1>::ForwardType a1) const { 80 if (sink_.get()) 81 sink_->Run( 82 internal::Forward(a1)); 83 } 84 85 private: 86 template <typename Sink> 87 struct Adapter : public Runnable { 88 explicit Adapter(const Sink& sink) : sink(sink) {} 89 virtual void Run( 90 typename internal::Callback_ParamTraits<A1>::ForwardType a1) const 91 MOJO_OVERRIDE { 92 sink.Run( 93 internal::Forward(a1)); 94 } 95 Sink sink; 96 }; 97 98 internal::SharedPtr<Runnable> sink_; 99 }; 100 101 template <typename A1, typename A2> 102 class Callback<void(A1, A2)> { 103 public: 104 struct Runnable { 105 virtual ~Runnable() {} 106 virtual void Run( 107 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 108 typename internal::Callback_ParamTraits<A2>::ForwardType a2) const = 0; 109 }; 110 111 Callback() {} 112 113 // The Callback assumes ownership of |runnable|. 114 explicit Callback(Runnable* runnable) : sink_(runnable) {} 115 116 // Any class that is copy-constructable and has a compatible Run method may 117 // be adapted to a Callback using this constructor. 118 template <typename Sink> 119 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 120 121 void Run( 122 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 123 typename internal::Callback_ParamTraits<A2>::ForwardType a2) const { 124 if (sink_.get()) 125 sink_->Run( 126 internal::Forward(a1), 127 internal::Forward(a2)); 128 } 129 130 private: 131 template <typename Sink> 132 struct Adapter : public Runnable { 133 explicit Adapter(const Sink& sink) : sink(sink) {} 134 virtual void Run( 135 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 136 typename internal::Callback_ParamTraits<A2>::ForwardType a2) const 137 MOJO_OVERRIDE { 138 sink.Run( 139 internal::Forward(a1), 140 internal::Forward(a2)); 141 } 142 Sink sink; 143 }; 144 145 internal::SharedPtr<Runnable> sink_; 146 }; 147 148 template <typename A1, typename A2, typename A3> 149 class Callback<void(A1, A2, A3)> { 150 public: 151 struct Runnable { 152 virtual ~Runnable() {} 153 virtual void Run( 154 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 155 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 156 typename internal::Callback_ParamTraits<A3>::ForwardType a3) const = 0; 157 }; 158 159 Callback() {} 160 161 // The Callback assumes ownership of |runnable|. 162 explicit Callback(Runnable* runnable) : sink_(runnable) {} 163 164 // Any class that is copy-constructable and has a compatible Run method may 165 // be adapted to a Callback using this constructor. 166 template <typename Sink> 167 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 168 169 void Run( 170 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 171 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 172 typename internal::Callback_ParamTraits<A3>::ForwardType a3) const { 173 if (sink_.get()) 174 sink_->Run( 175 internal::Forward(a1), 176 internal::Forward(a2), 177 internal::Forward(a3)); 178 } 179 180 private: 181 template <typename Sink> 182 struct Adapter : public Runnable { 183 explicit Adapter(const Sink& sink) : sink(sink) {} 184 virtual void Run( 185 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 186 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 187 typename internal::Callback_ParamTraits<A3>::ForwardType a3) const 188 MOJO_OVERRIDE { 189 sink.Run( 190 internal::Forward(a1), 191 internal::Forward(a2), 192 internal::Forward(a3)); 193 } 194 Sink sink; 195 }; 196 197 internal::SharedPtr<Runnable> sink_; 198 }; 199 200 template <typename A1, typename A2, typename A3, typename A4> 201 class Callback<void(A1, A2, A3, A4)> { 202 public: 203 struct Runnable { 204 virtual ~Runnable() {} 205 virtual void Run( 206 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 207 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 208 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 209 typename internal::Callback_ParamTraits<A4>::ForwardType a4) const = 0; 210 }; 211 212 Callback() {} 213 214 // The Callback assumes ownership of |runnable|. 215 explicit Callback(Runnable* runnable) : sink_(runnable) {} 216 217 // Any class that is copy-constructable and has a compatible Run method may 218 // be adapted to a Callback using this constructor. 219 template <typename Sink> 220 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 221 222 void Run( 223 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 224 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 225 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 226 typename internal::Callback_ParamTraits<A4>::ForwardType a4) const { 227 if (sink_.get()) 228 sink_->Run( 229 internal::Forward(a1), 230 internal::Forward(a2), 231 internal::Forward(a3), 232 internal::Forward(a4)); 233 } 234 235 private: 236 template <typename Sink> 237 struct Adapter : public Runnable { 238 explicit Adapter(const Sink& sink) : sink(sink) {} 239 virtual void Run( 240 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 241 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 242 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 243 typename internal::Callback_ParamTraits<A4>::ForwardType a4) const 244 MOJO_OVERRIDE { 245 sink.Run( 246 internal::Forward(a1), 247 internal::Forward(a2), 248 internal::Forward(a3), 249 internal::Forward(a4)); 250 } 251 Sink sink; 252 }; 253 254 internal::SharedPtr<Runnable> sink_; 255 }; 256 257 template <typename A1, typename A2, typename A3, typename A4, typename A5> 258 class Callback<void(A1, A2, A3, A4, A5)> { 259 public: 260 struct Runnable { 261 virtual ~Runnable() {} 262 virtual void Run( 263 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 264 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 265 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 266 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 267 typename internal::Callback_ParamTraits<A5>::ForwardType a5) const = 0; 268 }; 269 270 Callback() {} 271 272 // The Callback assumes ownership of |runnable|. 273 explicit Callback(Runnable* runnable) : sink_(runnable) {} 274 275 // Any class that is copy-constructable and has a compatible Run method may 276 // be adapted to a Callback using this constructor. 277 template <typename Sink> 278 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 279 280 void Run( 281 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 282 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 283 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 284 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 285 typename internal::Callback_ParamTraits<A5>::ForwardType a5) const { 286 if (sink_.get()) 287 sink_->Run( 288 internal::Forward(a1), 289 internal::Forward(a2), 290 internal::Forward(a3), 291 internal::Forward(a4), 292 internal::Forward(a5)); 293 } 294 295 private: 296 template <typename Sink> 297 struct Adapter : public Runnable { 298 explicit Adapter(const Sink& sink) : sink(sink) {} 299 virtual void Run( 300 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 301 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 302 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 303 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 304 typename internal::Callback_ParamTraits<A5>::ForwardType a5) const 305 MOJO_OVERRIDE { 306 sink.Run( 307 internal::Forward(a1), 308 internal::Forward(a2), 309 internal::Forward(a3), 310 internal::Forward(a4), 311 internal::Forward(a5)); 312 } 313 Sink sink; 314 }; 315 316 internal::SharedPtr<Runnable> sink_; 317 }; 318 319 template <typename A1, typename A2, typename A3, typename A4, typename A5, 320 typename A6> 321 class Callback<void(A1, A2, A3, A4, A5, A6)> { 322 public: 323 struct Runnable { 324 virtual ~Runnable() {} 325 virtual void Run( 326 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 327 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 328 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 329 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 330 typename internal::Callback_ParamTraits<A5>::ForwardType a5, 331 typename internal::Callback_ParamTraits<A6>::ForwardType a6) const = 0; 332 }; 333 334 Callback() {} 335 336 // The Callback assumes ownership of |runnable|. 337 explicit Callback(Runnable* runnable) : sink_(runnable) {} 338 339 // Any class that is copy-constructable and has a compatible Run method may 340 // be adapted to a Callback using this constructor. 341 template <typename Sink> 342 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 343 344 void Run( 345 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 346 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 347 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 348 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 349 typename internal::Callback_ParamTraits<A5>::ForwardType a5, 350 typename internal::Callback_ParamTraits<A6>::ForwardType a6) const { 351 if (sink_.get()) 352 sink_->Run( 353 internal::Forward(a1), 354 internal::Forward(a2), 355 internal::Forward(a3), 356 internal::Forward(a4), 357 internal::Forward(a5), 358 internal::Forward(a6)); 359 } 360 361 private: 362 template <typename Sink> 363 struct Adapter : public Runnable { 364 explicit Adapter(const Sink& sink) : sink(sink) {} 365 virtual void Run( 366 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 367 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 368 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 369 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 370 typename internal::Callback_ParamTraits<A5>::ForwardType a5, 371 typename internal::Callback_ParamTraits<A6>::ForwardType a6) const 372 MOJO_OVERRIDE { 373 sink.Run( 374 internal::Forward(a1), 375 internal::Forward(a2), 376 internal::Forward(a3), 377 internal::Forward(a4), 378 internal::Forward(a5), 379 internal::Forward(a6)); 380 } 381 Sink sink; 382 }; 383 384 internal::SharedPtr<Runnable> sink_; 385 }; 386 387 template <typename A1, typename A2, typename A3, typename A4, typename A5, 388 typename A6, typename A7> 389 class Callback<void(A1, A2, A3, A4, A5, A6, A7)> { 390 public: 391 struct Runnable { 392 virtual ~Runnable() {} 393 virtual void Run( 394 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 395 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 396 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 397 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 398 typename internal::Callback_ParamTraits<A5>::ForwardType a5, 399 typename internal::Callback_ParamTraits<A6>::ForwardType a6, 400 typename internal::Callback_ParamTraits<A7>::ForwardType a7) const = 0; 401 }; 402 403 Callback() {} 404 405 // The Callback assumes ownership of |runnable|. 406 explicit Callback(Runnable* runnable) : sink_(runnable) {} 407 408 // Any class that is copy-constructable and has a compatible Run method may 409 // be adapted to a Callback using this constructor. 410 template <typename Sink> 411 Callback(const Sink& sink) : sink_(new Adapter<Sink>(sink)) {} 412 413 void Run( 414 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 415 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 416 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 417 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 418 typename internal::Callback_ParamTraits<A5>::ForwardType a5, 419 typename internal::Callback_ParamTraits<A6>::ForwardType a6, 420 typename internal::Callback_ParamTraits<A7>::ForwardType a7) const { 421 if (sink_.get()) 422 sink_->Run( 423 internal::Forward(a1), 424 internal::Forward(a2), 425 internal::Forward(a3), 426 internal::Forward(a4), 427 internal::Forward(a5), 428 internal::Forward(a6), 429 internal::Forward(a7)); 430 } 431 432 private: 433 template <typename Sink> 434 struct Adapter : public Runnable { 435 explicit Adapter(const Sink& sink) : sink(sink) {} 436 virtual void Run( 437 typename internal::Callback_ParamTraits<A1>::ForwardType a1, 438 typename internal::Callback_ParamTraits<A2>::ForwardType a2, 439 typename internal::Callback_ParamTraits<A3>::ForwardType a3, 440 typename internal::Callback_ParamTraits<A4>::ForwardType a4, 441 typename internal::Callback_ParamTraits<A5>::ForwardType a5, 442 typename internal::Callback_ParamTraits<A6>::ForwardType a6, 443 typename internal::Callback_ParamTraits<A7>::ForwardType a7) const 444 MOJO_OVERRIDE { 445 sink.Run( 446 internal::Forward(a1), 447 internal::Forward(a2), 448 internal::Forward(a3), 449 internal::Forward(a4), 450 internal::Forward(a5), 451 internal::Forward(a6), 452 internal::Forward(a7)); 453 } 454 Sink sink; 455 }; 456 457 internal::SharedPtr<Runnable> sink_; 458 }; 459 460 } // namespace mojo 461 462 #endif // MOJO_PUBLIC_CPP_BINDINGS_CALLBACK_H_ 463