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

Side by Side Diff: base/callback.h

Issue 8682030: Revert "Increase Bind/Callback Arity from 6 -> 11: These go to eleven." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 | « base/bind_internal_win.h.pump ('k') | base/callback.h.pump » ('j') | no next file with comments »
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 callback.h.pump 2 // pump.py callback.h.pump
3 // DO NOT EDIT BY HAND!!! 3 // DO NOT EDIT BY HAND!!!
4 4
5 5
6 6
7 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 7 // 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 8 // Use of this source code is governed by a BSD-style license that can be
9 // found in the LICENSE file. 9 // found in the LICENSE file.
10 10
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // void Bar(char* ptr); 220 // void Bar(char* ptr);
221 // Bind(&Foo, "test"); 221 // Bind(&Foo, "test");
222 // Bind(&Bar, "test"); // This fails because ptr is not const. 222 // Bind(&Bar, "test"); // This fails because ptr is not const.
223 223
224 namespace base { 224 namespace base {
225 225
226 // First, we forward declare the Callback class template. This informs the 226 // First, we forward declare the Callback class template. This informs the
227 // compiler that the template only has 1 type parameter which is the function 227 // compiler that the template only has 1 type parameter which is the function
228 // signature that the Callback is representing. 228 // signature that the Callback is representing.
229 // 229 //
230 // After this, create template specializations for 0-11 parameters. Note that 230 // After this, create template specializations for 0-6 parameters. Note that
231 // even though the template typelist grows, the specialization still 231 // even though the template typelist grows, the specialization still
232 // only has one type: the function signature. 232 // only has one type: the function signature.
233 template <typename Sig> 233 template <typename Sig>
234 class Callback; 234 class Callback;
235 235
236 template <typename R> 236 template <typename R>
237 class Callback<R(void)> : public internal::CallbackBase { 237 class Callback<R(void)> : public internal::CallbackBase {
238 public: 238 public:
239 typedef R(RunType)(); 239 typedef R(RunType)();
240 240
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 internal::BindStateBase*, 566 internal::BindStateBase*,
567 typename internal::CallbackParamTraits<A1>::ForwardType, 567 typename internal::CallbackParamTraits<A1>::ForwardType,
568 typename internal::CallbackParamTraits<A2>::ForwardType, 568 typename internal::CallbackParamTraits<A2>::ForwardType,
569 typename internal::CallbackParamTraits<A3>::ForwardType, 569 typename internal::CallbackParamTraits<A3>::ForwardType,
570 typename internal::CallbackParamTraits<A4>::ForwardType, 570 typename internal::CallbackParamTraits<A4>::ForwardType,
571 typename internal::CallbackParamTraits<A5>::ForwardType, 571 typename internal::CallbackParamTraits<A5>::ForwardType,
572 typename internal::CallbackParamTraits<A6>::ForwardType); 572 typename internal::CallbackParamTraits<A6>::ForwardType);
573 573
574 }; 574 };
575 575
576 template <typename R, typename A1, typename A2, typename A3, typename A4,
577 typename A5, typename A6, typename A7>
578 class Callback<R(A1, A2, A3, A4, A5, A6, A7)> : public internal::CallbackBase {
579 public:
580 typedef R(RunType)(A1, A2, A3, A4, A5, A6, A7);
581
582 Callback() : CallbackBase(NULL, NULL) { }
583
584 // We pass BindStateHolder by const ref to avoid incurring an
585 // unnecessary AddRef/Unref pair even though we will modify the object.
586 // We cannot use a normal reference because the compiler will warn
587 // since this is often used on a return value, which is a temporary.
588 //
589 // Note that this constructor CANNOT be explicit, and that Bind() CANNOT
590 // return the exact Callback<> type. See base/bind.h for details.
591 template <typename T>
592 Callback(const internal::BindStateHolder<T>& bind_state_holder)
593 : CallbackBase(NULL, &bind_state_holder.bind_state_) {
594 // Force the assignment to a location variable of PolymorphicInvoke
595 // so the compiler will typecheck that the passed in Run() method has
596 // the correct type.
597 PolymorphicInvoke invoke_func = &T::InvokerType::Run;
598 polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func);
599 }
600
601 bool Equals(const Callback& other) const {
602 return CallbackBase::Equals(other);
603 }
604
605 R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1,
606 typename internal::CallbackParamTraits<A2>::ForwardType a2,
607 typename internal::CallbackParamTraits<A3>::ForwardType a3,
608 typename internal::CallbackParamTraits<A4>::ForwardType a4,
609 typename internal::CallbackParamTraits<A5>::ForwardType a5,
610 typename internal::CallbackParamTraits<A6>::ForwardType a6,
611 typename internal::CallbackParamTraits<A7>::ForwardType a7) const {
612 PolymorphicInvoke f =
613 reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_);
614
615 return f(bind_state_.get(), a1,
616 a2,
617 a3,
618 a4,
619 a5,
620 a6,
621 a7);
622 }
623
624 private:
625 typedef R(*PolymorphicInvoke)(
626 internal::BindStateBase*,
627 typename internal::CallbackParamTraits<A1>::ForwardType,
628 typename internal::CallbackParamTraits<A2>::ForwardType,
629 typename internal::CallbackParamTraits<A3>::ForwardType,
630 typename internal::CallbackParamTraits<A4>::ForwardType,
631 typename internal::CallbackParamTraits<A5>::ForwardType,
632 typename internal::CallbackParamTraits<A6>::ForwardType,
633 typename internal::CallbackParamTraits<A7>::ForwardType);
634
635 };
636
637 template <typename R, typename A1, typename A2, typename A3, typename A4,
638 typename A5, typename A6, typename A7, typename A8>
639 class Callback<R(A1, A2, A3, A4, A5, A6, A7,
640 A8)> : public internal::CallbackBase {
641 public:
642 typedef R(RunType)(A1, A2, A3, A4, A5, A6, A7, A8);
643
644 Callback() : CallbackBase(NULL, NULL) { }
645
646 // We pass BindStateHolder by const ref to avoid incurring an
647 // unnecessary AddRef/Unref pair even though we will modify the object.
648 // We cannot use a normal reference because the compiler will warn
649 // since this is often used on a return value, which is a temporary.
650 //
651 // Note that this constructor CANNOT be explicit, and that Bind() CANNOT
652 // return the exact Callback<> type. See base/bind.h for details.
653 template <typename T>
654 Callback(const internal::BindStateHolder<T>& bind_state_holder)
655 : CallbackBase(NULL, &bind_state_holder.bind_state_) {
656 // Force the assignment to a location variable of PolymorphicInvoke
657 // so the compiler will typecheck that the passed in Run() method has
658 // the correct type.
659 PolymorphicInvoke invoke_func = &T::InvokerType::Run;
660 polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func);
661 }
662
663 bool Equals(const Callback& other) const {
664 return CallbackBase::Equals(other);
665 }
666
667 R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1,
668 typename internal::CallbackParamTraits<A2>::ForwardType a2,
669 typename internal::CallbackParamTraits<A3>::ForwardType a3,
670 typename internal::CallbackParamTraits<A4>::ForwardType a4,
671 typename internal::CallbackParamTraits<A5>::ForwardType a5,
672 typename internal::CallbackParamTraits<A6>::ForwardType a6,
673 typename internal::CallbackParamTraits<A7>::ForwardType a7,
674 typename internal::CallbackParamTraits<A8>::ForwardType a8) const {
675 PolymorphicInvoke f =
676 reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_);
677
678 return f(bind_state_.get(), a1,
679 a2,
680 a3,
681 a4,
682 a5,
683 a6,
684 a7,
685 a8);
686 }
687
688 private:
689 typedef R(*PolymorphicInvoke)(
690 internal::BindStateBase*,
691 typename internal::CallbackParamTraits<A1>::ForwardType,
692 typename internal::CallbackParamTraits<A2>::ForwardType,
693 typename internal::CallbackParamTraits<A3>::ForwardType,
694 typename internal::CallbackParamTraits<A4>::ForwardType,
695 typename internal::CallbackParamTraits<A5>::ForwardType,
696 typename internal::CallbackParamTraits<A6>::ForwardType,
697 typename internal::CallbackParamTraits<A7>::ForwardType,
698 typename internal::CallbackParamTraits<A8>::ForwardType);
699
700 };
701
702 template <typename R, typename A1, typename A2, typename A3, typename A4,
703 typename A5, typename A6, typename A7, typename A8, typename A9>
704 class Callback<R(A1, A2, A3, A4, A5, A6, A7, A8,
705 A9)> : public internal::CallbackBase {
706 public:
707 typedef R(RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
708
709 Callback() : CallbackBase(NULL, NULL) { }
710
711 // We pass BindStateHolder by const ref to avoid incurring an
712 // unnecessary AddRef/Unref pair even though we will modify the object.
713 // We cannot use a normal reference because the compiler will warn
714 // since this is often used on a return value, which is a temporary.
715 //
716 // Note that this constructor CANNOT be explicit, and that Bind() CANNOT
717 // return the exact Callback<> type. See base/bind.h for details.
718 template <typename T>
719 Callback(const internal::BindStateHolder<T>& bind_state_holder)
720 : CallbackBase(NULL, &bind_state_holder.bind_state_) {
721 // Force the assignment to a location variable of PolymorphicInvoke
722 // so the compiler will typecheck that the passed in Run() method has
723 // the correct type.
724 PolymorphicInvoke invoke_func = &T::InvokerType::Run;
725 polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func);
726 }
727
728 bool Equals(const Callback& other) const {
729 return CallbackBase::Equals(other);
730 }
731
732 R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1,
733 typename internal::CallbackParamTraits<A2>::ForwardType a2,
734 typename internal::CallbackParamTraits<A3>::ForwardType a3,
735 typename internal::CallbackParamTraits<A4>::ForwardType a4,
736 typename internal::CallbackParamTraits<A5>::ForwardType a5,
737 typename internal::CallbackParamTraits<A6>::ForwardType a6,
738 typename internal::CallbackParamTraits<A7>::ForwardType a7,
739 typename internal::CallbackParamTraits<A8>::ForwardType a8,
740 typename internal::CallbackParamTraits<A9>::ForwardType a9) const {
741 PolymorphicInvoke f =
742 reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_);
743
744 return f(bind_state_.get(), a1,
745 a2,
746 a3,
747 a4,
748 a5,
749 a6,
750 a7,
751 a8,
752 a9);
753 }
754
755 private:
756 typedef R(*PolymorphicInvoke)(
757 internal::BindStateBase*,
758 typename internal::CallbackParamTraits<A1>::ForwardType,
759 typename internal::CallbackParamTraits<A2>::ForwardType,
760 typename internal::CallbackParamTraits<A3>::ForwardType,
761 typename internal::CallbackParamTraits<A4>::ForwardType,
762 typename internal::CallbackParamTraits<A5>::ForwardType,
763 typename internal::CallbackParamTraits<A6>::ForwardType,
764 typename internal::CallbackParamTraits<A7>::ForwardType,
765 typename internal::CallbackParamTraits<A8>::ForwardType,
766 typename internal::CallbackParamTraits<A9>::ForwardType);
767
768 };
769
770 template <typename R, typename A1, typename A2, typename A3, typename A4,
771 typename A5, typename A6, typename A7, typename A8, typename A9,
772 typename A10>
773 class Callback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9,
774 A10)> : public internal::CallbackBase {
775 public:
776 typedef R(RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
777
778 Callback() : CallbackBase(NULL, NULL) { }
779
780 // We pass BindStateHolder by const ref to avoid incurring an
781 // unnecessary AddRef/Unref pair even though we will modify the object.
782 // We cannot use a normal reference because the compiler will warn
783 // since this is often used on a return value, which is a temporary.
784 //
785 // Note that this constructor CANNOT be explicit, and that Bind() CANNOT
786 // return the exact Callback<> type. See base/bind.h for details.
787 template <typename T>
788 Callback(const internal::BindStateHolder<T>& bind_state_holder)
789 : CallbackBase(NULL, &bind_state_holder.bind_state_) {
790 // Force the assignment to a location variable of PolymorphicInvoke
791 // so the compiler will typecheck that the passed in Run() method has
792 // the correct type.
793 PolymorphicInvoke invoke_func = &T::InvokerType::Run;
794 polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func);
795 }
796
797 bool Equals(const Callback& other) const {
798 return CallbackBase::Equals(other);
799 }
800
801 R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1,
802 typename internal::CallbackParamTraits<A2>::ForwardType a2,
803 typename internal::CallbackParamTraits<A3>::ForwardType a3,
804 typename internal::CallbackParamTraits<A4>::ForwardType a4,
805 typename internal::CallbackParamTraits<A5>::ForwardType a5,
806 typename internal::CallbackParamTraits<A6>::ForwardType a6,
807 typename internal::CallbackParamTraits<A7>::ForwardType a7,
808 typename internal::CallbackParamTraits<A8>::ForwardType a8,
809 typename internal::CallbackParamTraits<A9>::ForwardType a9,
810 typename internal::CallbackParamTraits<A10>::ForwardType a10) const {
811 PolymorphicInvoke f =
812 reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_);
813
814 return f(bind_state_.get(), a1,
815 a2,
816 a3,
817 a4,
818 a5,
819 a6,
820 a7,
821 a8,
822 a9,
823 a10);
824 }
825
826 private:
827 typedef R(*PolymorphicInvoke)(
828 internal::BindStateBase*,
829 typename internal::CallbackParamTraits<A1>::ForwardType,
830 typename internal::CallbackParamTraits<A2>::ForwardType,
831 typename internal::CallbackParamTraits<A3>::ForwardType,
832 typename internal::CallbackParamTraits<A4>::ForwardType,
833 typename internal::CallbackParamTraits<A5>::ForwardType,
834 typename internal::CallbackParamTraits<A6>::ForwardType,
835 typename internal::CallbackParamTraits<A7>::ForwardType,
836 typename internal::CallbackParamTraits<A8>::ForwardType,
837 typename internal::CallbackParamTraits<A9>::ForwardType,
838 typename internal::CallbackParamTraits<A10>::ForwardType);
839
840 };
841
842 template <typename R, typename A1, typename A2, typename A3, typename A4,
843 typename A5, typename A6, typename A7, typename A8, typename A9,
844 typename A10, typename A11>
845 class Callback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
846 A11)> : public internal::CallbackBase {
847 public:
848 typedef R(RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
849
850 Callback() : CallbackBase(NULL, NULL) { }
851
852 // We pass BindStateHolder by const ref to avoid incurring an
853 // unnecessary AddRef/Unref pair even though we will modify the object.
854 // We cannot use a normal reference because the compiler will warn
855 // since this is often used on a return value, which is a temporary.
856 //
857 // Note that this constructor CANNOT be explicit, and that Bind() CANNOT
858 // return the exact Callback<> type. See base/bind.h for details.
859 template <typename T>
860 Callback(const internal::BindStateHolder<T>& bind_state_holder)
861 : CallbackBase(NULL, &bind_state_holder.bind_state_) {
862 // Force the assignment to a location variable of PolymorphicInvoke
863 // so the compiler will typecheck that the passed in Run() method has
864 // the correct type.
865 PolymorphicInvoke invoke_func = &T::InvokerType::Run;
866 polymorphic_invoke_ = reinterpret_cast<InvokeFuncStorage>(invoke_func);
867 }
868
869 bool Equals(const Callback& other) const {
870 return CallbackBase::Equals(other);
871 }
872
873 R Run(typename internal::CallbackParamTraits<A1>::ForwardType a1,
874 typename internal::CallbackParamTraits<A2>::ForwardType a2,
875 typename internal::CallbackParamTraits<A3>::ForwardType a3,
876 typename internal::CallbackParamTraits<A4>::ForwardType a4,
877 typename internal::CallbackParamTraits<A5>::ForwardType a5,
878 typename internal::CallbackParamTraits<A6>::ForwardType a6,
879 typename internal::CallbackParamTraits<A7>::ForwardType a7,
880 typename internal::CallbackParamTraits<A8>::ForwardType a8,
881 typename internal::CallbackParamTraits<A9>::ForwardType a9,
882 typename internal::CallbackParamTraits<A10>::ForwardType a10,
883 typename internal::CallbackParamTraits<A11>::ForwardType a11) const {
884 PolymorphicInvoke f =
885 reinterpret_cast<PolymorphicInvoke>(polymorphic_invoke_);
886
887 return f(bind_state_.get(), a1,
888 a2,
889 a3,
890 a4,
891 a5,
892 a6,
893 a7,
894 a8,
895 a9,
896 a10,
897 a11);
898 }
899
900 private:
901 typedef R(*PolymorphicInvoke)(
902 internal::BindStateBase*,
903 typename internal::CallbackParamTraits<A1>::ForwardType,
904 typename internal::CallbackParamTraits<A2>::ForwardType,
905 typename internal::CallbackParamTraits<A3>::ForwardType,
906 typename internal::CallbackParamTraits<A4>::ForwardType,
907 typename internal::CallbackParamTraits<A5>::ForwardType,
908 typename internal::CallbackParamTraits<A6>::ForwardType,
909 typename internal::CallbackParamTraits<A7>::ForwardType,
910 typename internal::CallbackParamTraits<A8>::ForwardType,
911 typename internal::CallbackParamTraits<A9>::ForwardType,
912 typename internal::CallbackParamTraits<A10>::ForwardType,
913 typename internal::CallbackParamTraits<A11>::ForwardType);
914
915 };
916
917 576
918 // Syntactic sugar to make Callbacks<void(void)> easier to declare since it 577 // Syntactic sugar to make Callbacks<void(void)> easier to declare since it
919 // will be used in a lot of APIs with delayed execution. 578 // will be used in a lot of APIs with delayed execution.
920 typedef Callback<void(void)> Closure; 579 typedef Callback<void(void)> Closure;
921 580
922 } // namespace base 581 } // namespace base
923 582
924 #endif // BASE_CALLBACK_H 583 #endif // BASE_CALLBACK_H
OLDNEW
« no previous file with comments | « base/bind_internal_win.h.pump ('k') | base/callback.h.pump » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698