Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(812)

Side by Side Diff: base/bind.h

Issue 8728010: Increase Bind/Callback Arity from 6 -> 7. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated comments. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/bind.h.pump » ('j') | base/bind_internal.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // This file was GENERATED by command: 1 // This file was GENERATED by command:
2 // pump.py bind.h.pump 2 // pump.py bind.h.pump
3 // DO NOT EDIT BY HAND!!! 3 // DO NOT EDIT BY HAND!!!
4 4
5 5
6
7 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 6 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
8 // Use of this source code is governed by a BSD-style license that can be 7 // Use of this source code is governed by a BSD-style license that can be
9 // found in the LICENSE file. 8 // found in the LICENSE file.
10 9
11 #ifndef BASE_BIND_H_ 10 #ifndef BASE_BIND_H_
12 #define BASE_BIND_H_ 11 #define BASE_BIND_H_
13 #pragma once 12 #pragma once
14 13
15 #include "base/bind_internal.h" 14 #include "base/bind_internal.h"
16 #include "base/callback_internal.h" 15 #include "base/callback_internal.h"
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 new internal::BindState<RunnableType, RunType, 402 new internal::BindState<RunnableType, RunType,
404 void(typename internal::CallbackParamTraits<P1>::StorageType, 403 void(typename internal::CallbackParamTraits<P1>::StorageType,
405 typename internal::CallbackParamTraits<P2>::StorageType, 404 typename internal::CallbackParamTraits<P2>::StorageType,
406 typename internal::CallbackParamTraits<P3>::StorageType, 405 typename internal::CallbackParamTraits<P3>::StorageType,
407 typename internal::CallbackParamTraits<P4>::StorageType, 406 typename internal::CallbackParamTraits<P4>::StorageType,
408 typename internal::CallbackParamTraits<P5>::StorageType, 407 typename internal::CallbackParamTraits<P5>::StorageType,
409 typename internal::CallbackParamTraits<P6>::StorageType)>( 408 typename internal::CallbackParamTraits<P6>::StorageType)>(
410 internal::MakeRunnable(functor), p1, p2, p3, p4, p5, p6)); 409 internal::MakeRunnable(functor), p1, p2, p3, p4, p5, p6));
411 } 410 }
412 411
412 template <typename Functor, typename P1, typename P2, typename P3, typename P4,
413 typename P5, typename P6, typename P7>
414 internal::BindStateHolder<
415 internal::BindState<
416 typename internal::FunctorTraits<Functor>::RunnableType,
417 typename internal::FunctorTraits<Functor>::RunType,
418 void(typename internal::CallbackParamTraits<P1>::StorageType,
419 typename internal::CallbackParamTraits<P2>::StorageType,
420 typename internal::CallbackParamTraits<P3>::StorageType,
421 typename internal::CallbackParamTraits<P4>::StorageType,
422 typename internal::CallbackParamTraits<P5>::StorageType,
423 typename internal::CallbackParamTraits<P6>::StorageType,
424 typename internal::CallbackParamTraits<P7>::StorageType)> >
425 Bind(Functor functor, const P1& p1, const P2& p2, const P3& p3, const P4& p4,
426 const P5& p5, const P6& p6, const P7& p7) {
427 // Typedefs for how to store and run the functor.
428 typedef typename internal::FunctorTraits<Functor>::RunnableType RunnableType;
429 typedef typename internal::FunctorTraits<Functor>::RunType RunType;
430
431 // Use RunnableType::RunType instead of RunType above because our
432 // checks should below for bound references need to know what the actual
433 // functor is going to interpret the argument as.
434 typedef internal::FunctionTraits<typename RunnableType::RunType>
435 BoundFunctorTraits;
436
437 // Do not allow binding a non-const reference parameter. Non-const reference
438 // parameters are disallowed by the Google style guide. Also, binding a
439 // non-const reference parameter can make for subtle bugs because the
440 // invoked function will receive a reference to the stored copy of the
441 // argument and not the original.
442 COMPILE_ASSERT(
443 !(is_non_const_reference<typename BoundFunctorTraits::A1Type>::value ||
444 is_non_const_reference<typename BoundFunctorTraits::A2Type>::value ||
445 is_non_const_reference<typename BoundFunctorTraits::A3Type>::value ||
446 is_non_const_reference<typename BoundFunctorTraits::A4Type>::value ||
447 is_non_const_reference<typename BoundFunctorTraits::A5Type>::value ||
448 is_non_const_reference<typename BoundFunctorTraits::A6Type>::value ||
449 is_non_const_reference<typename BoundFunctorTraits::A7Type>::value ),
450 do_not_bind_functions_with_nonconst_ref);
451
452 // For methods, we need to be careful for parameter 1. We do not require
453 // a scoped_refptr because BindState<> itself takes care of AddRef() for
454 // methods. We also disallow binding of an array as the method's target
455 // object.
456 COMPILE_ASSERT(
457 internal::HasIsMethodTag<RunnableType>::value ||
458 !internal::NeedsScopedRefptrButGetsRawPtr<P1>::value,
459 p1_is_refcounted_type_and_needs_scoped_refptr);
460 COMPILE_ASSERT(!internal::HasIsMethodTag<RunnableType>::value ||
461 !is_array<P1>::value,
462 first_bound_argument_to_method_cannot_be_array);
463 COMPILE_ASSERT(!internal::NeedsScopedRefptrButGetsRawPtr<P2>::value,
464 p2_is_refcounted_type_and_needs_scoped_refptr);
465 COMPILE_ASSERT(!internal::NeedsScopedRefptrButGetsRawPtr<P3>::value,
466 p3_is_refcounted_type_and_needs_scoped_refptr);
467 COMPILE_ASSERT(!internal::NeedsScopedRefptrButGetsRawPtr<P4>::value,
468 p4_is_refcounted_type_and_needs_scoped_refptr);
469 COMPILE_ASSERT(!internal::NeedsScopedRefptrButGetsRawPtr<P5>::value,
470 p5_is_refcounted_type_and_needs_scoped_refptr);
471 COMPILE_ASSERT(!internal::NeedsScopedRefptrButGetsRawPtr<P6>::value,
472 p6_is_refcounted_type_and_needs_scoped_refptr);
473 COMPILE_ASSERT(!internal::NeedsScopedRefptrButGetsRawPtr<P7>::value,
474 p7_is_refcounted_type_and_needs_scoped_refptr);
475
476 return internal::MakeBindStateHolder(
477 new internal::BindState<RunnableType, RunType,
478 void(typename internal::CallbackParamTraits<P1>::StorageType,
479 typename internal::CallbackParamTraits<P2>::StorageType,
480 typename internal::CallbackParamTraits<P3>::StorageType,
481 typename internal::CallbackParamTraits<P4>::StorageType,
482 typename internal::CallbackParamTraits<P5>::StorageType,
483 typename internal::CallbackParamTraits<P6>::StorageType,
484 typename internal::CallbackParamTraits<P7>::StorageType)>(
485 internal::MakeRunnable(functor), p1, p2, p3, p4, p5, p6, p7));
486 }
487
413 } // namespace base 488 } // namespace base
414 489
415 #endif // BASE_BIND_H_ 490 #endif // BASE_BIND_H_
OLDNEW
« no previous file with comments | « no previous file | base/bind.h.pump » ('j') | base/bind_internal.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698