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

Side by Side Diff: base/bind_internal.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.h.pump ('k') | base/bind_internal.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 bind_internal.h.pump 2 // pump.py bind_internal.h.pump
3 // DO NOT EDIT BY HAND!!! 3 // DO NOT EDIT BY HAND!!!
4 4
5 5
6 6
7 // TODO(ajwong): If you create an fully unbound method, is there a way to 7 // TODO(ajwong): If you create an fully unbound method, is there a way to
8 // enforce the first argument must be refcounted? Or do we just say 8 // enforce the first argument must be refcounted? Or do we just say
9 // "oh well"? 9 // "oh well"?
10 // 10 //
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 typename CallbackParamTraits<A4>::ForwardType a4, 545 typename CallbackParamTraits<A4>::ForwardType a4,
546 typename CallbackParamTraits<A5>::ForwardType a5, 546 typename CallbackParamTraits<A5>::ForwardType a5,
547 typename CallbackParamTraits<A6>::ForwardType a6) { 547 typename CallbackParamTraits<A6>::ForwardType a6) {
548 return (object->*method_)(a1, a2, a3, a4, a5, a6); 548 return (object->*method_)(a1, a2, a3, a4, a5, a6);
549 } 549 }
550 550
551 private: 551 private:
552 R (T::*method_)(A1, A2, A3, A4, A5, A6) const; 552 R (T::*method_)(A1, A2, A3, A4, A5, A6) const;
553 }; 553 };
554 554
555 // Function: Arity 7.
556 template <typename R, typename A1, typename A2, typename A3, typename A4,
557 typename A5, typename A6, typename A7>
558 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7)> {
559 public:
560 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7);
561
562 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7))
563 : function_(function) {
564 }
565
566 R Run(typename CallbackParamTraits<A1>::ForwardType a1,
567 typename CallbackParamTraits<A2>::ForwardType a2,
568 typename CallbackParamTraits<A3>::ForwardType a3,
569 typename CallbackParamTraits<A4>::ForwardType a4,
570 typename CallbackParamTraits<A5>::ForwardType a5,
571 typename CallbackParamTraits<A6>::ForwardType a6,
572 typename CallbackParamTraits<A7>::ForwardType a7) {
573 return function_(a1, a2, a3, a4, a5, a6, a7);
574 }
575
576 private:
577 R (*function_)(A1, A2, A3, A4, A5, A6, A7);
578 };
579
580 // Method: Arity 7.
581 template <typename R, typename T, typename A1, typename A2, typename A3,
582 typename A4, typename A5, typename A6, typename A7>
583 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7)> {
584 public:
585 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7);
586 typedef true_type IsMethod;
587
588 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7))
589 : method_(method) {
590 }
591
592 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1,
593 typename CallbackParamTraits<A2>::ForwardType a2,
594 typename CallbackParamTraits<A3>::ForwardType a3,
595 typename CallbackParamTraits<A4>::ForwardType a4,
596 typename CallbackParamTraits<A5>::ForwardType a5,
597 typename CallbackParamTraits<A6>::ForwardType a6,
598 typename CallbackParamTraits<A7>::ForwardType a7) {
599 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7);
600 }
601
602 private:
603 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7);
604 };
605
606 // Const Method: Arity 7.
607 template <typename R, typename T, typename A1, typename A2, typename A3,
608 typename A4, typename A5, typename A6, typename A7>
609 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7) const> {
610 public:
611 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7);
612 typedef true_type IsMethod;
613
614 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7) const)
615 : method_(method) {
616 }
617
618 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1,
619 typename CallbackParamTraits<A2>::ForwardType a2,
620 typename CallbackParamTraits<A3>::ForwardType a3,
621 typename CallbackParamTraits<A4>::ForwardType a4,
622 typename CallbackParamTraits<A5>::ForwardType a5,
623 typename CallbackParamTraits<A6>::ForwardType a6,
624 typename CallbackParamTraits<A7>::ForwardType a7) {
625 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7);
626 }
627
628 private:
629 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7) const;
630 };
631
632 // Function: Arity 8.
633 template <typename R, typename A1, typename A2, typename A3, typename A4,
634 typename A5, typename A6, typename A7, typename A8>
635 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7, A8)> {
636 public:
637 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8);
638
639 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7, A8))
640 : function_(function) {
641 }
642
643 R Run(typename CallbackParamTraits<A1>::ForwardType a1,
644 typename CallbackParamTraits<A2>::ForwardType a2,
645 typename CallbackParamTraits<A3>::ForwardType a3,
646 typename CallbackParamTraits<A4>::ForwardType a4,
647 typename CallbackParamTraits<A5>::ForwardType a5,
648 typename CallbackParamTraits<A6>::ForwardType a6,
649 typename CallbackParamTraits<A7>::ForwardType a7,
650 typename CallbackParamTraits<A8>::ForwardType a8) {
651 return function_(a1, a2, a3, a4, a5, a6, a7, a8);
652 }
653
654 private:
655 R (*function_)(A1, A2, A3, A4, A5, A6, A7, A8);
656 };
657
658 // Method: Arity 8.
659 template <typename R, typename T, typename A1, typename A2, typename A3,
660 typename A4, typename A5, typename A6, typename A7, typename A8>
661 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8)> {
662 public:
663 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7, A8);
664 typedef true_type IsMethod;
665
666 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8))
667 : method_(method) {
668 }
669
670 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1,
671 typename CallbackParamTraits<A2>::ForwardType a2,
672 typename CallbackParamTraits<A3>::ForwardType a3,
673 typename CallbackParamTraits<A4>::ForwardType a4,
674 typename CallbackParamTraits<A5>::ForwardType a5,
675 typename CallbackParamTraits<A6>::ForwardType a6,
676 typename CallbackParamTraits<A7>::ForwardType a7,
677 typename CallbackParamTraits<A8>::ForwardType a8) {
678 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8);
679 }
680
681 private:
682 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8);
683 };
684
685 // Const Method: Arity 8.
686 template <typename R, typename T, typename A1, typename A2, typename A3,
687 typename A4, typename A5, typename A6, typename A7, typename A8>
688 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8) const> {
689 public:
690 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7, A8);
691 typedef true_type IsMethod;
692
693 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8) const)
694 : method_(method) {
695 }
696
697 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1,
698 typename CallbackParamTraits<A2>::ForwardType a2,
699 typename CallbackParamTraits<A3>::ForwardType a3,
700 typename CallbackParamTraits<A4>::ForwardType a4,
701 typename CallbackParamTraits<A5>::ForwardType a5,
702 typename CallbackParamTraits<A6>::ForwardType a6,
703 typename CallbackParamTraits<A7>::ForwardType a7,
704 typename CallbackParamTraits<A8>::ForwardType a8) {
705 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8);
706 }
707
708 private:
709 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8) const;
710 };
711
712 // Function: Arity 9.
713 template <typename R, typename A1, typename A2, typename A3, typename A4,
714 typename A5, typename A6, typename A7, typename A8, typename A9>
715 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
716 public:
717 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
718
719 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7, A8, A9))
720 : function_(function) {
721 }
722
723 R Run(typename CallbackParamTraits<A1>::ForwardType a1,
724 typename CallbackParamTraits<A2>::ForwardType a2,
725 typename CallbackParamTraits<A3>::ForwardType a3,
726 typename CallbackParamTraits<A4>::ForwardType a4,
727 typename CallbackParamTraits<A5>::ForwardType a5,
728 typename CallbackParamTraits<A6>::ForwardType a6,
729 typename CallbackParamTraits<A7>::ForwardType a7,
730 typename CallbackParamTraits<A8>::ForwardType a8,
731 typename CallbackParamTraits<A9>::ForwardType a9) {
732 return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
733 }
734
735 private:
736 R (*function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
737 };
738
739 // Method: Arity 9.
740 template <typename R, typename T, typename A1, typename A2, typename A3,
741 typename A4, typename A5, typename A6, typename A7, typename A8,
742 typename A9>
743 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
744 public:
745 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7, A8, A9);
746 typedef true_type IsMethod;
747
748 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9))
749 : method_(method) {
750 }
751
752 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1,
753 typename CallbackParamTraits<A2>::ForwardType a2,
754 typename CallbackParamTraits<A3>::ForwardType a3,
755 typename CallbackParamTraits<A4>::ForwardType a4,
756 typename CallbackParamTraits<A5>::ForwardType a5,
757 typename CallbackParamTraits<A6>::ForwardType a6,
758 typename CallbackParamTraits<A7>::ForwardType a7,
759 typename CallbackParamTraits<A8>::ForwardType a8,
760 typename CallbackParamTraits<A9>::ForwardType a9) {
761 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
762 }
763
764 private:
765 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
766 };
767
768 // Const Method: Arity 9.
769 template <typename R, typename T, typename A1, typename A2, typename A3,
770 typename A4, typename A5, typename A6, typename A7, typename A8,
771 typename A9>
772 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const> {
773 public:
774 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7, A8, A9);
775 typedef true_type IsMethod;
776
777 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8,
778 A9) const)
779 : method_(method) {
780 }
781
782 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1,
783 typename CallbackParamTraits<A2>::ForwardType a2,
784 typename CallbackParamTraits<A3>::ForwardType a3,
785 typename CallbackParamTraits<A4>::ForwardType a4,
786 typename CallbackParamTraits<A5>::ForwardType a5,
787 typename CallbackParamTraits<A6>::ForwardType a6,
788 typename CallbackParamTraits<A7>::ForwardType a7,
789 typename CallbackParamTraits<A8>::ForwardType a8,
790 typename CallbackParamTraits<A9>::ForwardType a9) {
791 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
792 }
793
794 private:
795 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const;
796 };
797
798 // Function: Arity 10.
799 template <typename R, typename A1, typename A2, typename A3, typename A4,
800 typename A5, typename A6, typename A7, typename A8, typename A9,
801 typename A10>
802 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
803 public:
804 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
805
806 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7, A8, A9,
807 A10))
808 : function_(function) {
809 }
810
811 R Run(typename CallbackParamTraits<A1>::ForwardType a1,
812 typename CallbackParamTraits<A2>::ForwardType a2,
813 typename CallbackParamTraits<A3>::ForwardType a3,
814 typename CallbackParamTraits<A4>::ForwardType a4,
815 typename CallbackParamTraits<A5>::ForwardType a5,
816 typename CallbackParamTraits<A6>::ForwardType a6,
817 typename CallbackParamTraits<A7>::ForwardType a7,
818 typename CallbackParamTraits<A8>::ForwardType a8,
819 typename CallbackParamTraits<A9>::ForwardType a9,
820 typename CallbackParamTraits<A10>::ForwardType a10) {
821 return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
822 }
823
824 private:
825 R (*function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
826 };
827
828 // Method: Arity 10.
829 template <typename R, typename T, typename A1, typename A2, typename A3,
830 typename A4, typename A5, typename A6, typename A7, typename A8,
831 typename A9, typename A10>
832 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
833 public:
834 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
835 typedef true_type IsMethod;
836
837 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9,
838 A10))
839 : method_(method) {
840 }
841
842 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1,
843 typename CallbackParamTraits<A2>::ForwardType a2,
844 typename CallbackParamTraits<A3>::ForwardType a3,
845 typename CallbackParamTraits<A4>::ForwardType a4,
846 typename CallbackParamTraits<A5>::ForwardType a5,
847 typename CallbackParamTraits<A6>::ForwardType a6,
848 typename CallbackParamTraits<A7>::ForwardType a7,
849 typename CallbackParamTraits<A8>::ForwardType a8,
850 typename CallbackParamTraits<A9>::ForwardType a9,
851 typename CallbackParamTraits<A10>::ForwardType a10) {
852 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
853 }
854
855 private:
856 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
857 };
858
859 // Const Method: Arity 10.
860 template <typename R, typename T, typename A1, typename A2, typename A3,
861 typename A4, typename A5, typename A6, typename A7, typename A8,
862 typename A9, typename A10>
863 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const> {
864 public:
865 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
866 typedef true_type IsMethod;
867
868 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9,
869 A10) const)
870 : method_(method) {
871 }
872
873 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1,
874 typename CallbackParamTraits<A2>::ForwardType a2,
875 typename CallbackParamTraits<A3>::ForwardType a3,
876 typename CallbackParamTraits<A4>::ForwardType a4,
877 typename CallbackParamTraits<A5>::ForwardType a5,
878 typename CallbackParamTraits<A6>::ForwardType a6,
879 typename CallbackParamTraits<A7>::ForwardType a7,
880 typename CallbackParamTraits<A8>::ForwardType a8,
881 typename CallbackParamTraits<A9>::ForwardType a9,
882 typename CallbackParamTraits<A10>::ForwardType a10) {
883 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
884 }
885
886 private:
887 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const;
888 };
889
890 // Function: Arity 11.
891 template <typename R, typename A1, typename A2, typename A3, typename A4,
892 typename A5, typename A6, typename A7, typename A8, typename A9,
893 typename A10, typename A11>
894 class RunnableAdapter<R(*)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
895 public:
896 typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
897
898 explicit RunnableAdapter(R(*function)(A1, A2, A3, A4, A5, A6, A7, A8, A9,
899 A10, A11))
900 : function_(function) {
901 }
902
903 R Run(typename CallbackParamTraits<A1>::ForwardType a1,
904 typename CallbackParamTraits<A2>::ForwardType a2,
905 typename CallbackParamTraits<A3>::ForwardType a3,
906 typename CallbackParamTraits<A4>::ForwardType a4,
907 typename CallbackParamTraits<A5>::ForwardType a5,
908 typename CallbackParamTraits<A6>::ForwardType a6,
909 typename CallbackParamTraits<A7>::ForwardType a7,
910 typename CallbackParamTraits<A8>::ForwardType a8,
911 typename CallbackParamTraits<A9>::ForwardType a9,
912 typename CallbackParamTraits<A10>::ForwardType a10,
913 typename CallbackParamTraits<A11>::ForwardType a11) {
914 return function_(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
915 }
916
917 private:
918 R (*function_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
919 };
920
921 // Method: Arity 11.
922 template <typename R, typename T, typename A1, typename A2, typename A3,
923 typename A4, typename A5, typename A6, typename A7, typename A8,
924 typename A9, typename A10, typename A11>
925 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
926 public:
927 typedef R (RunType)(T*, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
928 typedef true_type IsMethod;
929
930 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9,
931 A10, A11))
932 : method_(method) {
933 }
934
935 R Run(T* object, typename CallbackParamTraits<A1>::ForwardType a1,
936 typename CallbackParamTraits<A2>::ForwardType a2,
937 typename CallbackParamTraits<A3>::ForwardType a3,
938 typename CallbackParamTraits<A4>::ForwardType a4,
939 typename CallbackParamTraits<A5>::ForwardType a5,
940 typename CallbackParamTraits<A6>::ForwardType a6,
941 typename CallbackParamTraits<A7>::ForwardType a7,
942 typename CallbackParamTraits<A8>::ForwardType a8,
943 typename CallbackParamTraits<A9>::ForwardType a9,
944 typename CallbackParamTraits<A10>::ForwardType a10,
945 typename CallbackParamTraits<A11>::ForwardType a11) {
946 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
947 }
948
949 private:
950 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
951 };
952
953 // Const Method: Arity 11.
954 template <typename R, typename T, typename A1, typename A2, typename A3,
955 typename A4, typename A5, typename A6, typename A7, typename A8,
956 typename A9, typename A10, typename A11>
957 class RunnableAdapter<R(T::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
958 A11) const> {
959 public:
960 typedef R (RunType)(const T*, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
961 typedef true_type IsMethod;
962
963 explicit RunnableAdapter(R(T::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9,
964 A10, A11) const)
965 : method_(method) {
966 }
967
968 R Run(const T* object, typename CallbackParamTraits<A1>::ForwardType a1,
969 typename CallbackParamTraits<A2>::ForwardType a2,
970 typename CallbackParamTraits<A3>::ForwardType a3,
971 typename CallbackParamTraits<A4>::ForwardType a4,
972 typename CallbackParamTraits<A5>::ForwardType a5,
973 typename CallbackParamTraits<A6>::ForwardType a6,
974 typename CallbackParamTraits<A7>::ForwardType a7,
975 typename CallbackParamTraits<A8>::ForwardType a8,
976 typename CallbackParamTraits<A9>::ForwardType a9,
977 typename CallbackParamTraits<A10>::ForwardType a10,
978 typename CallbackParamTraits<A11>::ForwardType a11) {
979 return (object->*method_)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
980 }
981
982 private:
983 R (T::*method_)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const;
984 };
985
986 555
987 // FunctionTraits<> 556 // FunctionTraits<>
988 // 557 //
989 // Breaks a function signature apart into typedefs for easier introspection. 558 // Breaks a function signature apart into typedefs for easier introspection.
990 template <typename Sig> 559 template <typename Sig>
991 struct FunctionTraits; 560 struct FunctionTraits;
992 561
993 template <typename R> 562 template <typename R>
994 struct FunctionTraits<R()> { 563 struct FunctionTraits<R()> {
995 typedef R ReturnType; 564 typedef R ReturnType;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6)> { 610 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6)> {
1042 typedef R ReturnType; 611 typedef R ReturnType;
1043 typedef A1 A1Type; 612 typedef A1 A1Type;
1044 typedef A2 A2Type; 613 typedef A2 A2Type;
1045 typedef A3 A3Type; 614 typedef A3 A3Type;
1046 typedef A4 A4Type; 615 typedef A4 A4Type;
1047 typedef A5 A5Type; 616 typedef A5 A5Type;
1048 typedef A6 A6Type; 617 typedef A6 A6Type;
1049 }; 618 };
1050 619
1051 template <typename R, typename A1, typename A2, typename A3, typename A4,
1052 typename A5, typename A6, typename A7>
1053 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6, A7)> {
1054 typedef R ReturnType;
1055 typedef A1 A1Type;
1056 typedef A2 A2Type;
1057 typedef A3 A3Type;
1058 typedef A4 A4Type;
1059 typedef A5 A5Type;
1060 typedef A6 A6Type;
1061 typedef A7 A7Type;
1062 };
1063
1064 template <typename R, typename A1, typename A2, typename A3, typename A4,
1065 typename A5, typename A6, typename A7, typename A8>
1066 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6, A7, A8)> {
1067 typedef R ReturnType;
1068 typedef A1 A1Type;
1069 typedef A2 A2Type;
1070 typedef A3 A3Type;
1071 typedef A4 A4Type;
1072 typedef A5 A5Type;
1073 typedef A6 A6Type;
1074 typedef A7 A7Type;
1075 typedef A8 A8Type;
1076 };
1077
1078 template <typename R, typename A1, typename A2, typename A3, typename A4,
1079 typename A5, typename A6, typename A7, typename A8, typename A9>
1080 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1081 typedef R ReturnType;
1082 typedef A1 A1Type;
1083 typedef A2 A2Type;
1084 typedef A3 A3Type;
1085 typedef A4 A4Type;
1086 typedef A5 A5Type;
1087 typedef A6 A6Type;
1088 typedef A7 A7Type;
1089 typedef A8 A8Type;
1090 typedef A9 A9Type;
1091 };
1092
1093 template <typename R, typename A1, typename A2, typename A3, typename A4,
1094 typename A5, typename A6, typename A7, typename A8, typename A9,
1095 typename A10>
1096 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
1097 typedef R ReturnType;
1098 typedef A1 A1Type;
1099 typedef A2 A2Type;
1100 typedef A3 A3Type;
1101 typedef A4 A4Type;
1102 typedef A5 A5Type;
1103 typedef A6 A6Type;
1104 typedef A7 A7Type;
1105 typedef A8 A8Type;
1106 typedef A9 A9Type;
1107 typedef A10 A10Type;
1108 };
1109
1110 template <typename R, typename A1, typename A2, typename A3, typename A4,
1111 typename A5, typename A6, typename A7, typename A8, typename A9,
1112 typename A10, typename A11>
1113 struct FunctionTraits<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
1114 typedef R ReturnType;
1115 typedef A1 A1Type;
1116 typedef A2 A2Type;
1117 typedef A3 A3Type;
1118 typedef A4 A4Type;
1119 typedef A5 A5Type;
1120 typedef A6 A6Type;
1121 typedef A7 A7Type;
1122 typedef A8 A8Type;
1123 typedef A9 A9Type;
1124 typedef A10 A10Type;
1125 typedef A11 A11Type;
1126 };
1127
1128 620
1129 // ForceVoidReturn<> 621 // ForceVoidReturn<>
1130 // 622 //
1131 // Set of templates that support forcing the function return type to void. 623 // Set of templates that support forcing the function return type to void.
1132 template <typename Sig> 624 template <typename Sig>
1133 struct ForceVoidReturn; 625 struct ForceVoidReturn;
1134 626
1135 template <typename R> 627 template <typename R>
1136 struct ForceVoidReturn<R()> { 628 struct ForceVoidReturn<R()> {
1137 typedef void(RunType)(); 629 typedef void(RunType)();
(...skipping 24 matching lines...) Expand all
1162 struct ForceVoidReturn<R(A1, A2, A3, A4, A5)> { 654 struct ForceVoidReturn<R(A1, A2, A3, A4, A5)> {
1163 typedef void(RunType)(A1, A2, A3, A4, A5); 655 typedef void(RunType)(A1, A2, A3, A4, A5);
1164 }; 656 };
1165 657
1166 template <typename R, typename A1, typename A2, typename A3, typename A4, 658 template <typename R, typename A1, typename A2, typename A3, typename A4,
1167 typename A5, typename A6> 659 typename A5, typename A6>
1168 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6)> { 660 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6)> {
1169 typedef void(RunType)(A1, A2, A3, A4, A5, A6); 661 typedef void(RunType)(A1, A2, A3, A4, A5, A6);
1170 }; 662 };
1171 663
1172 template <typename R, typename A1, typename A2, typename A3, typename A4,
1173 typename A5, typename A6, typename A7>
1174 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6, A7)> {
1175 typedef void(RunType)(A1, A2, A3, A4, A5, A6, A7);
1176 };
1177
1178 template <typename R, typename A1, typename A2, typename A3, typename A4,
1179 typename A5, typename A6, typename A7, typename A8>
1180 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6, A7, A8)> {
1181 typedef void(RunType)(A1, A2, A3, A4, A5, A6, A7, A8);
1182 };
1183
1184 template <typename R, typename A1, typename A2, typename A3, typename A4,
1185 typename A5, typename A6, typename A7, typename A8, typename A9>
1186 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1187 typedef void(RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
1188 };
1189
1190 template <typename R, typename A1, typename A2, typename A3, typename A4,
1191 typename A5, typename A6, typename A7, typename A8, typename A9,
1192 typename A10>
1193 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
1194 typedef void(RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
1195 };
1196
1197 template <typename R, typename A1, typename A2, typename A3, typename A4,
1198 typename A5, typename A6, typename A7, typename A8, typename A9,
1199 typename A10, typename A11>
1200 struct ForceVoidReturn<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
1201 typedef void(RunType)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
1202 };
1203
1204 664
1205 // FunctorTraits<> 665 // FunctorTraits<>
1206 // 666 //
1207 // See description at top of file. 667 // See description at top of file.
1208 template <typename T> 668 template <typename T>
1209 struct FunctorTraits { 669 struct FunctorTraits {
1210 typedef RunnableAdapter<T> RunnableType; 670 typedef RunnableAdapter<T> RunnableType;
1211 typedef typename RunnableType::RunType RunType; 671 typedef typename RunnableType::RunType RunType;
1212 }; 672 };
1213 673
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1457 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, 917 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1458 A6 a6) { 918 A6 a6) {
1459 if (!a1.get()) { 919 if (!a1.get()) {
1460 return; 920 return;
1461 } 921 }
1462 922
1463 runnable.Run(a1, a2, a3, a4, a5, a6); 923 runnable.Run(a1, a2, a3, a4, a5, a6);
1464 } 924 }
1465 }; 925 };
1466 926
1467 template <typename ReturnType, typename Runnable,typename A1, typename A2,
1468 typename A3, typename A4, typename A5, typename A6, typename A7>
1469 struct InvokeHelper<false, ReturnType, Runnable,
1470 void(A1, A2, A3, A4, A5, A6, A7)> {
1471 static ReturnType MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4,
1472 A5 a5, A6 a6, A7 a7) {
1473 return runnable.Run(a1, a2, a3, a4, a5, a6, a7);
1474 }
1475 };
1476
1477 template <typename Runnable,typename A1, typename A2, typename A3, typename A4,
1478 typename A5, typename A6, typename A7>
1479 struct InvokeHelper<false, void, Runnable,
1480 void(A1, A2, A3, A4, A5, A6, A7)> {
1481 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1482 A6 a6, A7 a7) {
1483 runnable.Run(a1, a2, a3, a4, a5, a6, a7);
1484 }
1485 };
1486
1487 template <typename Runnable, typename A1, typename A2, typename A3,
1488 typename A4, typename A5, typename A6, typename A7>
1489 struct InvokeHelper<true, void, Runnable,
1490 void(A1, A2, A3, A4, A5, A6, A7)> {
1491 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1492 A6 a6, A7 a7) {
1493 if (!a1.get()) {
1494 return;
1495 }
1496
1497 runnable.Run(a1, a2, a3, a4, a5, a6, a7);
1498 }
1499 };
1500
1501 template <typename ReturnType, typename Runnable,typename A1, typename A2,
1502 typename A3, typename A4, typename A5, typename A6, typename A7,
1503 typename A8>
1504 struct InvokeHelper<false, ReturnType, Runnable,
1505 void(A1, A2, A3, A4, A5, A6, A7, A8)> {
1506 static ReturnType MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4,
1507 A5 a5, A6 a6, A7 a7, A8 a8) {
1508 return runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8);
1509 }
1510 };
1511
1512 template <typename Runnable,typename A1, typename A2, typename A3, typename A4,
1513 typename A5, typename A6, typename A7, typename A8>
1514 struct InvokeHelper<false, void, Runnable,
1515 void(A1, A2, A3, A4, A5, A6, A7, A8)> {
1516 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1517 A6 a6, A7 a7, A8 a8) {
1518 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8);
1519 }
1520 };
1521
1522 template <typename Runnable, typename A1, typename A2, typename A3,
1523 typename A4, typename A5, typename A6, typename A7, typename A8>
1524 struct InvokeHelper<true, void, Runnable,
1525 void(A1, A2, A3, A4, A5, A6, A7, A8)> {
1526 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1527 A6 a6, A7 a7, A8 a8) {
1528 if (!a1.get()) {
1529 return;
1530 }
1531
1532 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8);
1533 }
1534 };
1535
1536 template <typename ReturnType, typename Runnable,typename A1, typename A2,
1537 typename A3, typename A4, typename A5, typename A6, typename A7,
1538 typename A8, typename A9>
1539 struct InvokeHelper<false, ReturnType, Runnable,
1540 void(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1541 static ReturnType MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4,
1542 A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) {
1543 return runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9);
1544 }
1545 };
1546
1547 template <typename Runnable,typename A1, typename A2, typename A3, typename A4,
1548 typename A5, typename A6, typename A7, typename A8, typename A9>
1549 struct InvokeHelper<false, void, Runnable,
1550 void(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1551 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1552 A6 a6, A7 a7, A8 a8, A9 a9) {
1553 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9);
1554 }
1555 };
1556
1557 template <typename Runnable, typename A1, typename A2, typename A3,
1558 typename A4, typename A5, typename A6, typename A7, typename A8,
1559 typename A9>
1560 struct InvokeHelper<true, void, Runnable,
1561 void(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1562 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1563 A6 a6, A7 a7, A8 a8, A9 a9) {
1564 if (!a1.get()) {
1565 return;
1566 }
1567
1568 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9);
1569 }
1570 };
1571
1572 template <typename ReturnType, typename Runnable,typename A1, typename A2,
1573 typename A3, typename A4, typename A5, typename A6, typename A7,
1574 typename A8, typename A9, typename A10>
1575 struct InvokeHelper<false, ReturnType, Runnable,
1576 void(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
1577 static ReturnType MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4,
1578 A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) {
1579 return runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
1580 }
1581 };
1582
1583 template <typename Runnable,typename A1, typename A2, typename A3, typename A4,
1584 typename A5, typename A6, typename A7, typename A8, typename A9,
1585 typename A10>
1586 struct InvokeHelper<false, void, Runnable,
1587 void(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
1588 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1589 A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) {
1590 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
1591 }
1592 };
1593
1594 template <typename Runnable, typename A1, typename A2, typename A3,
1595 typename A4, typename A5, typename A6, typename A7, typename A8,
1596 typename A9, typename A10>
1597 struct InvokeHelper<true, void, Runnable,
1598 void(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> {
1599 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1600 A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) {
1601 if (!a1.get()) {
1602 return;
1603 }
1604
1605 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
1606 }
1607 };
1608
1609 template <typename ReturnType, typename Runnable,typename A1, typename A2,
1610 typename A3, typename A4, typename A5, typename A6, typename A7,
1611 typename A8, typename A9, typename A10, typename A11>
1612 struct InvokeHelper<false, ReturnType, Runnable,
1613 void(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
1614 static ReturnType MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4,
1615 A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11) {
1616 return runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
1617 }
1618 };
1619
1620 template <typename Runnable,typename A1, typename A2, typename A3, typename A4,
1621 typename A5, typename A6, typename A7, typename A8, typename A9,
1622 typename A10, typename A11>
1623 struct InvokeHelper<false, void, Runnable,
1624 void(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
1625 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1626 A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11) {
1627 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
1628 }
1629 };
1630
1631 template <typename Runnable, typename A1, typename A2, typename A3,
1632 typename A4, typename A5, typename A6, typename A7, typename A8,
1633 typename A9, typename A10, typename A11>
1634 struct InvokeHelper<true, void, Runnable,
1635 void(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)> {
1636 static void MakeItSo(Runnable runnable, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
1637 A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11) {
1638 if (!a1.get()) {
1639 return;
1640 }
1641
1642 runnable.Run(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
1643 }
1644 };
1645
1646 #if !defined(_MSC_VER) 927 #if !defined(_MSC_VER)
1647 928
1648 template <typename ReturnType, typename Runnable, typename ArgsType> 929 template <typename ReturnType, typename Runnable, typename ArgsType>
1649 struct InvokeHelper<true, ReturnType, Runnable, ArgsType> { 930 struct InvokeHelper<true, ReturnType, Runnable, ArgsType> {
1650 // WeakCalls are only supported for functions with a void return type. 931 // WeakCalls are only supported for functions with a void return type.
1651 // Otherwise, the function result would be undefined if the the WeakPtr<> 932 // Otherwise, the function result would be undefined if the the WeakPtr<>
1652 // is invalidated. 933 // is invalidated.
1653 COMPILE_ASSERT(is_void<ReturnType>::value, 934 COMPILE_ASSERT(is_void<ReturnType>::value,
1654 weak_ptrs_can_only_bind_to_methods_without_return_values); 935 weak_ptrs_can_only_bind_to_methods_without_return_values);
1655 }; 936 };
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 ::MakeItSo(storage->runnable_, x1); 986 ::MakeItSo(storage->runnable_, x1);
1706 } 987 }
1707 }; 988 };
1708 989
1709 // Arity 1 -> 0. 990 // Arity 1 -> 0.
1710 template <typename StorageType, typename R,typename X1> 991 template <typename StorageType, typename R,typename X1>
1711 struct Invoker<1, StorageType, R(X1)> { 992 struct Invoker<1, StorageType, R(X1)> {
1712 typedef R(RunType)(BindStateBase*); 993 typedef R(RunType)(BindStateBase*);
1713 994
1714 typedef R(UnboundRunType)(); 995 typedef R(UnboundRunType)();
1715
1716 static R Run(BindStateBase* base) {
1717 StorageType* storage = static_cast<StorageType*>(base);
1718
1719 // Local references to make debugger stepping easier. If in a debugger,
1720 // you really want to warp ahead and step through the
1721 // InvokeHelper<>::MakeItSo() call below.
1722 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1723
1724 typename Bound1UnwrapTraits::ForwardType x1 =
1725 Bound1UnwrapTraits::Unwrap(storage->p1_);
1726 return InvokeHelper<StorageType::IsWeakCall::value, R,
1727 typename StorageType::RunnableType,
1728 void(typename Bound1UnwrapTraits::ForwardType)>
1729 ::MakeItSo(storage->runnable_, x1);
1730 }
1731 };
1732
1733 // Arity 2 -> 2.
1734 template <typename StorageType, typename R,typename X1, typename X2>
1735 struct Invoker<0, StorageType, R(X1, X2)> {
1736 typedef R(RunType)(BindStateBase*,
1737 typename CallbackParamTraits<X1>::ForwardType,
1738 typename CallbackParamTraits<X2>::ForwardType);
1739
1740 typedef R(UnboundRunType)(X1, X2);
1741
1742 static R Run(BindStateBase* base,
1743 typename CallbackParamTraits<X1>::ForwardType x1,
1744 typename CallbackParamTraits<X2>::ForwardType x2) {
1745 StorageType* storage = static_cast<StorageType*>(base);
1746
1747 // Local references to make debugger stepping easier. If in a debugger,
1748 // you really want to warp ahead and step through the
1749 // InvokeHelper<>::MakeItSo() call below.
1750
1751 return InvokeHelper<StorageType::IsWeakCall::value, R,
1752 typename StorageType::RunnableType,
1753 void(typename CallbackParamTraits<X1>::ForwardType x1,
1754 typename CallbackParamTraits<X2>::ForwardType x2)>
1755 ::MakeItSo(storage->runnable_, x1, x2);
1756 }
1757 };
1758
1759 // Arity 2 -> 1.
1760 template <typename StorageType, typename R,typename X1, typename X2>
1761 struct Invoker<1, StorageType, R(X1, X2)> {
1762 typedef R(RunType)(BindStateBase*,
1763 typename CallbackParamTraits<X2>::ForwardType);
1764
1765 typedef R(UnboundRunType)(X2);
1766
1767 static R Run(BindStateBase* base,
1768 typename CallbackParamTraits<X2>::ForwardType x2) {
1769 StorageType* storage = static_cast<StorageType*>(base);
1770
1771 // Local references to make debugger stepping easier. If in a debugger,
1772 // you really want to warp ahead and step through the
1773 // InvokeHelper<>::MakeItSo() call below.
1774 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1775
1776 typename Bound1UnwrapTraits::ForwardType x1 =
1777 Bound1UnwrapTraits::Unwrap(storage->p1_);
1778 return InvokeHelper<StorageType::IsWeakCall::value, R,
1779 typename StorageType::RunnableType,
1780 void(typename Bound1UnwrapTraits::ForwardType,
1781 typename CallbackParamTraits<X2>::ForwardType x2)>
1782 ::MakeItSo(storage->runnable_, x1, x2);
1783 }
1784 };
1785
1786 // Arity 2 -> 0.
1787 template <typename StorageType, typename R,typename X1, typename X2>
1788 struct Invoker<2, StorageType, R(X1, X2)> {
1789 typedef R(RunType)(BindStateBase*);
1790
1791 typedef R(UnboundRunType)();
1792
1793 static R Run(BindStateBase* base) {
1794 StorageType* storage = static_cast<StorageType*>(base);
1795
1796 // Local references to make debugger stepping easier. If in a debugger,
1797 // you really want to warp ahead and step through the
1798 // InvokeHelper<>::MakeItSo() call below.
1799 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1800 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
1801
1802 typename Bound1UnwrapTraits::ForwardType x1 =
1803 Bound1UnwrapTraits::Unwrap(storage->p1_);
1804 typename Bound2UnwrapTraits::ForwardType x2 =
1805 Bound2UnwrapTraits::Unwrap(storage->p2_);
1806 return InvokeHelper<StorageType::IsWeakCall::value, R,
1807 typename StorageType::RunnableType,
1808 void(typename Bound1UnwrapTraits::ForwardType,
1809 typename Bound2UnwrapTraits::ForwardType)>
1810 ::MakeItSo(storage->runnable_, x1, x2);
1811 }
1812 };
1813
1814 // Arity 3 -> 3.
1815 template <typename StorageType, typename R,typename X1, typename X2,
1816 typename X3>
1817 struct Invoker<0, StorageType, R(X1, X2, X3)> {
1818 typedef R(RunType)(BindStateBase*,
1819 typename CallbackParamTraits<X1>::ForwardType,
1820 typename CallbackParamTraits<X2>::ForwardType,
1821 typename CallbackParamTraits<X3>::ForwardType);
1822
1823 typedef R(UnboundRunType)(X1, X2, X3);
1824
1825 static R Run(BindStateBase* base,
1826 typename CallbackParamTraits<X1>::ForwardType x1,
1827 typename CallbackParamTraits<X2>::ForwardType x2,
1828 typename CallbackParamTraits<X3>::ForwardType x3) {
1829 StorageType* storage = static_cast<StorageType*>(base);
1830
1831 // Local references to make debugger stepping easier. If in a debugger,
1832 // you really want to warp ahead and step through the
1833 // InvokeHelper<>::MakeItSo() call below.
1834
1835 return InvokeHelper<StorageType::IsWeakCall::value, R,
1836 typename StorageType::RunnableType,
1837 void(typename CallbackParamTraits<X1>::ForwardType x1,
1838 typename CallbackParamTraits<X2>::ForwardType x2,
1839 typename CallbackParamTraits<X3>::ForwardType x3)>
1840 ::MakeItSo(storage->runnable_, x1, x2, x3);
1841 }
1842 };
1843
1844 // Arity 3 -> 2.
1845 template <typename StorageType, typename R,typename X1, typename X2,
1846 typename X3>
1847 struct Invoker<1, StorageType, R(X1, X2, X3)> {
1848 typedef R(RunType)(BindStateBase*,
1849 typename CallbackParamTraits<X2>::ForwardType,
1850 typename CallbackParamTraits<X3>::ForwardType);
1851
1852 typedef R(UnboundRunType)(X2, X3);
1853
1854 static R Run(BindStateBase* base,
1855 typename CallbackParamTraits<X2>::ForwardType x2,
1856 typename CallbackParamTraits<X3>::ForwardType x3) {
1857 StorageType* storage = static_cast<StorageType*>(base);
1858
1859 // Local references to make debugger stepping easier. If in a debugger,
1860 // you really want to warp ahead and step through the
1861 // InvokeHelper<>::MakeItSo() call below.
1862 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1863
1864 typename Bound1UnwrapTraits::ForwardType x1 =
1865 Bound1UnwrapTraits::Unwrap(storage->p1_);
1866 return InvokeHelper<StorageType::IsWeakCall::value, R,
1867 typename StorageType::RunnableType,
1868 void(typename Bound1UnwrapTraits::ForwardType,
1869 typename CallbackParamTraits<X2>::ForwardType x2,
1870 typename CallbackParamTraits<X3>::ForwardType x3)>
1871 ::MakeItSo(storage->runnable_, x1, x2, x3);
1872 }
1873 };
1874
1875 // Arity 3 -> 1.
1876 template <typename StorageType, typename R,typename X1, typename X2,
1877 typename X3>
1878 struct Invoker<2, StorageType, R(X1, X2, X3)> {
1879 typedef R(RunType)(BindStateBase*,
1880 typename CallbackParamTraits<X3>::ForwardType);
1881
1882 typedef R(UnboundRunType)(X3);
1883
1884 static R Run(BindStateBase* base,
1885 typename CallbackParamTraits<X3>::ForwardType x3) {
1886 StorageType* storage = static_cast<StorageType*>(base);
1887
1888 // Local references to make debugger stepping easier. If in a debugger,
1889 // you really want to warp ahead and step through the
1890 // InvokeHelper<>::MakeItSo() call below.
1891 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1892 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
1893
1894 typename Bound1UnwrapTraits::ForwardType x1 =
1895 Bound1UnwrapTraits::Unwrap(storage->p1_);
1896 typename Bound2UnwrapTraits::ForwardType x2 =
1897 Bound2UnwrapTraits::Unwrap(storage->p2_);
1898 return InvokeHelper<StorageType::IsWeakCall::value, R,
1899 typename StorageType::RunnableType,
1900 void(typename Bound1UnwrapTraits::ForwardType,
1901 typename Bound2UnwrapTraits::ForwardType,
1902 typename CallbackParamTraits<X3>::ForwardType x3)>
1903 ::MakeItSo(storage->runnable_, x1, x2, x3);
1904 }
1905 };
1906
1907 // Arity 3 -> 0.
1908 template <typename StorageType, typename R,typename X1, typename X2,
1909 typename X3>
1910 struct Invoker<3, StorageType, R(X1, X2, X3)> {
1911 typedef R(RunType)(BindStateBase*);
1912
1913 typedef R(UnboundRunType)();
1914
1915 static R Run(BindStateBase* base) {
1916 StorageType* storage = static_cast<StorageType*>(base);
1917
1918 // Local references to make debugger stepping easier. If in a debugger,
1919 // you really want to warp ahead and step through the
1920 // InvokeHelper<>::MakeItSo() call below.
1921 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1922 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
1923 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
1924
1925 typename Bound1UnwrapTraits::ForwardType x1 =
1926 Bound1UnwrapTraits::Unwrap(storage->p1_);
1927 typename Bound2UnwrapTraits::ForwardType x2 =
1928 Bound2UnwrapTraits::Unwrap(storage->p2_);
1929 typename Bound3UnwrapTraits::ForwardType x3 =
1930 Bound3UnwrapTraits::Unwrap(storage->p3_);
1931 return InvokeHelper<StorageType::IsWeakCall::value, R,
1932 typename StorageType::RunnableType,
1933 void(typename Bound1UnwrapTraits::ForwardType,
1934 typename Bound2UnwrapTraits::ForwardType,
1935 typename Bound3UnwrapTraits::ForwardType)>
1936 ::MakeItSo(storage->runnable_, x1, x2, x3);
1937 }
1938 };
1939
1940 // Arity 4 -> 4.
1941 template <typename StorageType, typename R,typename X1, typename X2,
1942 typename X3, typename X4>
1943 struct Invoker<0, StorageType, R(X1, X2, X3, X4)> {
1944 typedef R(RunType)(BindStateBase*,
1945 typename CallbackParamTraits<X1>::ForwardType,
1946 typename CallbackParamTraits<X2>::ForwardType,
1947 typename CallbackParamTraits<X3>::ForwardType,
1948 typename CallbackParamTraits<X4>::ForwardType);
1949
1950 typedef R(UnboundRunType)(X1, X2, X3, X4);
1951
1952 static R Run(BindStateBase* base,
1953 typename CallbackParamTraits<X1>::ForwardType x1,
1954 typename CallbackParamTraits<X2>::ForwardType x2,
1955 typename CallbackParamTraits<X3>::ForwardType x3,
1956 typename CallbackParamTraits<X4>::ForwardType x4) {
1957 StorageType* storage = static_cast<StorageType*>(base);
1958
1959 // Local references to make debugger stepping easier. If in a debugger,
1960 // you really want to warp ahead and step through the
1961 // InvokeHelper<>::MakeItSo() call below.
1962
1963 return InvokeHelper<StorageType::IsWeakCall::value, R,
1964 typename StorageType::RunnableType,
1965 void(typename CallbackParamTraits<X1>::ForwardType x1,
1966 typename CallbackParamTraits<X2>::ForwardType x2,
1967 typename CallbackParamTraits<X3>::ForwardType x3,
1968 typename CallbackParamTraits<X4>::ForwardType x4)>
1969 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
1970 }
1971 };
1972
1973 // Arity 4 -> 3.
1974 template <typename StorageType, typename R,typename X1, typename X2,
1975 typename X3, typename X4>
1976 struct Invoker<1, StorageType, R(X1, X2, X3, X4)> {
1977 typedef R(RunType)(BindStateBase*,
1978 typename CallbackParamTraits<X2>::ForwardType,
1979 typename CallbackParamTraits<X3>::ForwardType,
1980 typename CallbackParamTraits<X4>::ForwardType);
1981
1982 typedef R(UnboundRunType)(X2, X3, X4);
1983
1984 static R Run(BindStateBase* base,
1985 typename CallbackParamTraits<X2>::ForwardType x2,
1986 typename CallbackParamTraits<X3>::ForwardType x3,
1987 typename CallbackParamTraits<X4>::ForwardType x4) {
1988 StorageType* storage = static_cast<StorageType*>(base);
1989
1990 // Local references to make debugger stepping easier. If in a debugger,
1991 // you really want to warp ahead and step through the
1992 // InvokeHelper<>::MakeItSo() call below.
1993 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
1994
1995 typename Bound1UnwrapTraits::ForwardType x1 =
1996 Bound1UnwrapTraits::Unwrap(storage->p1_);
1997 return InvokeHelper<StorageType::IsWeakCall::value, R,
1998 typename StorageType::RunnableType,
1999 void(typename Bound1UnwrapTraits::ForwardType,
2000 typename CallbackParamTraits<X2>::ForwardType x2,
2001 typename CallbackParamTraits<X3>::ForwardType x3,
2002 typename CallbackParamTraits<X4>::ForwardType x4)>
2003 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
2004 }
2005 };
2006
2007 // Arity 4 -> 2.
2008 template <typename StorageType, typename R,typename X1, typename X2,
2009 typename X3, typename X4>
2010 struct Invoker<2, StorageType, R(X1, X2, X3, X4)> {
2011 typedef R(RunType)(BindStateBase*,
2012 typename CallbackParamTraits<X3>::ForwardType,
2013 typename CallbackParamTraits<X4>::ForwardType);
2014
2015 typedef R(UnboundRunType)(X3, X4);
2016
2017 static R Run(BindStateBase* base,
2018 typename CallbackParamTraits<X3>::ForwardType x3,
2019 typename CallbackParamTraits<X4>::ForwardType x4) {
2020 StorageType* storage = static_cast<StorageType*>(base);
2021
2022 // Local references to make debugger stepping easier. If in a debugger,
2023 // you really want to warp ahead and step through the
2024 // InvokeHelper<>::MakeItSo() call below.
2025 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2026 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2027
2028 typename Bound1UnwrapTraits::ForwardType x1 =
2029 Bound1UnwrapTraits::Unwrap(storage->p1_);
2030 typename Bound2UnwrapTraits::ForwardType x2 =
2031 Bound2UnwrapTraits::Unwrap(storage->p2_);
2032 return InvokeHelper<StorageType::IsWeakCall::value, R,
2033 typename StorageType::RunnableType,
2034 void(typename Bound1UnwrapTraits::ForwardType,
2035 typename Bound2UnwrapTraits::ForwardType,
2036 typename CallbackParamTraits<X3>::ForwardType x3,
2037 typename CallbackParamTraits<X4>::ForwardType x4)>
2038 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
2039 }
2040 };
2041
2042 // Arity 4 -> 1.
2043 template <typename StorageType, typename R,typename X1, typename X2,
2044 typename X3, typename X4>
2045 struct Invoker<3, StorageType, R(X1, X2, X3, X4)> {
2046 typedef R(RunType)(BindStateBase*,
2047 typename CallbackParamTraits<X4>::ForwardType);
2048
2049 typedef R(UnboundRunType)(X4);
2050
2051 static R Run(BindStateBase* base,
2052 typename CallbackParamTraits<X4>::ForwardType x4) {
2053 StorageType* storage = static_cast<StorageType*>(base);
2054
2055 // Local references to make debugger stepping easier. If in a debugger,
2056 // you really want to warp ahead and step through the
2057 // InvokeHelper<>::MakeItSo() call below.
2058 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2059 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2060 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2061
2062 typename Bound1UnwrapTraits::ForwardType x1 =
2063 Bound1UnwrapTraits::Unwrap(storage->p1_);
2064 typename Bound2UnwrapTraits::ForwardType x2 =
2065 Bound2UnwrapTraits::Unwrap(storage->p2_);
2066 typename Bound3UnwrapTraits::ForwardType x3 =
2067 Bound3UnwrapTraits::Unwrap(storage->p3_);
2068 return InvokeHelper<StorageType::IsWeakCall::value, R,
2069 typename StorageType::RunnableType,
2070 void(typename Bound1UnwrapTraits::ForwardType,
2071 typename Bound2UnwrapTraits::ForwardType,
2072 typename Bound3UnwrapTraits::ForwardType,
2073 typename CallbackParamTraits<X4>::ForwardType x4)>
2074 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
2075 }
2076 };
2077
2078 // Arity 4 -> 0.
2079 template <typename StorageType, typename R,typename X1, typename X2,
2080 typename X3, typename X4>
2081 struct Invoker<4, StorageType, R(X1, X2, X3, X4)> {
2082 typedef R(RunType)(BindStateBase*);
2083
2084 typedef R(UnboundRunType)();
2085
2086 static R Run(BindStateBase* base) {
2087 StorageType* storage = static_cast<StorageType*>(base);
2088
2089 // Local references to make debugger stepping easier. If in a debugger,
2090 // you really want to warp ahead and step through the
2091 // InvokeHelper<>::MakeItSo() call below.
2092 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2093 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2094 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2095 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2096
2097 typename Bound1UnwrapTraits::ForwardType x1 =
2098 Bound1UnwrapTraits::Unwrap(storage->p1_);
2099 typename Bound2UnwrapTraits::ForwardType x2 =
2100 Bound2UnwrapTraits::Unwrap(storage->p2_);
2101 typename Bound3UnwrapTraits::ForwardType x3 =
2102 Bound3UnwrapTraits::Unwrap(storage->p3_);
2103 typename Bound4UnwrapTraits::ForwardType x4 =
2104 Bound4UnwrapTraits::Unwrap(storage->p4_);
2105 return InvokeHelper<StorageType::IsWeakCall::value, R,
2106 typename StorageType::RunnableType,
2107 void(typename Bound1UnwrapTraits::ForwardType,
2108 typename Bound2UnwrapTraits::ForwardType,
2109 typename Bound3UnwrapTraits::ForwardType,
2110 typename Bound4UnwrapTraits::ForwardType)>
2111 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
2112 }
2113 };
2114
2115 // Arity 5 -> 5.
2116 template <typename StorageType, typename R,typename X1, typename X2,
2117 typename X3, typename X4, typename X5>
2118 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5)> {
2119 typedef R(RunType)(BindStateBase*,
2120 typename CallbackParamTraits<X1>::ForwardType,
2121 typename CallbackParamTraits<X2>::ForwardType,
2122 typename CallbackParamTraits<X3>::ForwardType,
2123 typename CallbackParamTraits<X4>::ForwardType,
2124 typename CallbackParamTraits<X5>::ForwardType);
2125
2126 typedef R(UnboundRunType)(X1, X2, X3, X4, X5);
2127
2128 static R Run(BindStateBase* base,
2129 typename CallbackParamTraits<X1>::ForwardType x1,
2130 typename CallbackParamTraits<X2>::ForwardType x2,
2131 typename CallbackParamTraits<X3>::ForwardType x3,
2132 typename CallbackParamTraits<X4>::ForwardType x4,
2133 typename CallbackParamTraits<X5>::ForwardType x5) {
2134 StorageType* storage = static_cast<StorageType*>(base);
2135
2136 // Local references to make debugger stepping easier. If in a debugger,
2137 // you really want to warp ahead and step through the
2138 // InvokeHelper<>::MakeItSo() call below.
2139
2140 return InvokeHelper<StorageType::IsWeakCall::value, R,
2141 typename StorageType::RunnableType,
2142 void(typename CallbackParamTraits<X1>::ForwardType x1,
2143 typename CallbackParamTraits<X2>::ForwardType x2,
2144 typename CallbackParamTraits<X3>::ForwardType x3,
2145 typename CallbackParamTraits<X4>::ForwardType x4,
2146 typename CallbackParamTraits<X5>::ForwardType x5)>
2147 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
2148 }
2149 };
2150
2151 // Arity 5 -> 4.
2152 template <typename StorageType, typename R,typename X1, typename X2,
2153 typename X3, typename X4, typename X5>
2154 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5)> {
2155 typedef R(RunType)(BindStateBase*,
2156 typename CallbackParamTraits<X2>::ForwardType,
2157 typename CallbackParamTraits<X3>::ForwardType,
2158 typename CallbackParamTraits<X4>::ForwardType,
2159 typename CallbackParamTraits<X5>::ForwardType);
2160
2161 typedef R(UnboundRunType)(X2, X3, X4, X5);
2162
2163 static R Run(BindStateBase* base,
2164 typename CallbackParamTraits<X2>::ForwardType x2,
2165 typename CallbackParamTraits<X3>::ForwardType x3,
2166 typename CallbackParamTraits<X4>::ForwardType x4,
2167 typename CallbackParamTraits<X5>::ForwardType x5) {
2168 StorageType* storage = static_cast<StorageType*>(base);
2169
2170 // Local references to make debugger stepping easier. If in a debugger,
2171 // you really want to warp ahead and step through the
2172 // InvokeHelper<>::MakeItSo() call below.
2173 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2174
2175 typename Bound1UnwrapTraits::ForwardType x1 =
2176 Bound1UnwrapTraits::Unwrap(storage->p1_);
2177 return InvokeHelper<StorageType::IsWeakCall::value, R,
2178 typename StorageType::RunnableType,
2179 void(typename Bound1UnwrapTraits::ForwardType,
2180 typename CallbackParamTraits<X2>::ForwardType x2,
2181 typename CallbackParamTraits<X3>::ForwardType x3,
2182 typename CallbackParamTraits<X4>::ForwardType x4,
2183 typename CallbackParamTraits<X5>::ForwardType x5)>
2184 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
2185 }
2186 };
2187
2188 // Arity 5 -> 3.
2189 template <typename StorageType, typename R,typename X1, typename X2,
2190 typename X3, typename X4, typename X5>
2191 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5)> {
2192 typedef R(RunType)(BindStateBase*,
2193 typename CallbackParamTraits<X3>::ForwardType,
2194 typename CallbackParamTraits<X4>::ForwardType,
2195 typename CallbackParamTraits<X5>::ForwardType);
2196
2197 typedef R(UnboundRunType)(X3, X4, X5);
2198
2199 static R Run(BindStateBase* base,
2200 typename CallbackParamTraits<X3>::ForwardType x3,
2201 typename CallbackParamTraits<X4>::ForwardType x4,
2202 typename CallbackParamTraits<X5>::ForwardType x5) {
2203 StorageType* storage = static_cast<StorageType*>(base);
2204
2205 // Local references to make debugger stepping easier. If in a debugger,
2206 // you really want to warp ahead and step through the
2207 // InvokeHelper<>::MakeItSo() call below.
2208 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2209 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2210
2211 typename Bound1UnwrapTraits::ForwardType x1 =
2212 Bound1UnwrapTraits::Unwrap(storage->p1_);
2213 typename Bound2UnwrapTraits::ForwardType x2 =
2214 Bound2UnwrapTraits::Unwrap(storage->p2_);
2215 return InvokeHelper<StorageType::IsWeakCall::value, R,
2216 typename StorageType::RunnableType,
2217 void(typename Bound1UnwrapTraits::ForwardType,
2218 typename Bound2UnwrapTraits::ForwardType,
2219 typename CallbackParamTraits<X3>::ForwardType x3,
2220 typename CallbackParamTraits<X4>::ForwardType x4,
2221 typename CallbackParamTraits<X5>::ForwardType x5)>
2222 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
2223 }
2224 };
2225
2226 // Arity 5 -> 2.
2227 template <typename StorageType, typename R,typename X1, typename X2,
2228 typename X3, typename X4, typename X5>
2229 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5)> {
2230 typedef R(RunType)(BindStateBase*,
2231 typename CallbackParamTraits<X4>::ForwardType,
2232 typename CallbackParamTraits<X5>::ForwardType);
2233
2234 typedef R(UnboundRunType)(X4, X5);
2235
2236 static R Run(BindStateBase* base,
2237 typename CallbackParamTraits<X4>::ForwardType x4,
2238 typename CallbackParamTraits<X5>::ForwardType x5) {
2239 StorageType* storage = static_cast<StorageType*>(base);
2240
2241 // Local references to make debugger stepping easier. If in a debugger,
2242 // you really want to warp ahead and step through the
2243 // InvokeHelper<>::MakeItSo() call below.
2244 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2245 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2246 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2247
2248 typename Bound1UnwrapTraits::ForwardType x1 =
2249 Bound1UnwrapTraits::Unwrap(storage->p1_);
2250 typename Bound2UnwrapTraits::ForwardType x2 =
2251 Bound2UnwrapTraits::Unwrap(storage->p2_);
2252 typename Bound3UnwrapTraits::ForwardType x3 =
2253 Bound3UnwrapTraits::Unwrap(storage->p3_);
2254 return InvokeHelper<StorageType::IsWeakCall::value, R,
2255 typename StorageType::RunnableType,
2256 void(typename Bound1UnwrapTraits::ForwardType,
2257 typename Bound2UnwrapTraits::ForwardType,
2258 typename Bound3UnwrapTraits::ForwardType,
2259 typename CallbackParamTraits<X4>::ForwardType x4,
2260 typename CallbackParamTraits<X5>::ForwardType x5)>
2261 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
2262 }
2263 };
2264
2265 // Arity 5 -> 1.
2266 template <typename StorageType, typename R,typename X1, typename X2,
2267 typename X3, typename X4, typename X5>
2268 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5)> {
2269 typedef R(RunType)(BindStateBase*,
2270 typename CallbackParamTraits<X5>::ForwardType);
2271
2272 typedef R(UnboundRunType)(X5);
2273
2274 static R Run(BindStateBase* base,
2275 typename CallbackParamTraits<X5>::ForwardType x5) {
2276 StorageType* storage = static_cast<StorageType*>(base);
2277
2278 // Local references to make debugger stepping easier. If in a debugger,
2279 // you really want to warp ahead and step through the
2280 // InvokeHelper<>::MakeItSo() call below.
2281 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2282 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2283 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2284 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2285
2286 typename Bound1UnwrapTraits::ForwardType x1 =
2287 Bound1UnwrapTraits::Unwrap(storage->p1_);
2288 typename Bound2UnwrapTraits::ForwardType x2 =
2289 Bound2UnwrapTraits::Unwrap(storage->p2_);
2290 typename Bound3UnwrapTraits::ForwardType x3 =
2291 Bound3UnwrapTraits::Unwrap(storage->p3_);
2292 typename Bound4UnwrapTraits::ForwardType x4 =
2293 Bound4UnwrapTraits::Unwrap(storage->p4_);
2294 return InvokeHelper<StorageType::IsWeakCall::value, R,
2295 typename StorageType::RunnableType,
2296 void(typename Bound1UnwrapTraits::ForwardType,
2297 typename Bound2UnwrapTraits::ForwardType,
2298 typename Bound3UnwrapTraits::ForwardType,
2299 typename Bound4UnwrapTraits::ForwardType,
2300 typename CallbackParamTraits<X5>::ForwardType x5)>
2301 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
2302 }
2303 };
2304
2305 // Arity 5 -> 0.
2306 template <typename StorageType, typename R,typename X1, typename X2,
2307 typename X3, typename X4, typename X5>
2308 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5)> {
2309 typedef R(RunType)(BindStateBase*);
2310
2311 typedef R(UnboundRunType)();
2312
2313 static R Run(BindStateBase* base) {
2314 StorageType* storage = static_cast<StorageType*>(base);
2315
2316 // Local references to make debugger stepping easier. If in a debugger,
2317 // you really want to warp ahead and step through the
2318 // InvokeHelper<>::MakeItSo() call below.
2319 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2320 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2321 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2322 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2323 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
2324
2325 typename Bound1UnwrapTraits::ForwardType x1 =
2326 Bound1UnwrapTraits::Unwrap(storage->p1_);
2327 typename Bound2UnwrapTraits::ForwardType x2 =
2328 Bound2UnwrapTraits::Unwrap(storage->p2_);
2329 typename Bound3UnwrapTraits::ForwardType x3 =
2330 Bound3UnwrapTraits::Unwrap(storage->p3_);
2331 typename Bound4UnwrapTraits::ForwardType x4 =
2332 Bound4UnwrapTraits::Unwrap(storage->p4_);
2333 typename Bound5UnwrapTraits::ForwardType x5 =
2334 Bound5UnwrapTraits::Unwrap(storage->p5_);
2335 return InvokeHelper<StorageType::IsWeakCall::value, R,
2336 typename StorageType::RunnableType,
2337 void(typename Bound1UnwrapTraits::ForwardType,
2338 typename Bound2UnwrapTraits::ForwardType,
2339 typename Bound3UnwrapTraits::ForwardType,
2340 typename Bound4UnwrapTraits::ForwardType,
2341 typename Bound5UnwrapTraits::ForwardType)>
2342 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
2343 }
2344 };
2345
2346 // Arity 6 -> 6.
2347 template <typename StorageType, typename R,typename X1, typename X2,
2348 typename X3, typename X4, typename X5, typename X6>
2349 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2350 typedef R(RunType)(BindStateBase*,
2351 typename CallbackParamTraits<X1>::ForwardType,
2352 typename CallbackParamTraits<X2>::ForwardType,
2353 typename CallbackParamTraits<X3>::ForwardType,
2354 typename CallbackParamTraits<X4>::ForwardType,
2355 typename CallbackParamTraits<X5>::ForwardType,
2356 typename CallbackParamTraits<X6>::ForwardType);
2357
2358 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6);
2359
2360 static R Run(BindStateBase* base,
2361 typename CallbackParamTraits<X1>::ForwardType x1,
2362 typename CallbackParamTraits<X2>::ForwardType x2,
2363 typename CallbackParamTraits<X3>::ForwardType x3,
2364 typename CallbackParamTraits<X4>::ForwardType x4,
2365 typename CallbackParamTraits<X5>::ForwardType x5,
2366 typename CallbackParamTraits<X6>::ForwardType x6) {
2367 StorageType* storage = static_cast<StorageType*>(base);
2368
2369 // Local references to make debugger stepping easier. If in a debugger,
2370 // you really want to warp ahead and step through the
2371 // InvokeHelper<>::MakeItSo() call below.
2372
2373 return InvokeHelper<StorageType::IsWeakCall::value, R,
2374 typename StorageType::RunnableType,
2375 void(typename CallbackParamTraits<X1>::ForwardType x1,
2376 typename CallbackParamTraits<X2>::ForwardType x2,
2377 typename CallbackParamTraits<X3>::ForwardType x3,
2378 typename CallbackParamTraits<X4>::ForwardType x4,
2379 typename CallbackParamTraits<X5>::ForwardType x5,
2380 typename CallbackParamTraits<X6>::ForwardType x6)>
2381 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2382 }
2383 };
2384
2385 // Arity 6 -> 5.
2386 template <typename StorageType, typename R,typename X1, typename X2,
2387 typename X3, typename X4, typename X5, typename X6>
2388 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2389 typedef R(RunType)(BindStateBase*,
2390 typename CallbackParamTraits<X2>::ForwardType,
2391 typename CallbackParamTraits<X3>::ForwardType,
2392 typename CallbackParamTraits<X4>::ForwardType,
2393 typename CallbackParamTraits<X5>::ForwardType,
2394 typename CallbackParamTraits<X6>::ForwardType);
2395
2396 typedef R(UnboundRunType)(X2, X3, X4, X5, X6);
2397
2398 static R Run(BindStateBase* base,
2399 typename CallbackParamTraits<X2>::ForwardType x2,
2400 typename CallbackParamTraits<X3>::ForwardType x3,
2401 typename CallbackParamTraits<X4>::ForwardType x4,
2402 typename CallbackParamTraits<X5>::ForwardType x5,
2403 typename CallbackParamTraits<X6>::ForwardType x6) {
2404 StorageType* storage = static_cast<StorageType*>(base);
2405
2406 // Local references to make debugger stepping easier. If in a debugger,
2407 // you really want to warp ahead and step through the
2408 // InvokeHelper<>::MakeItSo() call below.
2409 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2410
2411 typename Bound1UnwrapTraits::ForwardType x1 =
2412 Bound1UnwrapTraits::Unwrap(storage->p1_);
2413 return InvokeHelper<StorageType::IsWeakCall::value, R,
2414 typename StorageType::RunnableType,
2415 void(typename Bound1UnwrapTraits::ForwardType,
2416 typename CallbackParamTraits<X2>::ForwardType x2,
2417 typename CallbackParamTraits<X3>::ForwardType x3,
2418 typename CallbackParamTraits<X4>::ForwardType x4,
2419 typename CallbackParamTraits<X5>::ForwardType x5,
2420 typename CallbackParamTraits<X6>::ForwardType x6)>
2421 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2422 }
2423 };
2424
2425 // Arity 6 -> 4.
2426 template <typename StorageType, typename R,typename X1, typename X2,
2427 typename X3, typename X4, typename X5, typename X6>
2428 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2429 typedef R(RunType)(BindStateBase*,
2430 typename CallbackParamTraits<X3>::ForwardType,
2431 typename CallbackParamTraits<X4>::ForwardType,
2432 typename CallbackParamTraits<X5>::ForwardType,
2433 typename CallbackParamTraits<X6>::ForwardType);
2434
2435 typedef R(UnboundRunType)(X3, X4, X5, X6);
2436
2437 static R Run(BindStateBase* base,
2438 typename CallbackParamTraits<X3>::ForwardType x3,
2439 typename CallbackParamTraits<X4>::ForwardType x4,
2440 typename CallbackParamTraits<X5>::ForwardType x5,
2441 typename CallbackParamTraits<X6>::ForwardType x6) {
2442 StorageType* storage = static_cast<StorageType*>(base);
2443
2444 // Local references to make debugger stepping easier. If in a debugger,
2445 // you really want to warp ahead and step through the
2446 // InvokeHelper<>::MakeItSo() call below.
2447 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2448 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2449
2450 typename Bound1UnwrapTraits::ForwardType x1 =
2451 Bound1UnwrapTraits::Unwrap(storage->p1_);
2452 typename Bound2UnwrapTraits::ForwardType x2 =
2453 Bound2UnwrapTraits::Unwrap(storage->p2_);
2454 return InvokeHelper<StorageType::IsWeakCall::value, R,
2455 typename StorageType::RunnableType,
2456 void(typename Bound1UnwrapTraits::ForwardType,
2457 typename Bound2UnwrapTraits::ForwardType,
2458 typename CallbackParamTraits<X3>::ForwardType x3,
2459 typename CallbackParamTraits<X4>::ForwardType x4,
2460 typename CallbackParamTraits<X5>::ForwardType x5,
2461 typename CallbackParamTraits<X6>::ForwardType x6)>
2462 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2463 }
2464 };
2465
2466 // Arity 6 -> 3.
2467 template <typename StorageType, typename R,typename X1, typename X2,
2468 typename X3, typename X4, typename X5, typename X6>
2469 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2470 typedef R(RunType)(BindStateBase*,
2471 typename CallbackParamTraits<X4>::ForwardType,
2472 typename CallbackParamTraits<X5>::ForwardType,
2473 typename CallbackParamTraits<X6>::ForwardType);
2474
2475 typedef R(UnboundRunType)(X4, X5, X6);
2476
2477 static R Run(BindStateBase* base,
2478 typename CallbackParamTraits<X4>::ForwardType x4,
2479 typename CallbackParamTraits<X5>::ForwardType x5,
2480 typename CallbackParamTraits<X6>::ForwardType x6) {
2481 StorageType* storage = static_cast<StorageType*>(base);
2482
2483 // Local references to make debugger stepping easier. If in a debugger,
2484 // you really want to warp ahead and step through the
2485 // InvokeHelper<>::MakeItSo() call below.
2486 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2487 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2488 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2489
2490 typename Bound1UnwrapTraits::ForwardType x1 =
2491 Bound1UnwrapTraits::Unwrap(storage->p1_);
2492 typename Bound2UnwrapTraits::ForwardType x2 =
2493 Bound2UnwrapTraits::Unwrap(storage->p2_);
2494 typename Bound3UnwrapTraits::ForwardType x3 =
2495 Bound3UnwrapTraits::Unwrap(storage->p3_);
2496 return InvokeHelper<StorageType::IsWeakCall::value, R,
2497 typename StorageType::RunnableType,
2498 void(typename Bound1UnwrapTraits::ForwardType,
2499 typename Bound2UnwrapTraits::ForwardType,
2500 typename Bound3UnwrapTraits::ForwardType,
2501 typename CallbackParamTraits<X4>::ForwardType x4,
2502 typename CallbackParamTraits<X5>::ForwardType x5,
2503 typename CallbackParamTraits<X6>::ForwardType x6)>
2504 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2505 }
2506 };
2507
2508 // Arity 6 -> 2.
2509 template <typename StorageType, typename R,typename X1, typename X2,
2510 typename X3, typename X4, typename X5, typename X6>
2511 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2512 typedef R(RunType)(BindStateBase*,
2513 typename CallbackParamTraits<X5>::ForwardType,
2514 typename CallbackParamTraits<X6>::ForwardType);
2515
2516 typedef R(UnboundRunType)(X5, X6);
2517
2518 static R Run(BindStateBase* base,
2519 typename CallbackParamTraits<X5>::ForwardType x5,
2520 typename CallbackParamTraits<X6>::ForwardType x6) {
2521 StorageType* storage = static_cast<StorageType*>(base);
2522
2523 // Local references to make debugger stepping easier. If in a debugger,
2524 // you really want to warp ahead and step through the
2525 // InvokeHelper<>::MakeItSo() call below.
2526 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2527 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2528 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2529 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2530
2531 typename Bound1UnwrapTraits::ForwardType x1 =
2532 Bound1UnwrapTraits::Unwrap(storage->p1_);
2533 typename Bound2UnwrapTraits::ForwardType x2 =
2534 Bound2UnwrapTraits::Unwrap(storage->p2_);
2535 typename Bound3UnwrapTraits::ForwardType x3 =
2536 Bound3UnwrapTraits::Unwrap(storage->p3_);
2537 typename Bound4UnwrapTraits::ForwardType x4 =
2538 Bound4UnwrapTraits::Unwrap(storage->p4_);
2539 return InvokeHelper<StorageType::IsWeakCall::value, R,
2540 typename StorageType::RunnableType,
2541 void(typename Bound1UnwrapTraits::ForwardType,
2542 typename Bound2UnwrapTraits::ForwardType,
2543 typename Bound3UnwrapTraits::ForwardType,
2544 typename Bound4UnwrapTraits::ForwardType,
2545 typename CallbackParamTraits<X5>::ForwardType x5,
2546 typename CallbackParamTraits<X6>::ForwardType x6)>
2547 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2548 }
2549 };
2550
2551 // Arity 6 -> 1.
2552 template <typename StorageType, typename R,typename X1, typename X2,
2553 typename X3, typename X4, typename X5, typename X6>
2554 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2555 typedef R(RunType)(BindStateBase*,
2556 typename CallbackParamTraits<X6>::ForwardType);
2557
2558 typedef R(UnboundRunType)(X6);
2559
2560 static R Run(BindStateBase* base,
2561 typename CallbackParamTraits<X6>::ForwardType x6) {
2562 StorageType* storage = static_cast<StorageType*>(base);
2563
2564 // Local references to make debugger stepping easier. If in a debugger,
2565 // you really want to warp ahead and step through the
2566 // InvokeHelper<>::MakeItSo() call below.
2567 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2568 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2569 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2570 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2571 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
2572
2573 typename Bound1UnwrapTraits::ForwardType x1 =
2574 Bound1UnwrapTraits::Unwrap(storage->p1_);
2575 typename Bound2UnwrapTraits::ForwardType x2 =
2576 Bound2UnwrapTraits::Unwrap(storage->p2_);
2577 typename Bound3UnwrapTraits::ForwardType x3 =
2578 Bound3UnwrapTraits::Unwrap(storage->p3_);
2579 typename Bound4UnwrapTraits::ForwardType x4 =
2580 Bound4UnwrapTraits::Unwrap(storage->p4_);
2581 typename Bound5UnwrapTraits::ForwardType x5 =
2582 Bound5UnwrapTraits::Unwrap(storage->p5_);
2583 return InvokeHelper<StorageType::IsWeakCall::value, R,
2584 typename StorageType::RunnableType,
2585 void(typename Bound1UnwrapTraits::ForwardType,
2586 typename Bound2UnwrapTraits::ForwardType,
2587 typename Bound3UnwrapTraits::ForwardType,
2588 typename Bound4UnwrapTraits::ForwardType,
2589 typename Bound5UnwrapTraits::ForwardType,
2590 typename CallbackParamTraits<X6>::ForwardType x6)>
2591 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2592 }
2593 };
2594
2595 // Arity 6 -> 0.
2596 template <typename StorageType, typename R,typename X1, typename X2,
2597 typename X3, typename X4, typename X5, typename X6>
2598 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6)> {
2599 typedef R(RunType)(BindStateBase*);
2600
2601 typedef R(UnboundRunType)();
2602
2603 static R Run(BindStateBase* base) {
2604 StorageType* storage = static_cast<StorageType*>(base);
2605
2606 // Local references to make debugger stepping easier. If in a debugger,
2607 // you really want to warp ahead and step through the
2608 // InvokeHelper<>::MakeItSo() call below.
2609 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2610 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2611 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2612 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2613 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
2614 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
2615
2616 typename Bound1UnwrapTraits::ForwardType x1 =
2617 Bound1UnwrapTraits::Unwrap(storage->p1_);
2618 typename Bound2UnwrapTraits::ForwardType x2 =
2619 Bound2UnwrapTraits::Unwrap(storage->p2_);
2620 typename Bound3UnwrapTraits::ForwardType x3 =
2621 Bound3UnwrapTraits::Unwrap(storage->p3_);
2622 typename Bound4UnwrapTraits::ForwardType x4 =
2623 Bound4UnwrapTraits::Unwrap(storage->p4_);
2624 typename Bound5UnwrapTraits::ForwardType x5 =
2625 Bound5UnwrapTraits::Unwrap(storage->p5_);
2626 typename Bound6UnwrapTraits::ForwardType x6 =
2627 Bound6UnwrapTraits::Unwrap(storage->p6_);
2628 return InvokeHelper<StorageType::IsWeakCall::value, R,
2629 typename StorageType::RunnableType,
2630 void(typename Bound1UnwrapTraits::ForwardType,
2631 typename Bound2UnwrapTraits::ForwardType,
2632 typename Bound3UnwrapTraits::ForwardType,
2633 typename Bound4UnwrapTraits::ForwardType,
2634 typename Bound5UnwrapTraits::ForwardType,
2635 typename Bound6UnwrapTraits::ForwardType)>
2636 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
2637 }
2638 };
2639
2640 // Arity 7 -> 7.
2641 template <typename StorageType, typename R,typename X1, typename X2,
2642 typename X3, typename X4, typename X5, typename X6, typename X7>
2643 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2644 typedef R(RunType)(BindStateBase*,
2645 typename CallbackParamTraits<X1>::ForwardType,
2646 typename CallbackParamTraits<X2>::ForwardType,
2647 typename CallbackParamTraits<X3>::ForwardType,
2648 typename CallbackParamTraits<X4>::ForwardType,
2649 typename CallbackParamTraits<X5>::ForwardType,
2650 typename CallbackParamTraits<X6>::ForwardType,
2651 typename CallbackParamTraits<X7>::ForwardType);
2652
2653 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6, X7);
2654
2655 static R Run(BindStateBase* base,
2656 typename CallbackParamTraits<X1>::ForwardType x1,
2657 typename CallbackParamTraits<X2>::ForwardType x2,
2658 typename CallbackParamTraits<X3>::ForwardType x3,
2659 typename CallbackParamTraits<X4>::ForwardType x4,
2660 typename CallbackParamTraits<X5>::ForwardType x5,
2661 typename CallbackParamTraits<X6>::ForwardType x6,
2662 typename CallbackParamTraits<X7>::ForwardType x7) {
2663 StorageType* storage = static_cast<StorageType*>(base);
2664
2665 // Local references to make debugger stepping easier. If in a debugger,
2666 // you really want to warp ahead and step through the
2667 // InvokeHelper<>::MakeItSo() call below.
2668
2669 return InvokeHelper<StorageType::IsWeakCall::value, R,
2670 typename StorageType::RunnableType,
2671 void(typename CallbackParamTraits<X1>::ForwardType x1,
2672 typename CallbackParamTraits<X2>::ForwardType x2,
2673 typename CallbackParamTraits<X3>::ForwardType x3,
2674 typename CallbackParamTraits<X4>::ForwardType x4,
2675 typename CallbackParamTraits<X5>::ForwardType x5,
2676 typename CallbackParamTraits<X6>::ForwardType x6,
2677 typename CallbackParamTraits<X7>::ForwardType x7)>
2678 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2679 }
2680 };
2681
2682 // Arity 7 -> 6.
2683 template <typename StorageType, typename R,typename X1, typename X2,
2684 typename X3, typename X4, typename X5, typename X6, typename X7>
2685 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2686 typedef R(RunType)(BindStateBase*,
2687 typename CallbackParamTraits<X2>::ForwardType,
2688 typename CallbackParamTraits<X3>::ForwardType,
2689 typename CallbackParamTraits<X4>::ForwardType,
2690 typename CallbackParamTraits<X5>::ForwardType,
2691 typename CallbackParamTraits<X6>::ForwardType,
2692 typename CallbackParamTraits<X7>::ForwardType);
2693
2694 typedef R(UnboundRunType)(X2, X3, X4, X5, X6, X7);
2695
2696 static R Run(BindStateBase* base,
2697 typename CallbackParamTraits<X2>::ForwardType x2,
2698 typename CallbackParamTraits<X3>::ForwardType x3,
2699 typename CallbackParamTraits<X4>::ForwardType x4,
2700 typename CallbackParamTraits<X5>::ForwardType x5,
2701 typename CallbackParamTraits<X6>::ForwardType x6,
2702 typename CallbackParamTraits<X7>::ForwardType x7) {
2703 StorageType* storage = static_cast<StorageType*>(base);
2704
2705 // Local references to make debugger stepping easier. If in a debugger,
2706 // you really want to warp ahead and step through the
2707 // InvokeHelper<>::MakeItSo() call below.
2708 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2709
2710 typename Bound1UnwrapTraits::ForwardType x1 =
2711 Bound1UnwrapTraits::Unwrap(storage->p1_);
2712 return InvokeHelper<StorageType::IsWeakCall::value, R,
2713 typename StorageType::RunnableType,
2714 void(typename Bound1UnwrapTraits::ForwardType,
2715 typename CallbackParamTraits<X2>::ForwardType x2,
2716 typename CallbackParamTraits<X3>::ForwardType x3,
2717 typename CallbackParamTraits<X4>::ForwardType x4,
2718 typename CallbackParamTraits<X5>::ForwardType x5,
2719 typename CallbackParamTraits<X6>::ForwardType x6,
2720 typename CallbackParamTraits<X7>::ForwardType x7)>
2721 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2722 }
2723 };
2724
2725 // Arity 7 -> 5.
2726 template <typename StorageType, typename R,typename X1, typename X2,
2727 typename X3, typename X4, typename X5, typename X6, typename X7>
2728 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2729 typedef R(RunType)(BindStateBase*,
2730 typename CallbackParamTraits<X3>::ForwardType,
2731 typename CallbackParamTraits<X4>::ForwardType,
2732 typename CallbackParamTraits<X5>::ForwardType,
2733 typename CallbackParamTraits<X6>::ForwardType,
2734 typename CallbackParamTraits<X7>::ForwardType);
2735
2736 typedef R(UnboundRunType)(X3, X4, X5, X6, X7);
2737
2738 static R Run(BindStateBase* base,
2739 typename CallbackParamTraits<X3>::ForwardType x3,
2740 typename CallbackParamTraits<X4>::ForwardType x4,
2741 typename CallbackParamTraits<X5>::ForwardType x5,
2742 typename CallbackParamTraits<X6>::ForwardType x6,
2743 typename CallbackParamTraits<X7>::ForwardType x7) {
2744 StorageType* storage = static_cast<StorageType*>(base);
2745
2746 // Local references to make debugger stepping easier. If in a debugger,
2747 // you really want to warp ahead and step through the
2748 // InvokeHelper<>::MakeItSo() call below.
2749 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2750 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2751
2752 typename Bound1UnwrapTraits::ForwardType x1 =
2753 Bound1UnwrapTraits::Unwrap(storage->p1_);
2754 typename Bound2UnwrapTraits::ForwardType x2 =
2755 Bound2UnwrapTraits::Unwrap(storage->p2_);
2756 return InvokeHelper<StorageType::IsWeakCall::value, R,
2757 typename StorageType::RunnableType,
2758 void(typename Bound1UnwrapTraits::ForwardType,
2759 typename Bound2UnwrapTraits::ForwardType,
2760 typename CallbackParamTraits<X3>::ForwardType x3,
2761 typename CallbackParamTraits<X4>::ForwardType x4,
2762 typename CallbackParamTraits<X5>::ForwardType x5,
2763 typename CallbackParamTraits<X6>::ForwardType x6,
2764 typename CallbackParamTraits<X7>::ForwardType x7)>
2765 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2766 }
2767 };
2768
2769 // Arity 7 -> 4.
2770 template <typename StorageType, typename R,typename X1, typename X2,
2771 typename X3, typename X4, typename X5, typename X6, typename X7>
2772 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2773 typedef R(RunType)(BindStateBase*,
2774 typename CallbackParamTraits<X4>::ForwardType,
2775 typename CallbackParamTraits<X5>::ForwardType,
2776 typename CallbackParamTraits<X6>::ForwardType,
2777 typename CallbackParamTraits<X7>::ForwardType);
2778
2779 typedef R(UnboundRunType)(X4, X5, X6, X7);
2780
2781 static R Run(BindStateBase* base,
2782 typename CallbackParamTraits<X4>::ForwardType x4,
2783 typename CallbackParamTraits<X5>::ForwardType x5,
2784 typename CallbackParamTraits<X6>::ForwardType x6,
2785 typename CallbackParamTraits<X7>::ForwardType x7) {
2786 StorageType* storage = static_cast<StorageType*>(base);
2787
2788 // Local references to make debugger stepping easier. If in a debugger,
2789 // you really want to warp ahead and step through the
2790 // InvokeHelper<>::MakeItSo() call below.
2791 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2792 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2793 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2794
2795 typename Bound1UnwrapTraits::ForwardType x1 =
2796 Bound1UnwrapTraits::Unwrap(storage->p1_);
2797 typename Bound2UnwrapTraits::ForwardType x2 =
2798 Bound2UnwrapTraits::Unwrap(storage->p2_);
2799 typename Bound3UnwrapTraits::ForwardType x3 =
2800 Bound3UnwrapTraits::Unwrap(storage->p3_);
2801 return InvokeHelper<StorageType::IsWeakCall::value, R,
2802 typename StorageType::RunnableType,
2803 void(typename Bound1UnwrapTraits::ForwardType,
2804 typename Bound2UnwrapTraits::ForwardType,
2805 typename Bound3UnwrapTraits::ForwardType,
2806 typename CallbackParamTraits<X4>::ForwardType x4,
2807 typename CallbackParamTraits<X5>::ForwardType x5,
2808 typename CallbackParamTraits<X6>::ForwardType x6,
2809 typename CallbackParamTraits<X7>::ForwardType x7)>
2810 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2811 }
2812 };
2813
2814 // Arity 7 -> 3.
2815 template <typename StorageType, typename R,typename X1, typename X2,
2816 typename X3, typename X4, typename X5, typename X6, typename X7>
2817 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2818 typedef R(RunType)(BindStateBase*,
2819 typename CallbackParamTraits<X5>::ForwardType,
2820 typename CallbackParamTraits<X6>::ForwardType,
2821 typename CallbackParamTraits<X7>::ForwardType);
2822
2823 typedef R(UnboundRunType)(X5, X6, X7);
2824
2825 static R Run(BindStateBase* base,
2826 typename CallbackParamTraits<X5>::ForwardType x5,
2827 typename CallbackParamTraits<X6>::ForwardType x6,
2828 typename CallbackParamTraits<X7>::ForwardType x7) {
2829 StorageType* storage = static_cast<StorageType*>(base);
2830
2831 // Local references to make debugger stepping easier. If in a debugger,
2832 // you really want to warp ahead and step through the
2833 // InvokeHelper<>::MakeItSo() call below.
2834 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2835 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2836 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2837 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2838
2839 typename Bound1UnwrapTraits::ForwardType x1 =
2840 Bound1UnwrapTraits::Unwrap(storage->p1_);
2841 typename Bound2UnwrapTraits::ForwardType x2 =
2842 Bound2UnwrapTraits::Unwrap(storage->p2_);
2843 typename Bound3UnwrapTraits::ForwardType x3 =
2844 Bound3UnwrapTraits::Unwrap(storage->p3_);
2845 typename Bound4UnwrapTraits::ForwardType x4 =
2846 Bound4UnwrapTraits::Unwrap(storage->p4_);
2847 return InvokeHelper<StorageType::IsWeakCall::value, R,
2848 typename StorageType::RunnableType,
2849 void(typename Bound1UnwrapTraits::ForwardType,
2850 typename Bound2UnwrapTraits::ForwardType,
2851 typename Bound3UnwrapTraits::ForwardType,
2852 typename Bound4UnwrapTraits::ForwardType,
2853 typename CallbackParamTraits<X5>::ForwardType x5,
2854 typename CallbackParamTraits<X6>::ForwardType x6,
2855 typename CallbackParamTraits<X7>::ForwardType x7)>
2856 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2857 }
2858 };
2859
2860 // Arity 7 -> 2.
2861 template <typename StorageType, typename R,typename X1, typename X2,
2862 typename X3, typename X4, typename X5, typename X6, typename X7>
2863 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2864 typedef R(RunType)(BindStateBase*,
2865 typename CallbackParamTraits<X6>::ForwardType,
2866 typename CallbackParamTraits<X7>::ForwardType);
2867
2868 typedef R(UnboundRunType)(X6, X7);
2869
2870 static R Run(BindStateBase* base,
2871 typename CallbackParamTraits<X6>::ForwardType x6,
2872 typename CallbackParamTraits<X7>::ForwardType x7) {
2873 StorageType* storage = static_cast<StorageType*>(base);
2874
2875 // Local references to make debugger stepping easier. If in a debugger,
2876 // you really want to warp ahead and step through the
2877 // InvokeHelper<>::MakeItSo() call below.
2878 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2879 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2880 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2881 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2882 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
2883
2884 typename Bound1UnwrapTraits::ForwardType x1 =
2885 Bound1UnwrapTraits::Unwrap(storage->p1_);
2886 typename Bound2UnwrapTraits::ForwardType x2 =
2887 Bound2UnwrapTraits::Unwrap(storage->p2_);
2888 typename Bound3UnwrapTraits::ForwardType x3 =
2889 Bound3UnwrapTraits::Unwrap(storage->p3_);
2890 typename Bound4UnwrapTraits::ForwardType x4 =
2891 Bound4UnwrapTraits::Unwrap(storage->p4_);
2892 typename Bound5UnwrapTraits::ForwardType x5 =
2893 Bound5UnwrapTraits::Unwrap(storage->p5_);
2894 return InvokeHelper<StorageType::IsWeakCall::value, R,
2895 typename StorageType::RunnableType,
2896 void(typename Bound1UnwrapTraits::ForwardType,
2897 typename Bound2UnwrapTraits::ForwardType,
2898 typename Bound3UnwrapTraits::ForwardType,
2899 typename Bound4UnwrapTraits::ForwardType,
2900 typename Bound5UnwrapTraits::ForwardType,
2901 typename CallbackParamTraits<X6>::ForwardType x6,
2902 typename CallbackParamTraits<X7>::ForwardType x7)>
2903 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2904 }
2905 };
2906
2907 // Arity 7 -> 1.
2908 template <typename StorageType, typename R,typename X1, typename X2,
2909 typename X3, typename X4, typename X5, typename X6, typename X7>
2910 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2911 typedef R(RunType)(BindStateBase*,
2912 typename CallbackParamTraits<X7>::ForwardType);
2913
2914 typedef R(UnboundRunType)(X7);
2915
2916 static R Run(BindStateBase* base,
2917 typename CallbackParamTraits<X7>::ForwardType x7) {
2918 StorageType* storage = static_cast<StorageType*>(base);
2919
2920 // Local references to make debugger stepping easier. If in a debugger,
2921 // you really want to warp ahead and step through the
2922 // InvokeHelper<>::MakeItSo() call below.
2923 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2924 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2925 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2926 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2927 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
2928 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
2929
2930 typename Bound1UnwrapTraits::ForwardType x1 =
2931 Bound1UnwrapTraits::Unwrap(storage->p1_);
2932 typename Bound2UnwrapTraits::ForwardType x2 =
2933 Bound2UnwrapTraits::Unwrap(storage->p2_);
2934 typename Bound3UnwrapTraits::ForwardType x3 =
2935 Bound3UnwrapTraits::Unwrap(storage->p3_);
2936 typename Bound4UnwrapTraits::ForwardType x4 =
2937 Bound4UnwrapTraits::Unwrap(storage->p4_);
2938 typename Bound5UnwrapTraits::ForwardType x5 =
2939 Bound5UnwrapTraits::Unwrap(storage->p5_);
2940 typename Bound6UnwrapTraits::ForwardType x6 =
2941 Bound6UnwrapTraits::Unwrap(storage->p6_);
2942 return InvokeHelper<StorageType::IsWeakCall::value, R,
2943 typename StorageType::RunnableType,
2944 void(typename Bound1UnwrapTraits::ForwardType,
2945 typename Bound2UnwrapTraits::ForwardType,
2946 typename Bound3UnwrapTraits::ForwardType,
2947 typename Bound4UnwrapTraits::ForwardType,
2948 typename Bound5UnwrapTraits::ForwardType,
2949 typename Bound6UnwrapTraits::ForwardType,
2950 typename CallbackParamTraits<X7>::ForwardType x7)>
2951 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
2952 }
2953 };
2954
2955 // Arity 7 -> 0.
2956 template <typename StorageType, typename R,typename X1, typename X2,
2957 typename X3, typename X4, typename X5, typename X6, typename X7>
2958 struct Invoker<7, StorageType, R(X1, X2, X3, X4, X5, X6, X7)> {
2959 typedef R(RunType)(BindStateBase*);
2960
2961 typedef R(UnboundRunType)();
2962
2963 static R Run(BindStateBase* base) {
2964 StorageType* storage = static_cast<StorageType*>(base);
2965
2966 // Local references to make debugger stepping easier. If in a debugger,
2967 // you really want to warp ahead and step through the
2968 // InvokeHelper<>::MakeItSo() call below.
2969 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
2970 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
2971 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
2972 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
2973 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
2974 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
2975 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
2976
2977 typename Bound1UnwrapTraits::ForwardType x1 =
2978 Bound1UnwrapTraits::Unwrap(storage->p1_);
2979 typename Bound2UnwrapTraits::ForwardType x2 =
2980 Bound2UnwrapTraits::Unwrap(storage->p2_);
2981 typename Bound3UnwrapTraits::ForwardType x3 =
2982 Bound3UnwrapTraits::Unwrap(storage->p3_);
2983 typename Bound4UnwrapTraits::ForwardType x4 =
2984 Bound4UnwrapTraits::Unwrap(storage->p4_);
2985 typename Bound5UnwrapTraits::ForwardType x5 =
2986 Bound5UnwrapTraits::Unwrap(storage->p5_);
2987 typename Bound6UnwrapTraits::ForwardType x6 =
2988 Bound6UnwrapTraits::Unwrap(storage->p6_);
2989 typename Bound7UnwrapTraits::ForwardType x7 =
2990 Bound7UnwrapTraits::Unwrap(storage->p7_);
2991 return InvokeHelper<StorageType::IsWeakCall::value, R,
2992 typename StorageType::RunnableType,
2993 void(typename Bound1UnwrapTraits::ForwardType,
2994 typename Bound2UnwrapTraits::ForwardType,
2995 typename Bound3UnwrapTraits::ForwardType,
2996 typename Bound4UnwrapTraits::ForwardType,
2997 typename Bound5UnwrapTraits::ForwardType,
2998 typename Bound6UnwrapTraits::ForwardType,
2999 typename Bound7UnwrapTraits::ForwardType)>
3000 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7);
3001 }
3002 };
3003
3004 // Arity 8 -> 8.
3005 template <typename StorageType, typename R,typename X1, typename X2,
3006 typename X3, typename X4, typename X5, typename X6, typename X7,
3007 typename X8>
3008 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3009 typedef R(RunType)(BindStateBase*,
3010 typename CallbackParamTraits<X1>::ForwardType,
3011 typename CallbackParamTraits<X2>::ForwardType,
3012 typename CallbackParamTraits<X3>::ForwardType,
3013 typename CallbackParamTraits<X4>::ForwardType,
3014 typename CallbackParamTraits<X5>::ForwardType,
3015 typename CallbackParamTraits<X6>::ForwardType,
3016 typename CallbackParamTraits<X7>::ForwardType,
3017 typename CallbackParamTraits<X8>::ForwardType);
3018
3019 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6, X7, X8);
3020
3021 static R Run(BindStateBase* base,
3022 typename CallbackParamTraits<X1>::ForwardType x1,
3023 typename CallbackParamTraits<X2>::ForwardType x2,
3024 typename CallbackParamTraits<X3>::ForwardType x3,
3025 typename CallbackParamTraits<X4>::ForwardType x4,
3026 typename CallbackParamTraits<X5>::ForwardType x5,
3027 typename CallbackParamTraits<X6>::ForwardType x6,
3028 typename CallbackParamTraits<X7>::ForwardType x7,
3029 typename CallbackParamTraits<X8>::ForwardType x8) {
3030 StorageType* storage = static_cast<StorageType*>(base);
3031
3032 // Local references to make debugger stepping easier. If in a debugger,
3033 // you really want to warp ahead and step through the
3034 // InvokeHelper<>::MakeItSo() call below.
3035
3036 return InvokeHelper<StorageType::IsWeakCall::value, R,
3037 typename StorageType::RunnableType,
3038 void(typename CallbackParamTraits<X1>::ForwardType x1,
3039 typename CallbackParamTraits<X2>::ForwardType x2,
3040 typename CallbackParamTraits<X3>::ForwardType x3,
3041 typename CallbackParamTraits<X4>::ForwardType x4,
3042 typename CallbackParamTraits<X5>::ForwardType x5,
3043 typename CallbackParamTraits<X6>::ForwardType x6,
3044 typename CallbackParamTraits<X7>::ForwardType x7,
3045 typename CallbackParamTraits<X8>::ForwardType x8)>
3046 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3047 }
3048 };
3049
3050 // Arity 8 -> 7.
3051 template <typename StorageType, typename R,typename X1, typename X2,
3052 typename X3, typename X4, typename X5, typename X6, typename X7,
3053 typename X8>
3054 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3055 typedef R(RunType)(BindStateBase*,
3056 typename CallbackParamTraits<X2>::ForwardType,
3057 typename CallbackParamTraits<X3>::ForwardType,
3058 typename CallbackParamTraits<X4>::ForwardType,
3059 typename CallbackParamTraits<X5>::ForwardType,
3060 typename CallbackParamTraits<X6>::ForwardType,
3061 typename CallbackParamTraits<X7>::ForwardType,
3062 typename CallbackParamTraits<X8>::ForwardType);
3063
3064 typedef R(UnboundRunType)(X2, X3, X4, X5, X6, X7, X8);
3065
3066 static R Run(BindStateBase* base,
3067 typename CallbackParamTraits<X2>::ForwardType x2,
3068 typename CallbackParamTraits<X3>::ForwardType x3,
3069 typename CallbackParamTraits<X4>::ForwardType x4,
3070 typename CallbackParamTraits<X5>::ForwardType x5,
3071 typename CallbackParamTraits<X6>::ForwardType x6,
3072 typename CallbackParamTraits<X7>::ForwardType x7,
3073 typename CallbackParamTraits<X8>::ForwardType x8) {
3074 StorageType* storage = static_cast<StorageType*>(base);
3075
3076 // Local references to make debugger stepping easier. If in a debugger,
3077 // you really want to warp ahead and step through the
3078 // InvokeHelper<>::MakeItSo() call below.
3079 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3080
3081 typename Bound1UnwrapTraits::ForwardType x1 =
3082 Bound1UnwrapTraits::Unwrap(storage->p1_);
3083 return InvokeHelper<StorageType::IsWeakCall::value, R,
3084 typename StorageType::RunnableType,
3085 void(typename Bound1UnwrapTraits::ForwardType,
3086 typename CallbackParamTraits<X2>::ForwardType x2,
3087 typename CallbackParamTraits<X3>::ForwardType x3,
3088 typename CallbackParamTraits<X4>::ForwardType x4,
3089 typename CallbackParamTraits<X5>::ForwardType x5,
3090 typename CallbackParamTraits<X6>::ForwardType x6,
3091 typename CallbackParamTraits<X7>::ForwardType x7,
3092 typename CallbackParamTraits<X8>::ForwardType x8)>
3093 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3094 }
3095 };
3096
3097 // Arity 8 -> 6.
3098 template <typename StorageType, typename R,typename X1, typename X2,
3099 typename X3, typename X4, typename X5, typename X6, typename X7,
3100 typename X8>
3101 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3102 typedef R(RunType)(BindStateBase*,
3103 typename CallbackParamTraits<X3>::ForwardType,
3104 typename CallbackParamTraits<X4>::ForwardType,
3105 typename CallbackParamTraits<X5>::ForwardType,
3106 typename CallbackParamTraits<X6>::ForwardType,
3107 typename CallbackParamTraits<X7>::ForwardType,
3108 typename CallbackParamTraits<X8>::ForwardType);
3109
3110 typedef R(UnboundRunType)(X3, X4, X5, X6, X7, X8);
3111
3112 static R Run(BindStateBase* base,
3113 typename CallbackParamTraits<X3>::ForwardType x3,
3114 typename CallbackParamTraits<X4>::ForwardType x4,
3115 typename CallbackParamTraits<X5>::ForwardType x5,
3116 typename CallbackParamTraits<X6>::ForwardType x6,
3117 typename CallbackParamTraits<X7>::ForwardType x7,
3118 typename CallbackParamTraits<X8>::ForwardType x8) {
3119 StorageType* storage = static_cast<StorageType*>(base);
3120
3121 // Local references to make debugger stepping easier. If in a debugger,
3122 // you really want to warp ahead and step through the
3123 // InvokeHelper<>::MakeItSo() call below.
3124 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3125 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3126
3127 typename Bound1UnwrapTraits::ForwardType x1 =
3128 Bound1UnwrapTraits::Unwrap(storage->p1_);
3129 typename Bound2UnwrapTraits::ForwardType x2 =
3130 Bound2UnwrapTraits::Unwrap(storage->p2_);
3131 return InvokeHelper<StorageType::IsWeakCall::value, R,
3132 typename StorageType::RunnableType,
3133 void(typename Bound1UnwrapTraits::ForwardType,
3134 typename Bound2UnwrapTraits::ForwardType,
3135 typename CallbackParamTraits<X3>::ForwardType x3,
3136 typename CallbackParamTraits<X4>::ForwardType x4,
3137 typename CallbackParamTraits<X5>::ForwardType x5,
3138 typename CallbackParamTraits<X6>::ForwardType x6,
3139 typename CallbackParamTraits<X7>::ForwardType x7,
3140 typename CallbackParamTraits<X8>::ForwardType x8)>
3141 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3142 }
3143 };
3144
3145 // Arity 8 -> 5.
3146 template <typename StorageType, typename R,typename X1, typename X2,
3147 typename X3, typename X4, typename X5, typename X6, typename X7,
3148 typename X8>
3149 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3150 typedef R(RunType)(BindStateBase*,
3151 typename CallbackParamTraits<X4>::ForwardType,
3152 typename CallbackParamTraits<X5>::ForwardType,
3153 typename CallbackParamTraits<X6>::ForwardType,
3154 typename CallbackParamTraits<X7>::ForwardType,
3155 typename CallbackParamTraits<X8>::ForwardType);
3156
3157 typedef R(UnboundRunType)(X4, X5, X6, X7, X8);
3158
3159 static R Run(BindStateBase* base,
3160 typename CallbackParamTraits<X4>::ForwardType x4,
3161 typename CallbackParamTraits<X5>::ForwardType x5,
3162 typename CallbackParamTraits<X6>::ForwardType x6,
3163 typename CallbackParamTraits<X7>::ForwardType x7,
3164 typename CallbackParamTraits<X8>::ForwardType x8) {
3165 StorageType* storage = static_cast<StorageType*>(base);
3166
3167 // Local references to make debugger stepping easier. If in a debugger,
3168 // you really want to warp ahead and step through the
3169 // InvokeHelper<>::MakeItSo() call below.
3170 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3171 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3172 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3173
3174 typename Bound1UnwrapTraits::ForwardType x1 =
3175 Bound1UnwrapTraits::Unwrap(storage->p1_);
3176 typename Bound2UnwrapTraits::ForwardType x2 =
3177 Bound2UnwrapTraits::Unwrap(storage->p2_);
3178 typename Bound3UnwrapTraits::ForwardType x3 =
3179 Bound3UnwrapTraits::Unwrap(storage->p3_);
3180 return InvokeHelper<StorageType::IsWeakCall::value, R,
3181 typename StorageType::RunnableType,
3182 void(typename Bound1UnwrapTraits::ForwardType,
3183 typename Bound2UnwrapTraits::ForwardType,
3184 typename Bound3UnwrapTraits::ForwardType,
3185 typename CallbackParamTraits<X4>::ForwardType x4,
3186 typename CallbackParamTraits<X5>::ForwardType x5,
3187 typename CallbackParamTraits<X6>::ForwardType x6,
3188 typename CallbackParamTraits<X7>::ForwardType x7,
3189 typename CallbackParamTraits<X8>::ForwardType x8)>
3190 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3191 }
3192 };
3193
3194 // Arity 8 -> 4.
3195 template <typename StorageType, typename R,typename X1, typename X2,
3196 typename X3, typename X4, typename X5, typename X6, typename X7,
3197 typename X8>
3198 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3199 typedef R(RunType)(BindStateBase*,
3200 typename CallbackParamTraits<X5>::ForwardType,
3201 typename CallbackParamTraits<X6>::ForwardType,
3202 typename CallbackParamTraits<X7>::ForwardType,
3203 typename CallbackParamTraits<X8>::ForwardType);
3204
3205 typedef R(UnboundRunType)(X5, X6, X7, X8);
3206
3207 static R Run(BindStateBase* base,
3208 typename CallbackParamTraits<X5>::ForwardType x5,
3209 typename CallbackParamTraits<X6>::ForwardType x6,
3210 typename CallbackParamTraits<X7>::ForwardType x7,
3211 typename CallbackParamTraits<X8>::ForwardType x8) {
3212 StorageType* storage = static_cast<StorageType*>(base);
3213
3214 // Local references to make debugger stepping easier. If in a debugger,
3215 // you really want to warp ahead and step through the
3216 // InvokeHelper<>::MakeItSo() call below.
3217 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3218 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3219 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3220 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3221
3222 typename Bound1UnwrapTraits::ForwardType x1 =
3223 Bound1UnwrapTraits::Unwrap(storage->p1_);
3224 typename Bound2UnwrapTraits::ForwardType x2 =
3225 Bound2UnwrapTraits::Unwrap(storage->p2_);
3226 typename Bound3UnwrapTraits::ForwardType x3 =
3227 Bound3UnwrapTraits::Unwrap(storage->p3_);
3228 typename Bound4UnwrapTraits::ForwardType x4 =
3229 Bound4UnwrapTraits::Unwrap(storage->p4_);
3230 return InvokeHelper<StorageType::IsWeakCall::value, R,
3231 typename StorageType::RunnableType,
3232 void(typename Bound1UnwrapTraits::ForwardType,
3233 typename Bound2UnwrapTraits::ForwardType,
3234 typename Bound3UnwrapTraits::ForwardType,
3235 typename Bound4UnwrapTraits::ForwardType,
3236 typename CallbackParamTraits<X5>::ForwardType x5,
3237 typename CallbackParamTraits<X6>::ForwardType x6,
3238 typename CallbackParamTraits<X7>::ForwardType x7,
3239 typename CallbackParamTraits<X8>::ForwardType x8)>
3240 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3241 }
3242 };
3243
3244 // Arity 8 -> 3.
3245 template <typename StorageType, typename R,typename X1, typename X2,
3246 typename X3, typename X4, typename X5, typename X6, typename X7,
3247 typename X8>
3248 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3249 typedef R(RunType)(BindStateBase*,
3250 typename CallbackParamTraits<X6>::ForwardType,
3251 typename CallbackParamTraits<X7>::ForwardType,
3252 typename CallbackParamTraits<X8>::ForwardType);
3253
3254 typedef R(UnboundRunType)(X6, X7, X8);
3255
3256 static R Run(BindStateBase* base,
3257 typename CallbackParamTraits<X6>::ForwardType x6,
3258 typename CallbackParamTraits<X7>::ForwardType x7,
3259 typename CallbackParamTraits<X8>::ForwardType x8) {
3260 StorageType* storage = static_cast<StorageType*>(base);
3261
3262 // Local references to make debugger stepping easier. If in a debugger,
3263 // you really want to warp ahead and step through the
3264 // InvokeHelper<>::MakeItSo() call below.
3265 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3266 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3267 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3268 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3269 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3270
3271 typename Bound1UnwrapTraits::ForwardType x1 =
3272 Bound1UnwrapTraits::Unwrap(storage->p1_);
3273 typename Bound2UnwrapTraits::ForwardType x2 =
3274 Bound2UnwrapTraits::Unwrap(storage->p2_);
3275 typename Bound3UnwrapTraits::ForwardType x3 =
3276 Bound3UnwrapTraits::Unwrap(storage->p3_);
3277 typename Bound4UnwrapTraits::ForwardType x4 =
3278 Bound4UnwrapTraits::Unwrap(storage->p4_);
3279 typename Bound5UnwrapTraits::ForwardType x5 =
3280 Bound5UnwrapTraits::Unwrap(storage->p5_);
3281 return InvokeHelper<StorageType::IsWeakCall::value, R,
3282 typename StorageType::RunnableType,
3283 void(typename Bound1UnwrapTraits::ForwardType,
3284 typename Bound2UnwrapTraits::ForwardType,
3285 typename Bound3UnwrapTraits::ForwardType,
3286 typename Bound4UnwrapTraits::ForwardType,
3287 typename Bound5UnwrapTraits::ForwardType,
3288 typename CallbackParamTraits<X6>::ForwardType x6,
3289 typename CallbackParamTraits<X7>::ForwardType x7,
3290 typename CallbackParamTraits<X8>::ForwardType x8)>
3291 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3292 }
3293 };
3294
3295 // Arity 8 -> 2.
3296 template <typename StorageType, typename R,typename X1, typename X2,
3297 typename X3, typename X4, typename X5, typename X6, typename X7,
3298 typename X8>
3299 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3300 typedef R(RunType)(BindStateBase*,
3301 typename CallbackParamTraits<X7>::ForwardType,
3302 typename CallbackParamTraits<X8>::ForwardType);
3303
3304 typedef R(UnboundRunType)(X7, X8);
3305
3306 static R Run(BindStateBase* base,
3307 typename CallbackParamTraits<X7>::ForwardType x7,
3308 typename CallbackParamTraits<X8>::ForwardType x8) {
3309 StorageType* storage = static_cast<StorageType*>(base);
3310
3311 // Local references to make debugger stepping easier. If in a debugger,
3312 // you really want to warp ahead and step through the
3313 // InvokeHelper<>::MakeItSo() call below.
3314 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3315 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3316 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3317 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3318 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3319 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3320
3321 typename Bound1UnwrapTraits::ForwardType x1 =
3322 Bound1UnwrapTraits::Unwrap(storage->p1_);
3323 typename Bound2UnwrapTraits::ForwardType x2 =
3324 Bound2UnwrapTraits::Unwrap(storage->p2_);
3325 typename Bound3UnwrapTraits::ForwardType x3 =
3326 Bound3UnwrapTraits::Unwrap(storage->p3_);
3327 typename Bound4UnwrapTraits::ForwardType x4 =
3328 Bound4UnwrapTraits::Unwrap(storage->p4_);
3329 typename Bound5UnwrapTraits::ForwardType x5 =
3330 Bound5UnwrapTraits::Unwrap(storage->p5_);
3331 typename Bound6UnwrapTraits::ForwardType x6 =
3332 Bound6UnwrapTraits::Unwrap(storage->p6_);
3333 return InvokeHelper<StorageType::IsWeakCall::value, R,
3334 typename StorageType::RunnableType,
3335 void(typename Bound1UnwrapTraits::ForwardType,
3336 typename Bound2UnwrapTraits::ForwardType,
3337 typename Bound3UnwrapTraits::ForwardType,
3338 typename Bound4UnwrapTraits::ForwardType,
3339 typename Bound5UnwrapTraits::ForwardType,
3340 typename Bound6UnwrapTraits::ForwardType,
3341 typename CallbackParamTraits<X7>::ForwardType x7,
3342 typename CallbackParamTraits<X8>::ForwardType x8)>
3343 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3344 }
3345 };
3346
3347 // Arity 8 -> 1.
3348 template <typename StorageType, typename R,typename X1, typename X2,
3349 typename X3, typename X4, typename X5, typename X6, typename X7,
3350 typename X8>
3351 struct Invoker<7, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3352 typedef R(RunType)(BindStateBase*,
3353 typename CallbackParamTraits<X8>::ForwardType);
3354
3355 typedef R(UnboundRunType)(X8);
3356
3357 static R Run(BindStateBase* base,
3358 typename CallbackParamTraits<X8>::ForwardType x8) {
3359 StorageType* storage = static_cast<StorageType*>(base);
3360
3361 // Local references to make debugger stepping easier. If in a debugger,
3362 // you really want to warp ahead and step through the
3363 // InvokeHelper<>::MakeItSo() call below.
3364 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3365 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3366 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3367 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3368 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3369 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3370 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
3371
3372 typename Bound1UnwrapTraits::ForwardType x1 =
3373 Bound1UnwrapTraits::Unwrap(storage->p1_);
3374 typename Bound2UnwrapTraits::ForwardType x2 =
3375 Bound2UnwrapTraits::Unwrap(storage->p2_);
3376 typename Bound3UnwrapTraits::ForwardType x3 =
3377 Bound3UnwrapTraits::Unwrap(storage->p3_);
3378 typename Bound4UnwrapTraits::ForwardType x4 =
3379 Bound4UnwrapTraits::Unwrap(storage->p4_);
3380 typename Bound5UnwrapTraits::ForwardType x5 =
3381 Bound5UnwrapTraits::Unwrap(storage->p5_);
3382 typename Bound6UnwrapTraits::ForwardType x6 =
3383 Bound6UnwrapTraits::Unwrap(storage->p6_);
3384 typename Bound7UnwrapTraits::ForwardType x7 =
3385 Bound7UnwrapTraits::Unwrap(storage->p7_);
3386 return InvokeHelper<StorageType::IsWeakCall::value, R,
3387 typename StorageType::RunnableType,
3388 void(typename Bound1UnwrapTraits::ForwardType,
3389 typename Bound2UnwrapTraits::ForwardType,
3390 typename Bound3UnwrapTraits::ForwardType,
3391 typename Bound4UnwrapTraits::ForwardType,
3392 typename Bound5UnwrapTraits::ForwardType,
3393 typename Bound6UnwrapTraits::ForwardType,
3394 typename Bound7UnwrapTraits::ForwardType,
3395 typename CallbackParamTraits<X8>::ForwardType x8)>
3396 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3397 }
3398 };
3399
3400 // Arity 8 -> 0.
3401 template <typename StorageType, typename R,typename X1, typename X2,
3402 typename X3, typename X4, typename X5, typename X6, typename X7,
3403 typename X8>
3404 struct Invoker<8, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8)> {
3405 typedef R(RunType)(BindStateBase*);
3406
3407 typedef R(UnboundRunType)();
3408
3409 static R Run(BindStateBase* base) {
3410 StorageType* storage = static_cast<StorageType*>(base);
3411
3412 // Local references to make debugger stepping easier. If in a debugger,
3413 // you really want to warp ahead and step through the
3414 // InvokeHelper<>::MakeItSo() call below.
3415 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3416 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3417 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3418 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3419 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3420 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3421 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
3422 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
3423
3424 typename Bound1UnwrapTraits::ForwardType x1 =
3425 Bound1UnwrapTraits::Unwrap(storage->p1_);
3426 typename Bound2UnwrapTraits::ForwardType x2 =
3427 Bound2UnwrapTraits::Unwrap(storage->p2_);
3428 typename Bound3UnwrapTraits::ForwardType x3 =
3429 Bound3UnwrapTraits::Unwrap(storage->p3_);
3430 typename Bound4UnwrapTraits::ForwardType x4 =
3431 Bound4UnwrapTraits::Unwrap(storage->p4_);
3432 typename Bound5UnwrapTraits::ForwardType x5 =
3433 Bound5UnwrapTraits::Unwrap(storage->p5_);
3434 typename Bound6UnwrapTraits::ForwardType x6 =
3435 Bound6UnwrapTraits::Unwrap(storage->p6_);
3436 typename Bound7UnwrapTraits::ForwardType x7 =
3437 Bound7UnwrapTraits::Unwrap(storage->p7_);
3438 typename Bound8UnwrapTraits::ForwardType x8 =
3439 Bound8UnwrapTraits::Unwrap(storage->p8_);
3440 return InvokeHelper<StorageType::IsWeakCall::value, R,
3441 typename StorageType::RunnableType,
3442 void(typename Bound1UnwrapTraits::ForwardType,
3443 typename Bound2UnwrapTraits::ForwardType,
3444 typename Bound3UnwrapTraits::ForwardType,
3445 typename Bound4UnwrapTraits::ForwardType,
3446 typename Bound5UnwrapTraits::ForwardType,
3447 typename Bound6UnwrapTraits::ForwardType,
3448 typename Bound7UnwrapTraits::ForwardType,
3449 typename Bound8UnwrapTraits::ForwardType)>
3450 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8);
3451 }
3452 };
3453
3454 // Arity 9 -> 9.
3455 template <typename StorageType, typename R,typename X1, typename X2,
3456 typename X3, typename X4, typename X5, typename X6, typename X7,
3457 typename X8, typename X9>
3458 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3459 typedef R(RunType)(BindStateBase*,
3460 typename CallbackParamTraits<X1>::ForwardType,
3461 typename CallbackParamTraits<X2>::ForwardType,
3462 typename CallbackParamTraits<X3>::ForwardType,
3463 typename CallbackParamTraits<X4>::ForwardType,
3464 typename CallbackParamTraits<X5>::ForwardType,
3465 typename CallbackParamTraits<X6>::ForwardType,
3466 typename CallbackParamTraits<X7>::ForwardType,
3467 typename CallbackParamTraits<X8>::ForwardType,
3468 typename CallbackParamTraits<X9>::ForwardType);
3469
3470 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6, X7, X8, X9);
3471
3472 static R Run(BindStateBase* base,
3473 typename CallbackParamTraits<X1>::ForwardType x1,
3474 typename CallbackParamTraits<X2>::ForwardType x2,
3475 typename CallbackParamTraits<X3>::ForwardType x3,
3476 typename CallbackParamTraits<X4>::ForwardType x4,
3477 typename CallbackParamTraits<X5>::ForwardType x5,
3478 typename CallbackParamTraits<X6>::ForwardType x6,
3479 typename CallbackParamTraits<X7>::ForwardType x7,
3480 typename CallbackParamTraits<X8>::ForwardType x8,
3481 typename CallbackParamTraits<X9>::ForwardType x9) {
3482 StorageType* storage = static_cast<StorageType*>(base);
3483
3484 // Local references to make debugger stepping easier. If in a debugger,
3485 // you really want to warp ahead and step through the
3486 // InvokeHelper<>::MakeItSo() call below.
3487
3488 return InvokeHelper<StorageType::IsWeakCall::value, R,
3489 typename StorageType::RunnableType,
3490 void(typename CallbackParamTraits<X1>::ForwardType x1,
3491 typename CallbackParamTraits<X2>::ForwardType x2,
3492 typename CallbackParamTraits<X3>::ForwardType x3,
3493 typename CallbackParamTraits<X4>::ForwardType x4,
3494 typename CallbackParamTraits<X5>::ForwardType x5,
3495 typename CallbackParamTraits<X6>::ForwardType x6,
3496 typename CallbackParamTraits<X7>::ForwardType x7,
3497 typename CallbackParamTraits<X8>::ForwardType x8,
3498 typename CallbackParamTraits<X9>::ForwardType x9)>
3499 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3500 x9);
3501 }
3502 };
3503
3504 // Arity 9 -> 8.
3505 template <typename StorageType, typename R,typename X1, typename X2,
3506 typename X3, typename X4, typename X5, typename X6, typename X7,
3507 typename X8, typename X9>
3508 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3509 typedef R(RunType)(BindStateBase*,
3510 typename CallbackParamTraits<X2>::ForwardType,
3511 typename CallbackParamTraits<X3>::ForwardType,
3512 typename CallbackParamTraits<X4>::ForwardType,
3513 typename CallbackParamTraits<X5>::ForwardType,
3514 typename CallbackParamTraits<X6>::ForwardType,
3515 typename CallbackParamTraits<X7>::ForwardType,
3516 typename CallbackParamTraits<X8>::ForwardType,
3517 typename CallbackParamTraits<X9>::ForwardType);
3518
3519 typedef R(UnboundRunType)(X2, X3, X4, X5, X6, X7, X8, X9);
3520
3521 static R Run(BindStateBase* base,
3522 typename CallbackParamTraits<X2>::ForwardType x2,
3523 typename CallbackParamTraits<X3>::ForwardType x3,
3524 typename CallbackParamTraits<X4>::ForwardType x4,
3525 typename CallbackParamTraits<X5>::ForwardType x5,
3526 typename CallbackParamTraits<X6>::ForwardType x6,
3527 typename CallbackParamTraits<X7>::ForwardType x7,
3528 typename CallbackParamTraits<X8>::ForwardType x8,
3529 typename CallbackParamTraits<X9>::ForwardType x9) {
3530 StorageType* storage = static_cast<StorageType*>(base);
3531
3532 // Local references to make debugger stepping easier. If in a debugger,
3533 // you really want to warp ahead and step through the
3534 // InvokeHelper<>::MakeItSo() call below.
3535 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3536
3537 typename Bound1UnwrapTraits::ForwardType x1 =
3538 Bound1UnwrapTraits::Unwrap(storage->p1_);
3539 return InvokeHelper<StorageType::IsWeakCall::value, R,
3540 typename StorageType::RunnableType,
3541 void(typename Bound1UnwrapTraits::ForwardType,
3542 typename CallbackParamTraits<X2>::ForwardType x2,
3543 typename CallbackParamTraits<X3>::ForwardType x3,
3544 typename CallbackParamTraits<X4>::ForwardType x4,
3545 typename CallbackParamTraits<X5>::ForwardType x5,
3546 typename CallbackParamTraits<X6>::ForwardType x6,
3547 typename CallbackParamTraits<X7>::ForwardType x7,
3548 typename CallbackParamTraits<X8>::ForwardType x8,
3549 typename CallbackParamTraits<X9>::ForwardType x9)>
3550 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3551 x9);
3552 }
3553 };
3554
3555 // Arity 9 -> 7.
3556 template <typename StorageType, typename R,typename X1, typename X2,
3557 typename X3, typename X4, typename X5, typename X6, typename X7,
3558 typename X8, typename X9>
3559 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3560 typedef R(RunType)(BindStateBase*,
3561 typename CallbackParamTraits<X3>::ForwardType,
3562 typename CallbackParamTraits<X4>::ForwardType,
3563 typename CallbackParamTraits<X5>::ForwardType,
3564 typename CallbackParamTraits<X6>::ForwardType,
3565 typename CallbackParamTraits<X7>::ForwardType,
3566 typename CallbackParamTraits<X8>::ForwardType,
3567 typename CallbackParamTraits<X9>::ForwardType);
3568
3569 typedef R(UnboundRunType)(X3, X4, X5, X6, X7, X8, X9);
3570
3571 static R Run(BindStateBase* base,
3572 typename CallbackParamTraits<X3>::ForwardType x3,
3573 typename CallbackParamTraits<X4>::ForwardType x4,
3574 typename CallbackParamTraits<X5>::ForwardType x5,
3575 typename CallbackParamTraits<X6>::ForwardType x6,
3576 typename CallbackParamTraits<X7>::ForwardType x7,
3577 typename CallbackParamTraits<X8>::ForwardType x8,
3578 typename CallbackParamTraits<X9>::ForwardType x9) {
3579 StorageType* storage = static_cast<StorageType*>(base);
3580
3581 // Local references to make debugger stepping easier. If in a debugger,
3582 // you really want to warp ahead and step through the
3583 // InvokeHelper<>::MakeItSo() call below.
3584 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3585 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3586
3587 typename Bound1UnwrapTraits::ForwardType x1 =
3588 Bound1UnwrapTraits::Unwrap(storage->p1_);
3589 typename Bound2UnwrapTraits::ForwardType x2 =
3590 Bound2UnwrapTraits::Unwrap(storage->p2_);
3591 return InvokeHelper<StorageType::IsWeakCall::value, R,
3592 typename StorageType::RunnableType,
3593 void(typename Bound1UnwrapTraits::ForwardType,
3594 typename Bound2UnwrapTraits::ForwardType,
3595 typename CallbackParamTraits<X3>::ForwardType x3,
3596 typename CallbackParamTraits<X4>::ForwardType x4,
3597 typename CallbackParamTraits<X5>::ForwardType x5,
3598 typename CallbackParamTraits<X6>::ForwardType x6,
3599 typename CallbackParamTraits<X7>::ForwardType x7,
3600 typename CallbackParamTraits<X8>::ForwardType x8,
3601 typename CallbackParamTraits<X9>::ForwardType x9)>
3602 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3603 x9);
3604 }
3605 };
3606
3607 // Arity 9 -> 6.
3608 template <typename StorageType, typename R,typename X1, typename X2,
3609 typename X3, typename X4, typename X5, typename X6, typename X7,
3610 typename X8, typename X9>
3611 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3612 typedef R(RunType)(BindStateBase*,
3613 typename CallbackParamTraits<X4>::ForwardType,
3614 typename CallbackParamTraits<X5>::ForwardType,
3615 typename CallbackParamTraits<X6>::ForwardType,
3616 typename CallbackParamTraits<X7>::ForwardType,
3617 typename CallbackParamTraits<X8>::ForwardType,
3618 typename CallbackParamTraits<X9>::ForwardType);
3619
3620 typedef R(UnboundRunType)(X4, X5, X6, X7, X8, X9);
3621
3622 static R Run(BindStateBase* base,
3623 typename CallbackParamTraits<X4>::ForwardType x4,
3624 typename CallbackParamTraits<X5>::ForwardType x5,
3625 typename CallbackParamTraits<X6>::ForwardType x6,
3626 typename CallbackParamTraits<X7>::ForwardType x7,
3627 typename CallbackParamTraits<X8>::ForwardType x8,
3628 typename CallbackParamTraits<X9>::ForwardType x9) {
3629 StorageType* storage = static_cast<StorageType*>(base);
3630
3631 // Local references to make debugger stepping easier. If in a debugger,
3632 // you really want to warp ahead and step through the
3633 // InvokeHelper<>::MakeItSo() call below.
3634 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3635 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3636 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3637
3638 typename Bound1UnwrapTraits::ForwardType x1 =
3639 Bound1UnwrapTraits::Unwrap(storage->p1_);
3640 typename Bound2UnwrapTraits::ForwardType x2 =
3641 Bound2UnwrapTraits::Unwrap(storage->p2_);
3642 typename Bound3UnwrapTraits::ForwardType x3 =
3643 Bound3UnwrapTraits::Unwrap(storage->p3_);
3644 return InvokeHelper<StorageType::IsWeakCall::value, R,
3645 typename StorageType::RunnableType,
3646 void(typename Bound1UnwrapTraits::ForwardType,
3647 typename Bound2UnwrapTraits::ForwardType,
3648 typename Bound3UnwrapTraits::ForwardType,
3649 typename CallbackParamTraits<X4>::ForwardType x4,
3650 typename CallbackParamTraits<X5>::ForwardType x5,
3651 typename CallbackParamTraits<X6>::ForwardType x6,
3652 typename CallbackParamTraits<X7>::ForwardType x7,
3653 typename CallbackParamTraits<X8>::ForwardType x8,
3654 typename CallbackParamTraits<X9>::ForwardType x9)>
3655 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3656 x9);
3657 }
3658 };
3659
3660 // Arity 9 -> 5.
3661 template <typename StorageType, typename R,typename X1, typename X2,
3662 typename X3, typename X4, typename X5, typename X6, typename X7,
3663 typename X8, typename X9>
3664 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3665 typedef R(RunType)(BindStateBase*,
3666 typename CallbackParamTraits<X5>::ForwardType,
3667 typename CallbackParamTraits<X6>::ForwardType,
3668 typename CallbackParamTraits<X7>::ForwardType,
3669 typename CallbackParamTraits<X8>::ForwardType,
3670 typename CallbackParamTraits<X9>::ForwardType);
3671
3672 typedef R(UnboundRunType)(X5, X6, X7, X8, X9);
3673
3674 static R Run(BindStateBase* base,
3675 typename CallbackParamTraits<X5>::ForwardType x5,
3676 typename CallbackParamTraits<X6>::ForwardType x6,
3677 typename CallbackParamTraits<X7>::ForwardType x7,
3678 typename CallbackParamTraits<X8>::ForwardType x8,
3679 typename CallbackParamTraits<X9>::ForwardType x9) {
3680 StorageType* storage = static_cast<StorageType*>(base);
3681
3682 // Local references to make debugger stepping easier. If in a debugger,
3683 // you really want to warp ahead and step through the
3684 // InvokeHelper<>::MakeItSo() call below.
3685 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3686 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3687 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3688 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3689
3690 typename Bound1UnwrapTraits::ForwardType x1 =
3691 Bound1UnwrapTraits::Unwrap(storage->p1_);
3692 typename Bound2UnwrapTraits::ForwardType x2 =
3693 Bound2UnwrapTraits::Unwrap(storage->p2_);
3694 typename Bound3UnwrapTraits::ForwardType x3 =
3695 Bound3UnwrapTraits::Unwrap(storage->p3_);
3696 typename Bound4UnwrapTraits::ForwardType x4 =
3697 Bound4UnwrapTraits::Unwrap(storage->p4_);
3698 return InvokeHelper<StorageType::IsWeakCall::value, R,
3699 typename StorageType::RunnableType,
3700 void(typename Bound1UnwrapTraits::ForwardType,
3701 typename Bound2UnwrapTraits::ForwardType,
3702 typename Bound3UnwrapTraits::ForwardType,
3703 typename Bound4UnwrapTraits::ForwardType,
3704 typename CallbackParamTraits<X5>::ForwardType x5,
3705 typename CallbackParamTraits<X6>::ForwardType x6,
3706 typename CallbackParamTraits<X7>::ForwardType x7,
3707 typename CallbackParamTraits<X8>::ForwardType x8,
3708 typename CallbackParamTraits<X9>::ForwardType x9)>
3709 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3710 x9);
3711 }
3712 };
3713
3714 // Arity 9 -> 4.
3715 template <typename StorageType, typename R,typename X1, typename X2,
3716 typename X3, typename X4, typename X5, typename X6, typename X7,
3717 typename X8, typename X9>
3718 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3719 typedef R(RunType)(BindStateBase*,
3720 typename CallbackParamTraits<X6>::ForwardType,
3721 typename CallbackParamTraits<X7>::ForwardType,
3722 typename CallbackParamTraits<X8>::ForwardType,
3723 typename CallbackParamTraits<X9>::ForwardType);
3724
3725 typedef R(UnboundRunType)(X6, X7, X8, X9);
3726
3727 static R Run(BindStateBase* base,
3728 typename CallbackParamTraits<X6>::ForwardType x6,
3729 typename CallbackParamTraits<X7>::ForwardType x7,
3730 typename CallbackParamTraits<X8>::ForwardType x8,
3731 typename CallbackParamTraits<X9>::ForwardType x9) {
3732 StorageType* storage = static_cast<StorageType*>(base);
3733
3734 // Local references to make debugger stepping easier. If in a debugger,
3735 // you really want to warp ahead and step through the
3736 // InvokeHelper<>::MakeItSo() call below.
3737 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3738 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3739 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3740 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3741 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3742
3743 typename Bound1UnwrapTraits::ForwardType x1 =
3744 Bound1UnwrapTraits::Unwrap(storage->p1_);
3745 typename Bound2UnwrapTraits::ForwardType x2 =
3746 Bound2UnwrapTraits::Unwrap(storage->p2_);
3747 typename Bound3UnwrapTraits::ForwardType x3 =
3748 Bound3UnwrapTraits::Unwrap(storage->p3_);
3749 typename Bound4UnwrapTraits::ForwardType x4 =
3750 Bound4UnwrapTraits::Unwrap(storage->p4_);
3751 typename Bound5UnwrapTraits::ForwardType x5 =
3752 Bound5UnwrapTraits::Unwrap(storage->p5_);
3753 return InvokeHelper<StorageType::IsWeakCall::value, R,
3754 typename StorageType::RunnableType,
3755 void(typename Bound1UnwrapTraits::ForwardType,
3756 typename Bound2UnwrapTraits::ForwardType,
3757 typename Bound3UnwrapTraits::ForwardType,
3758 typename Bound4UnwrapTraits::ForwardType,
3759 typename Bound5UnwrapTraits::ForwardType,
3760 typename CallbackParamTraits<X6>::ForwardType x6,
3761 typename CallbackParamTraits<X7>::ForwardType x7,
3762 typename CallbackParamTraits<X8>::ForwardType x8,
3763 typename CallbackParamTraits<X9>::ForwardType x9)>
3764 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3765 x9);
3766 }
3767 };
3768
3769 // Arity 9 -> 3.
3770 template <typename StorageType, typename R,typename X1, typename X2,
3771 typename X3, typename X4, typename X5, typename X6, typename X7,
3772 typename X8, typename X9>
3773 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3774 typedef R(RunType)(BindStateBase*,
3775 typename CallbackParamTraits<X7>::ForwardType,
3776 typename CallbackParamTraits<X8>::ForwardType,
3777 typename CallbackParamTraits<X9>::ForwardType);
3778
3779 typedef R(UnboundRunType)(X7, X8, X9);
3780
3781 static R Run(BindStateBase* base,
3782 typename CallbackParamTraits<X7>::ForwardType x7,
3783 typename CallbackParamTraits<X8>::ForwardType x8,
3784 typename CallbackParamTraits<X9>::ForwardType x9) {
3785 StorageType* storage = static_cast<StorageType*>(base);
3786
3787 // Local references to make debugger stepping easier. If in a debugger,
3788 // you really want to warp ahead and step through the
3789 // InvokeHelper<>::MakeItSo() call below.
3790 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3791 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3792 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3793 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3794 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3795 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3796
3797 typename Bound1UnwrapTraits::ForwardType x1 =
3798 Bound1UnwrapTraits::Unwrap(storage->p1_);
3799 typename Bound2UnwrapTraits::ForwardType x2 =
3800 Bound2UnwrapTraits::Unwrap(storage->p2_);
3801 typename Bound3UnwrapTraits::ForwardType x3 =
3802 Bound3UnwrapTraits::Unwrap(storage->p3_);
3803 typename Bound4UnwrapTraits::ForwardType x4 =
3804 Bound4UnwrapTraits::Unwrap(storage->p4_);
3805 typename Bound5UnwrapTraits::ForwardType x5 =
3806 Bound5UnwrapTraits::Unwrap(storage->p5_);
3807 typename Bound6UnwrapTraits::ForwardType x6 =
3808 Bound6UnwrapTraits::Unwrap(storage->p6_);
3809 return InvokeHelper<StorageType::IsWeakCall::value, R,
3810 typename StorageType::RunnableType,
3811 void(typename Bound1UnwrapTraits::ForwardType,
3812 typename Bound2UnwrapTraits::ForwardType,
3813 typename Bound3UnwrapTraits::ForwardType,
3814 typename Bound4UnwrapTraits::ForwardType,
3815 typename Bound5UnwrapTraits::ForwardType,
3816 typename Bound6UnwrapTraits::ForwardType,
3817 typename CallbackParamTraits<X7>::ForwardType x7,
3818 typename CallbackParamTraits<X8>::ForwardType x8,
3819 typename CallbackParamTraits<X9>::ForwardType x9)>
3820 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3821 x9);
3822 }
3823 };
3824
3825 // Arity 9 -> 2.
3826 template <typename StorageType, typename R,typename X1, typename X2,
3827 typename X3, typename X4, typename X5, typename X6, typename X7,
3828 typename X8, typename X9>
3829 struct Invoker<7, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3830 typedef R(RunType)(BindStateBase*,
3831 typename CallbackParamTraits<X8>::ForwardType,
3832 typename CallbackParamTraits<X9>::ForwardType);
3833
3834 typedef R(UnboundRunType)(X8, X9);
3835
3836 static R Run(BindStateBase* base,
3837 typename CallbackParamTraits<X8>::ForwardType x8,
3838 typename CallbackParamTraits<X9>::ForwardType x9) {
3839 StorageType* storage = static_cast<StorageType*>(base);
3840
3841 // Local references to make debugger stepping easier. If in a debugger,
3842 // you really want to warp ahead and step through the
3843 // InvokeHelper<>::MakeItSo() call below.
3844 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3845 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3846 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3847 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3848 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3849 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3850 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
3851
3852 typename Bound1UnwrapTraits::ForwardType x1 =
3853 Bound1UnwrapTraits::Unwrap(storage->p1_);
3854 typename Bound2UnwrapTraits::ForwardType x2 =
3855 Bound2UnwrapTraits::Unwrap(storage->p2_);
3856 typename Bound3UnwrapTraits::ForwardType x3 =
3857 Bound3UnwrapTraits::Unwrap(storage->p3_);
3858 typename Bound4UnwrapTraits::ForwardType x4 =
3859 Bound4UnwrapTraits::Unwrap(storage->p4_);
3860 typename Bound5UnwrapTraits::ForwardType x5 =
3861 Bound5UnwrapTraits::Unwrap(storage->p5_);
3862 typename Bound6UnwrapTraits::ForwardType x6 =
3863 Bound6UnwrapTraits::Unwrap(storage->p6_);
3864 typename Bound7UnwrapTraits::ForwardType x7 =
3865 Bound7UnwrapTraits::Unwrap(storage->p7_);
3866 return InvokeHelper<StorageType::IsWeakCall::value, R,
3867 typename StorageType::RunnableType,
3868 void(typename Bound1UnwrapTraits::ForwardType,
3869 typename Bound2UnwrapTraits::ForwardType,
3870 typename Bound3UnwrapTraits::ForwardType,
3871 typename Bound4UnwrapTraits::ForwardType,
3872 typename Bound5UnwrapTraits::ForwardType,
3873 typename Bound6UnwrapTraits::ForwardType,
3874 typename Bound7UnwrapTraits::ForwardType,
3875 typename CallbackParamTraits<X8>::ForwardType x8,
3876 typename CallbackParamTraits<X9>::ForwardType x9)>
3877 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3878 x9);
3879 }
3880 };
3881
3882 // Arity 9 -> 1.
3883 template <typename StorageType, typename R,typename X1, typename X2,
3884 typename X3, typename X4, typename X5, typename X6, typename X7,
3885 typename X8, typename X9>
3886 struct Invoker<8, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3887 typedef R(RunType)(BindStateBase*,
3888 typename CallbackParamTraits<X9>::ForwardType);
3889
3890 typedef R(UnboundRunType)(X9);
3891
3892 static R Run(BindStateBase* base,
3893 typename CallbackParamTraits<X9>::ForwardType x9) {
3894 StorageType* storage = static_cast<StorageType*>(base);
3895
3896 // Local references to make debugger stepping easier. If in a debugger,
3897 // you really want to warp ahead and step through the
3898 // InvokeHelper<>::MakeItSo() call below.
3899 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3900 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3901 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3902 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3903 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3904 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3905 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
3906 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
3907
3908 typename Bound1UnwrapTraits::ForwardType x1 =
3909 Bound1UnwrapTraits::Unwrap(storage->p1_);
3910 typename Bound2UnwrapTraits::ForwardType x2 =
3911 Bound2UnwrapTraits::Unwrap(storage->p2_);
3912 typename Bound3UnwrapTraits::ForwardType x3 =
3913 Bound3UnwrapTraits::Unwrap(storage->p3_);
3914 typename Bound4UnwrapTraits::ForwardType x4 =
3915 Bound4UnwrapTraits::Unwrap(storage->p4_);
3916 typename Bound5UnwrapTraits::ForwardType x5 =
3917 Bound5UnwrapTraits::Unwrap(storage->p5_);
3918 typename Bound6UnwrapTraits::ForwardType x6 =
3919 Bound6UnwrapTraits::Unwrap(storage->p6_);
3920 typename Bound7UnwrapTraits::ForwardType x7 =
3921 Bound7UnwrapTraits::Unwrap(storage->p7_);
3922 typename Bound8UnwrapTraits::ForwardType x8 =
3923 Bound8UnwrapTraits::Unwrap(storage->p8_);
3924 return InvokeHelper<StorageType::IsWeakCall::value, R,
3925 typename StorageType::RunnableType,
3926 void(typename Bound1UnwrapTraits::ForwardType,
3927 typename Bound2UnwrapTraits::ForwardType,
3928 typename Bound3UnwrapTraits::ForwardType,
3929 typename Bound4UnwrapTraits::ForwardType,
3930 typename Bound5UnwrapTraits::ForwardType,
3931 typename Bound6UnwrapTraits::ForwardType,
3932 typename Bound7UnwrapTraits::ForwardType,
3933 typename Bound8UnwrapTraits::ForwardType,
3934 typename CallbackParamTraits<X9>::ForwardType x9)>
3935 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3936 x9);
3937 }
3938 };
3939
3940 // Arity 9 -> 0.
3941 template <typename StorageType, typename R,typename X1, typename X2,
3942 typename X3, typename X4, typename X5, typename X6, typename X7,
3943 typename X8, typename X9>
3944 struct Invoker<9, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9)> {
3945 typedef R(RunType)(BindStateBase*);
3946
3947 typedef R(UnboundRunType)();
3948 996
3949 static R Run(BindStateBase* base) { 997 static R Run(BindStateBase* base) {
3950 StorageType* storage = static_cast<StorageType*>(base); 998 StorageType* storage = static_cast<StorageType*>(base);
3951 999
3952 // Local references to make debugger stepping easier. If in a debugger, 1000 // Local references to make debugger stepping easier. If in a debugger,
3953 // you really want to warp ahead and step through the 1001 // you really want to warp ahead and step through the
3954 // InvokeHelper<>::MakeItSo() call below. 1002 // InvokeHelper<>::MakeItSo() call below.
3955 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1003 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
3956 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
3957 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
3958 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
3959 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
3960 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
3961 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
3962 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
3963 typedef typename StorageType::Bound9UnwrapTraits Bound9UnwrapTraits;
3964 1004
3965 typename Bound1UnwrapTraits::ForwardType x1 = 1005 typename Bound1UnwrapTraits::ForwardType x1 =
3966 Bound1UnwrapTraits::Unwrap(storage->p1_); 1006 Bound1UnwrapTraits::Unwrap(storage->p1_);
3967 typename Bound2UnwrapTraits::ForwardType x2 =
3968 Bound2UnwrapTraits::Unwrap(storage->p2_);
3969 typename Bound3UnwrapTraits::ForwardType x3 =
3970 Bound3UnwrapTraits::Unwrap(storage->p3_);
3971 typename Bound4UnwrapTraits::ForwardType x4 =
3972 Bound4UnwrapTraits::Unwrap(storage->p4_);
3973 typename Bound5UnwrapTraits::ForwardType x5 =
3974 Bound5UnwrapTraits::Unwrap(storage->p5_);
3975 typename Bound6UnwrapTraits::ForwardType x6 =
3976 Bound6UnwrapTraits::Unwrap(storage->p6_);
3977 typename Bound7UnwrapTraits::ForwardType x7 =
3978 Bound7UnwrapTraits::Unwrap(storage->p7_);
3979 typename Bound8UnwrapTraits::ForwardType x8 =
3980 Bound8UnwrapTraits::Unwrap(storage->p8_);
3981 typename Bound9UnwrapTraits::ForwardType x9 =
3982 Bound9UnwrapTraits::Unwrap(storage->p9_);
3983 return InvokeHelper<StorageType::IsWeakCall::value, R, 1007 return InvokeHelper<StorageType::IsWeakCall::value, R,
3984 typename StorageType::RunnableType, 1008 typename StorageType::RunnableType,
3985 void(typename Bound1UnwrapTraits::ForwardType, 1009 void(typename Bound1UnwrapTraits::ForwardType)>
3986 typename Bound2UnwrapTraits::ForwardType, 1010 ::MakeItSo(storage->runnable_, x1);
3987 typename Bound3UnwrapTraits::ForwardType,
3988 typename Bound4UnwrapTraits::ForwardType,
3989 typename Bound5UnwrapTraits::ForwardType,
3990 typename Bound6UnwrapTraits::ForwardType,
3991 typename Bound7UnwrapTraits::ForwardType,
3992 typename Bound8UnwrapTraits::ForwardType,
3993 typename Bound9UnwrapTraits::ForwardType)>
3994 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
3995 x9);
3996 } 1011 }
3997 }; 1012 };
3998 1013
3999 // Arity 10 -> 10. 1014 // Arity 2 -> 2.
4000 template <typename StorageType, typename R,typename X1, typename X2, 1015 template <typename StorageType, typename R,typename X1, typename X2>
4001 typename X3, typename X4, typename X5, typename X6, typename X7, 1016 struct Invoker<0, StorageType, R(X1, X2)> {
4002 typename X8, typename X9, typename X10>
4003 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4004 typedef R(RunType)(BindStateBase*, 1017 typedef R(RunType)(BindStateBase*,
4005 typename CallbackParamTraits<X1>::ForwardType, 1018 typename CallbackParamTraits<X1>::ForwardType,
4006 typename CallbackParamTraits<X2>::ForwardType, 1019 typename CallbackParamTraits<X2>::ForwardType);
4007 typename CallbackParamTraits<X3>::ForwardType,
4008 typename CallbackParamTraits<X4>::ForwardType,
4009 typename CallbackParamTraits<X5>::ForwardType,
4010 typename CallbackParamTraits<X6>::ForwardType,
4011 typename CallbackParamTraits<X7>::ForwardType,
4012 typename CallbackParamTraits<X8>::ForwardType,
4013 typename CallbackParamTraits<X9>::ForwardType,
4014 typename CallbackParamTraits<X10>::ForwardType);
4015 1020
4016 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10); 1021 typedef R(UnboundRunType)(X1, X2);
4017 1022
4018 static R Run(BindStateBase* base, 1023 static R Run(BindStateBase* base,
4019 typename CallbackParamTraits<X1>::ForwardType x1, 1024 typename CallbackParamTraits<X1>::ForwardType x1,
4020 typename CallbackParamTraits<X2>::ForwardType x2, 1025 typename CallbackParamTraits<X2>::ForwardType x2) {
4021 typename CallbackParamTraits<X3>::ForwardType x3,
4022 typename CallbackParamTraits<X4>::ForwardType x4,
4023 typename CallbackParamTraits<X5>::ForwardType x5,
4024 typename CallbackParamTraits<X6>::ForwardType x6,
4025 typename CallbackParamTraits<X7>::ForwardType x7,
4026 typename CallbackParamTraits<X8>::ForwardType x8,
4027 typename CallbackParamTraits<X9>::ForwardType x9,
4028 typename CallbackParamTraits<X10>::ForwardType x10) {
4029 StorageType* storage = static_cast<StorageType*>(base); 1026 StorageType* storage = static_cast<StorageType*>(base);
4030 1027
4031 // Local references to make debugger stepping easier. If in a debugger, 1028 // Local references to make debugger stepping easier. If in a debugger,
4032 // you really want to warp ahead and step through the 1029 // you really want to warp ahead and step through the
4033 // InvokeHelper<>::MakeItSo() call below. 1030 // InvokeHelper<>::MakeItSo() call below.
4034 1031
4035 return InvokeHelper<StorageType::IsWeakCall::value, R, 1032 return InvokeHelper<StorageType::IsWeakCall::value, R,
4036 typename StorageType::RunnableType, 1033 typename StorageType::RunnableType,
4037 void(typename CallbackParamTraits<X1>::ForwardType x1, 1034 void(typename CallbackParamTraits<X1>::ForwardType x1,
4038 typename CallbackParamTraits<X2>::ForwardType x2, 1035 typename CallbackParamTraits<X2>::ForwardType x2)>
4039 typename CallbackParamTraits<X3>::ForwardType x3, 1036 ::MakeItSo(storage->runnable_, x1, x2);
4040 typename CallbackParamTraits<X4>::ForwardType x4,
4041 typename CallbackParamTraits<X5>::ForwardType x5,
4042 typename CallbackParamTraits<X6>::ForwardType x6,
4043 typename CallbackParamTraits<X7>::ForwardType x7,
4044 typename CallbackParamTraits<X8>::ForwardType x8,
4045 typename CallbackParamTraits<X9>::ForwardType x9,
4046 typename CallbackParamTraits<X10>::ForwardType x10)>
4047 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4048 x9, x10);
4049 } 1037 }
4050 }; 1038 };
4051 1039
4052 // Arity 10 -> 9. 1040 // Arity 2 -> 1.
4053 template <typename StorageType, typename R,typename X1, typename X2, 1041 template <typename StorageType, typename R,typename X1, typename X2>
4054 typename X3, typename X4, typename X5, typename X6, typename X7, 1042 struct Invoker<1, StorageType, R(X1, X2)> {
4055 typename X8, typename X9, typename X10>
4056 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4057 typedef R(RunType)(BindStateBase*, 1043 typedef R(RunType)(BindStateBase*,
4058 typename CallbackParamTraits<X2>::ForwardType, 1044 typename CallbackParamTraits<X2>::ForwardType);
4059 typename CallbackParamTraits<X3>::ForwardType,
4060 typename CallbackParamTraits<X4>::ForwardType,
4061 typename CallbackParamTraits<X5>::ForwardType,
4062 typename CallbackParamTraits<X6>::ForwardType,
4063 typename CallbackParamTraits<X7>::ForwardType,
4064 typename CallbackParamTraits<X8>::ForwardType,
4065 typename CallbackParamTraits<X9>::ForwardType,
4066 typename CallbackParamTraits<X10>::ForwardType);
4067 1045
4068 typedef R(UnboundRunType)(X2, X3, X4, X5, X6, X7, X8, X9, X10); 1046 typedef R(UnboundRunType)(X2);
4069 1047
4070 static R Run(BindStateBase* base, 1048 static R Run(BindStateBase* base,
4071 typename CallbackParamTraits<X2>::ForwardType x2, 1049 typename CallbackParamTraits<X2>::ForwardType x2) {
4072 typename CallbackParamTraits<X3>::ForwardType x3,
4073 typename CallbackParamTraits<X4>::ForwardType x4,
4074 typename CallbackParamTraits<X5>::ForwardType x5,
4075 typename CallbackParamTraits<X6>::ForwardType x6,
4076 typename CallbackParamTraits<X7>::ForwardType x7,
4077 typename CallbackParamTraits<X8>::ForwardType x8,
4078 typename CallbackParamTraits<X9>::ForwardType x9,
4079 typename CallbackParamTraits<X10>::ForwardType x10) {
4080 StorageType* storage = static_cast<StorageType*>(base); 1050 StorageType* storage = static_cast<StorageType*>(base);
4081 1051
4082 // Local references to make debugger stepping easier. If in a debugger, 1052 // Local references to make debugger stepping easier. If in a debugger,
4083 // you really want to warp ahead and step through the 1053 // you really want to warp ahead and step through the
4084 // InvokeHelper<>::MakeItSo() call below. 1054 // InvokeHelper<>::MakeItSo() call below.
4085 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1055 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4086 1056
4087 typename Bound1UnwrapTraits::ForwardType x1 = 1057 typename Bound1UnwrapTraits::ForwardType x1 =
4088 Bound1UnwrapTraits::Unwrap(storage->p1_); 1058 Bound1UnwrapTraits::Unwrap(storage->p1_);
4089 return InvokeHelper<StorageType::IsWeakCall::value, R, 1059 return InvokeHelper<StorageType::IsWeakCall::value, R,
4090 typename StorageType::RunnableType, 1060 typename StorageType::RunnableType,
4091 void(typename Bound1UnwrapTraits::ForwardType, 1061 void(typename Bound1UnwrapTraits::ForwardType,
4092 typename CallbackParamTraits<X2>::ForwardType x2, 1062 typename CallbackParamTraits<X2>::ForwardType x2)>
4093 typename CallbackParamTraits<X3>::ForwardType x3, 1063 ::MakeItSo(storage->runnable_, x1, x2);
4094 typename CallbackParamTraits<X4>::ForwardType x4,
4095 typename CallbackParamTraits<X5>::ForwardType x5,
4096 typename CallbackParamTraits<X6>::ForwardType x6,
4097 typename CallbackParamTraits<X7>::ForwardType x7,
4098 typename CallbackParamTraits<X8>::ForwardType x8,
4099 typename CallbackParamTraits<X9>::ForwardType x9,
4100 typename CallbackParamTraits<X10>::ForwardType x10)>
4101 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4102 x9, x10);
4103 } 1064 }
4104 }; 1065 };
4105 1066
4106 // Arity 10 -> 8. 1067 // Arity 2 -> 0.
4107 template <typename StorageType, typename R,typename X1, typename X2, 1068 template <typename StorageType, typename R,typename X1, typename X2>
4108 typename X3, typename X4, typename X5, typename X6, typename X7, 1069 struct Invoker<2, StorageType, R(X1, X2)> {
4109 typename X8, typename X9, typename X10> 1070 typedef R(RunType)(BindStateBase*);
4110 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4111 typedef R(RunType)(BindStateBase*,
4112 typename CallbackParamTraits<X3>::ForwardType,
4113 typename CallbackParamTraits<X4>::ForwardType,
4114 typename CallbackParamTraits<X5>::ForwardType,
4115 typename CallbackParamTraits<X6>::ForwardType,
4116 typename CallbackParamTraits<X7>::ForwardType,
4117 typename CallbackParamTraits<X8>::ForwardType,
4118 typename CallbackParamTraits<X9>::ForwardType,
4119 typename CallbackParamTraits<X10>::ForwardType);
4120 1071
4121 typedef R(UnboundRunType)(X3, X4, X5, X6, X7, X8, X9, X10); 1072 typedef R(UnboundRunType)();
4122 1073
4123 static R Run(BindStateBase* base, 1074 static R Run(BindStateBase* base) {
4124 typename CallbackParamTraits<X3>::ForwardType x3,
4125 typename CallbackParamTraits<X4>::ForwardType x4,
4126 typename CallbackParamTraits<X5>::ForwardType x5,
4127 typename CallbackParamTraits<X6>::ForwardType x6,
4128 typename CallbackParamTraits<X7>::ForwardType x7,
4129 typename CallbackParamTraits<X8>::ForwardType x8,
4130 typename CallbackParamTraits<X9>::ForwardType x9,
4131 typename CallbackParamTraits<X10>::ForwardType x10) {
4132 StorageType* storage = static_cast<StorageType*>(base); 1075 StorageType* storage = static_cast<StorageType*>(base);
4133 1076
4134 // Local references to make debugger stepping easier. If in a debugger, 1077 // Local references to make debugger stepping easier. If in a debugger,
4135 // you really want to warp ahead and step through the 1078 // you really want to warp ahead and step through the
4136 // InvokeHelper<>::MakeItSo() call below. 1079 // InvokeHelper<>::MakeItSo() call below.
4137 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1080 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4138 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1081 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4139 1082
4140 typename Bound1UnwrapTraits::ForwardType x1 = 1083 typename Bound1UnwrapTraits::ForwardType x1 =
4141 Bound1UnwrapTraits::Unwrap(storage->p1_); 1084 Bound1UnwrapTraits::Unwrap(storage->p1_);
4142 typename Bound2UnwrapTraits::ForwardType x2 = 1085 typename Bound2UnwrapTraits::ForwardType x2 =
4143 Bound2UnwrapTraits::Unwrap(storage->p2_); 1086 Bound2UnwrapTraits::Unwrap(storage->p2_);
4144 return InvokeHelper<StorageType::IsWeakCall::value, R, 1087 return InvokeHelper<StorageType::IsWeakCall::value, R,
4145 typename StorageType::RunnableType, 1088 typename StorageType::RunnableType,
4146 void(typename Bound1UnwrapTraits::ForwardType, 1089 void(typename Bound1UnwrapTraits::ForwardType,
4147 typename Bound2UnwrapTraits::ForwardType, 1090 typename Bound2UnwrapTraits::ForwardType)>
4148 typename CallbackParamTraits<X3>::ForwardType x3, 1091 ::MakeItSo(storage->runnable_, x1, x2);
4149 typename CallbackParamTraits<X4>::ForwardType x4,
4150 typename CallbackParamTraits<X5>::ForwardType x5,
4151 typename CallbackParamTraits<X6>::ForwardType x6,
4152 typename CallbackParamTraits<X7>::ForwardType x7,
4153 typename CallbackParamTraits<X8>::ForwardType x8,
4154 typename CallbackParamTraits<X9>::ForwardType x9,
4155 typename CallbackParamTraits<X10>::ForwardType x10)>
4156 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4157 x9, x10);
4158 } 1092 }
4159 }; 1093 };
4160 1094
4161 // Arity 10 -> 7. 1095 // Arity 3 -> 3.
4162 template <typename StorageType, typename R,typename X1, typename X2, 1096 template <typename StorageType, typename R,typename X1, typename X2,
4163 typename X3, typename X4, typename X5, typename X6, typename X7, 1097 typename X3>
4164 typename X8, typename X9, typename X10> 1098 struct Invoker<0, StorageType, R(X1, X2, X3)> {
4165 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4166 typedef R(RunType)(BindStateBase*, 1099 typedef R(RunType)(BindStateBase*,
4167 typename CallbackParamTraits<X4>::ForwardType, 1100 typename CallbackParamTraits<X1>::ForwardType,
4168 typename CallbackParamTraits<X5>::ForwardType, 1101 typename CallbackParamTraits<X2>::ForwardType,
4169 typename CallbackParamTraits<X6>::ForwardType, 1102 typename CallbackParamTraits<X3>::ForwardType);
4170 typename CallbackParamTraits<X7>::ForwardType,
4171 typename CallbackParamTraits<X8>::ForwardType,
4172 typename CallbackParamTraits<X9>::ForwardType,
4173 typename CallbackParamTraits<X10>::ForwardType);
4174 1103
4175 typedef R(UnboundRunType)(X4, X5, X6, X7, X8, X9, X10); 1104 typedef R(UnboundRunType)(X1, X2, X3);
4176 1105
4177 static R Run(BindStateBase* base, 1106 static R Run(BindStateBase* base,
4178 typename CallbackParamTraits<X4>::ForwardType x4, 1107 typename CallbackParamTraits<X1>::ForwardType x1,
4179 typename CallbackParamTraits<X5>::ForwardType x5, 1108 typename CallbackParamTraits<X2>::ForwardType x2,
4180 typename CallbackParamTraits<X6>::ForwardType x6, 1109 typename CallbackParamTraits<X3>::ForwardType x3) {
4181 typename CallbackParamTraits<X7>::ForwardType x7, 1110 StorageType* storage = static_cast<StorageType*>(base);
4182 typename CallbackParamTraits<X8>::ForwardType x8, 1111
4183 typename CallbackParamTraits<X9>::ForwardType x9, 1112 // Local references to make debugger stepping easier. If in a debugger,
4184 typename CallbackParamTraits<X10>::ForwardType x10) { 1113 // you really want to warp ahead and step through the
1114 // InvokeHelper<>::MakeItSo() call below.
1115
1116 return InvokeHelper<StorageType::IsWeakCall::value, R,
1117 typename StorageType::RunnableType,
1118 void(typename CallbackParamTraits<X1>::ForwardType x1,
1119 typename CallbackParamTraits<X2>::ForwardType x2,
1120 typename CallbackParamTraits<X3>::ForwardType x3)>
1121 ::MakeItSo(storage->runnable_, x1, x2, x3);
1122 }
1123 };
1124
1125 // Arity 3 -> 2.
1126 template <typename StorageType, typename R,typename X1, typename X2,
1127 typename X3>
1128 struct Invoker<1, StorageType, R(X1, X2, X3)> {
1129 typedef R(RunType)(BindStateBase*,
1130 typename CallbackParamTraits<X2>::ForwardType,
1131 typename CallbackParamTraits<X3>::ForwardType);
1132
1133 typedef R(UnboundRunType)(X2, X3);
1134
1135 static R Run(BindStateBase* base,
1136 typename CallbackParamTraits<X2>::ForwardType x2,
1137 typename CallbackParamTraits<X3>::ForwardType x3) {
4185 StorageType* storage = static_cast<StorageType*>(base); 1138 StorageType* storage = static_cast<StorageType*>(base);
4186 1139
4187 // Local references to make debugger stepping easier. If in a debugger, 1140 // Local references to make debugger stepping easier. If in a debugger,
4188 // you really want to warp ahead and step through the 1141 // you really want to warp ahead and step through the
4189 // InvokeHelper<>::MakeItSo() call below. 1142 // InvokeHelper<>::MakeItSo() call below.
4190 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1143 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4191 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4192 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4193 1144
4194 typename Bound1UnwrapTraits::ForwardType x1 = 1145 typename Bound1UnwrapTraits::ForwardType x1 =
4195 Bound1UnwrapTraits::Unwrap(storage->p1_); 1146 Bound1UnwrapTraits::Unwrap(storage->p1_);
4196 typename Bound2UnwrapTraits::ForwardType x2 =
4197 Bound2UnwrapTraits::Unwrap(storage->p2_);
4198 typename Bound3UnwrapTraits::ForwardType x3 =
4199 Bound3UnwrapTraits::Unwrap(storage->p3_);
4200 return InvokeHelper<StorageType::IsWeakCall::value, R, 1147 return InvokeHelper<StorageType::IsWeakCall::value, R,
4201 typename StorageType::RunnableType, 1148 typename StorageType::RunnableType,
4202 void(typename Bound1UnwrapTraits::ForwardType, 1149 void(typename Bound1UnwrapTraits::ForwardType,
4203 typename Bound2UnwrapTraits::ForwardType, 1150 typename CallbackParamTraits<X2>::ForwardType x2,
4204 typename Bound3UnwrapTraits::ForwardType, 1151 typename CallbackParamTraits<X3>::ForwardType x3)>
4205 typename CallbackParamTraits<X4>::ForwardType x4, 1152 ::MakeItSo(storage->runnable_, x1, x2, x3);
4206 typename CallbackParamTraits<X5>::ForwardType x5,
4207 typename CallbackParamTraits<X6>::ForwardType x6,
4208 typename CallbackParamTraits<X7>::ForwardType x7,
4209 typename CallbackParamTraits<X8>::ForwardType x8,
4210 typename CallbackParamTraits<X9>::ForwardType x9,
4211 typename CallbackParamTraits<X10>::ForwardType x10)>
4212 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4213 x9, x10);
4214 } 1153 }
4215 }; 1154 };
4216 1155
4217 // Arity 10 -> 6. 1156 // Arity 3 -> 1.
4218 template <typename StorageType, typename R,typename X1, typename X2, 1157 template <typename StorageType, typename R,typename X1, typename X2,
4219 typename X3, typename X4, typename X5, typename X6, typename X7, 1158 typename X3>
4220 typename X8, typename X9, typename X10> 1159 struct Invoker<2, StorageType, R(X1, X2, X3)> {
4221 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4222 typedef R(RunType)(BindStateBase*, 1160 typedef R(RunType)(BindStateBase*,
4223 typename CallbackParamTraits<X5>::ForwardType, 1161 typename CallbackParamTraits<X3>::ForwardType);
4224 typename CallbackParamTraits<X6>::ForwardType,
4225 typename CallbackParamTraits<X7>::ForwardType,
4226 typename CallbackParamTraits<X8>::ForwardType,
4227 typename CallbackParamTraits<X9>::ForwardType,
4228 typename CallbackParamTraits<X10>::ForwardType);
4229 1162
4230 typedef R(UnboundRunType)(X5, X6, X7, X8, X9, X10); 1163 typedef R(UnboundRunType)(X3);
4231 1164
4232 static R Run(BindStateBase* base, 1165 static R Run(BindStateBase* base,
4233 typename CallbackParamTraits<X5>::ForwardType x5, 1166 typename CallbackParamTraits<X3>::ForwardType x3) {
4234 typename CallbackParamTraits<X6>::ForwardType x6,
4235 typename CallbackParamTraits<X7>::ForwardType x7,
4236 typename CallbackParamTraits<X8>::ForwardType x8,
4237 typename CallbackParamTraits<X9>::ForwardType x9,
4238 typename CallbackParamTraits<X10>::ForwardType x10) {
4239 StorageType* storage = static_cast<StorageType*>(base); 1167 StorageType* storage = static_cast<StorageType*>(base);
4240 1168
4241 // Local references to make debugger stepping easier. If in a debugger, 1169 // Local references to make debugger stepping easier. If in a debugger,
4242 // you really want to warp ahead and step through the 1170 // you really want to warp ahead and step through the
4243 // InvokeHelper<>::MakeItSo() call below. 1171 // InvokeHelper<>::MakeItSo() call below.
4244 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1172 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4245 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1173 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4246 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4247 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4248 1174
4249 typename Bound1UnwrapTraits::ForwardType x1 = 1175 typename Bound1UnwrapTraits::ForwardType x1 =
4250 Bound1UnwrapTraits::Unwrap(storage->p1_); 1176 Bound1UnwrapTraits::Unwrap(storage->p1_);
4251 typename Bound2UnwrapTraits::ForwardType x2 = 1177 typename Bound2UnwrapTraits::ForwardType x2 =
4252 Bound2UnwrapTraits::Unwrap(storage->p2_); 1178 Bound2UnwrapTraits::Unwrap(storage->p2_);
4253 typename Bound3UnwrapTraits::ForwardType x3 =
4254 Bound3UnwrapTraits::Unwrap(storage->p3_);
4255 typename Bound4UnwrapTraits::ForwardType x4 =
4256 Bound4UnwrapTraits::Unwrap(storage->p4_);
4257 return InvokeHelper<StorageType::IsWeakCall::value, R, 1179 return InvokeHelper<StorageType::IsWeakCall::value, R,
4258 typename StorageType::RunnableType, 1180 typename StorageType::RunnableType,
4259 void(typename Bound1UnwrapTraits::ForwardType, 1181 void(typename Bound1UnwrapTraits::ForwardType,
4260 typename Bound2UnwrapTraits::ForwardType, 1182 typename Bound2UnwrapTraits::ForwardType,
4261 typename Bound3UnwrapTraits::ForwardType, 1183 typename CallbackParamTraits<X3>::ForwardType x3)>
4262 typename Bound4UnwrapTraits::ForwardType, 1184 ::MakeItSo(storage->runnable_, x1, x2, x3);
4263 typename CallbackParamTraits<X5>::ForwardType x5,
4264 typename CallbackParamTraits<X6>::ForwardType x6,
4265 typename CallbackParamTraits<X7>::ForwardType x7,
4266 typename CallbackParamTraits<X8>::ForwardType x8,
4267 typename CallbackParamTraits<X9>::ForwardType x9,
4268 typename CallbackParamTraits<X10>::ForwardType x10)>
4269 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4270 x9, x10);
4271 } 1185 }
4272 }; 1186 };
4273 1187
4274 // Arity 10 -> 5. 1188 // Arity 3 -> 0.
4275 template <typename StorageType, typename R,typename X1, typename X2, 1189 template <typename StorageType, typename R,typename X1, typename X2,
4276 typename X3, typename X4, typename X5, typename X6, typename X7, 1190 typename X3>
4277 typename X8, typename X9, typename X10> 1191 struct Invoker<3, StorageType, R(X1, X2, X3)> {
4278 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> { 1192 typedef R(RunType)(BindStateBase*);
4279 typedef R(RunType)(BindStateBase*,
4280 typename CallbackParamTraits<X6>::ForwardType,
4281 typename CallbackParamTraits<X7>::ForwardType,
4282 typename CallbackParamTraits<X8>::ForwardType,
4283 typename CallbackParamTraits<X9>::ForwardType,
4284 typename CallbackParamTraits<X10>::ForwardType);
4285 1193
4286 typedef R(UnboundRunType)(X6, X7, X8, X9, X10); 1194 typedef R(UnboundRunType)();
4287 1195
4288 static R Run(BindStateBase* base, 1196 static R Run(BindStateBase* base) {
4289 typename CallbackParamTraits<X6>::ForwardType x6,
4290 typename CallbackParamTraits<X7>::ForwardType x7,
4291 typename CallbackParamTraits<X8>::ForwardType x8,
4292 typename CallbackParamTraits<X9>::ForwardType x9,
4293 typename CallbackParamTraits<X10>::ForwardType x10) {
4294 StorageType* storage = static_cast<StorageType*>(base); 1197 StorageType* storage = static_cast<StorageType*>(base);
4295 1198
4296 // Local references to make debugger stepping easier. If in a debugger, 1199 // Local references to make debugger stepping easier. If in a debugger,
4297 // you really want to warp ahead and step through the 1200 // you really want to warp ahead and step through the
4298 // InvokeHelper<>::MakeItSo() call below. 1201 // InvokeHelper<>::MakeItSo() call below.
4299 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1202 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4300 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1203 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4301 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1204 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4302 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4303 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4304 1205
4305 typename Bound1UnwrapTraits::ForwardType x1 = 1206 typename Bound1UnwrapTraits::ForwardType x1 =
4306 Bound1UnwrapTraits::Unwrap(storage->p1_); 1207 Bound1UnwrapTraits::Unwrap(storage->p1_);
4307 typename Bound2UnwrapTraits::ForwardType x2 = 1208 typename Bound2UnwrapTraits::ForwardType x2 =
4308 Bound2UnwrapTraits::Unwrap(storage->p2_); 1209 Bound2UnwrapTraits::Unwrap(storage->p2_);
4309 typename Bound3UnwrapTraits::ForwardType x3 = 1210 typename Bound3UnwrapTraits::ForwardType x3 =
4310 Bound3UnwrapTraits::Unwrap(storage->p3_); 1211 Bound3UnwrapTraits::Unwrap(storage->p3_);
4311 typename Bound4UnwrapTraits::ForwardType x4 =
4312 Bound4UnwrapTraits::Unwrap(storage->p4_);
4313 typename Bound5UnwrapTraits::ForwardType x5 =
4314 Bound5UnwrapTraits::Unwrap(storage->p5_);
4315 return InvokeHelper<StorageType::IsWeakCall::value, R, 1212 return InvokeHelper<StorageType::IsWeakCall::value, R,
4316 typename StorageType::RunnableType, 1213 typename StorageType::RunnableType,
4317 void(typename Bound1UnwrapTraits::ForwardType, 1214 void(typename Bound1UnwrapTraits::ForwardType,
4318 typename Bound2UnwrapTraits::ForwardType, 1215 typename Bound2UnwrapTraits::ForwardType,
4319 typename Bound3UnwrapTraits::ForwardType, 1216 typename Bound3UnwrapTraits::ForwardType)>
4320 typename Bound4UnwrapTraits::ForwardType, 1217 ::MakeItSo(storage->runnable_, x1, x2, x3);
4321 typename Bound5UnwrapTraits::ForwardType,
4322 typename CallbackParamTraits<X6>::ForwardType x6,
4323 typename CallbackParamTraits<X7>::ForwardType x7,
4324 typename CallbackParamTraits<X8>::ForwardType x8,
4325 typename CallbackParamTraits<X9>::ForwardType x9,
4326 typename CallbackParamTraits<X10>::ForwardType x10)>
4327 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4328 x9, x10);
4329 } 1218 }
4330 }; 1219 };
4331 1220
4332 // Arity 10 -> 4. 1221 // Arity 4 -> 4.
4333 template <typename StorageType, typename R,typename X1, typename X2, 1222 template <typename StorageType, typename R,typename X1, typename X2,
4334 typename X3, typename X4, typename X5, typename X6, typename X7, 1223 typename X3, typename X4>
4335 typename X8, typename X9, typename X10> 1224 struct Invoker<0, StorageType, R(X1, X2, X3, X4)> {
4336 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4337 typedef R(RunType)(BindStateBase*, 1225 typedef R(RunType)(BindStateBase*,
4338 typename CallbackParamTraits<X7>::ForwardType, 1226 typename CallbackParamTraits<X1>::ForwardType,
4339 typename CallbackParamTraits<X8>::ForwardType, 1227 typename CallbackParamTraits<X2>::ForwardType,
4340 typename CallbackParamTraits<X9>::ForwardType, 1228 typename CallbackParamTraits<X3>::ForwardType,
4341 typename CallbackParamTraits<X10>::ForwardType); 1229 typename CallbackParamTraits<X4>::ForwardType);
4342 1230
4343 typedef R(UnboundRunType)(X7, X8, X9, X10); 1231 typedef R(UnboundRunType)(X1, X2, X3, X4);
4344 1232
4345 static R Run(BindStateBase* base, 1233 static R Run(BindStateBase* base,
4346 typename CallbackParamTraits<X7>::ForwardType x7, 1234 typename CallbackParamTraits<X1>::ForwardType x1,
4347 typename CallbackParamTraits<X8>::ForwardType x8, 1235 typename CallbackParamTraits<X2>::ForwardType x2,
4348 typename CallbackParamTraits<X9>::ForwardType x9, 1236 typename CallbackParamTraits<X3>::ForwardType x3,
4349 typename CallbackParamTraits<X10>::ForwardType x10) { 1237 typename CallbackParamTraits<X4>::ForwardType x4) {
1238 StorageType* storage = static_cast<StorageType*>(base);
1239
1240 // Local references to make debugger stepping easier. If in a debugger,
1241 // you really want to warp ahead and step through the
1242 // InvokeHelper<>::MakeItSo() call below.
1243
1244 return InvokeHelper<StorageType::IsWeakCall::value, R,
1245 typename StorageType::RunnableType,
1246 void(typename CallbackParamTraits<X1>::ForwardType x1,
1247 typename CallbackParamTraits<X2>::ForwardType x2,
1248 typename CallbackParamTraits<X3>::ForwardType x3,
1249 typename CallbackParamTraits<X4>::ForwardType x4)>
1250 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
1251 }
1252 };
1253
1254 // Arity 4 -> 3.
1255 template <typename StorageType, typename R,typename X1, typename X2,
1256 typename X3, typename X4>
1257 struct Invoker<1, StorageType, R(X1, X2, X3, X4)> {
1258 typedef R(RunType)(BindStateBase*,
1259 typename CallbackParamTraits<X2>::ForwardType,
1260 typename CallbackParamTraits<X3>::ForwardType,
1261 typename CallbackParamTraits<X4>::ForwardType);
1262
1263 typedef R(UnboundRunType)(X2, X3, X4);
1264
1265 static R Run(BindStateBase* base,
1266 typename CallbackParamTraits<X2>::ForwardType x2,
1267 typename CallbackParamTraits<X3>::ForwardType x3,
1268 typename CallbackParamTraits<X4>::ForwardType x4) {
4350 StorageType* storage = static_cast<StorageType*>(base); 1269 StorageType* storage = static_cast<StorageType*>(base);
4351 1270
4352 // Local references to make debugger stepping easier. If in a debugger, 1271 // Local references to make debugger stepping easier. If in a debugger,
4353 // you really want to warp ahead and step through the 1272 // you really want to warp ahead and step through the
4354 // InvokeHelper<>::MakeItSo() call below. 1273 // InvokeHelper<>::MakeItSo() call below.
4355 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1274 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4356 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4357 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4358 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4359 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4360 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
4361 1275
4362 typename Bound1UnwrapTraits::ForwardType x1 = 1276 typename Bound1UnwrapTraits::ForwardType x1 =
4363 Bound1UnwrapTraits::Unwrap(storage->p1_); 1277 Bound1UnwrapTraits::Unwrap(storage->p1_);
4364 typename Bound2UnwrapTraits::ForwardType x2 =
4365 Bound2UnwrapTraits::Unwrap(storage->p2_);
4366 typename Bound3UnwrapTraits::ForwardType x3 =
4367 Bound3UnwrapTraits::Unwrap(storage->p3_);
4368 typename Bound4UnwrapTraits::ForwardType x4 =
4369 Bound4UnwrapTraits::Unwrap(storage->p4_);
4370 typename Bound5UnwrapTraits::ForwardType x5 =
4371 Bound5UnwrapTraits::Unwrap(storage->p5_);
4372 typename Bound6UnwrapTraits::ForwardType x6 =
4373 Bound6UnwrapTraits::Unwrap(storage->p6_);
4374 return InvokeHelper<StorageType::IsWeakCall::value, R, 1278 return InvokeHelper<StorageType::IsWeakCall::value, R,
4375 typename StorageType::RunnableType, 1279 typename StorageType::RunnableType,
4376 void(typename Bound1UnwrapTraits::ForwardType, 1280 void(typename Bound1UnwrapTraits::ForwardType,
4377 typename Bound2UnwrapTraits::ForwardType, 1281 typename CallbackParamTraits<X2>::ForwardType x2,
4378 typename Bound3UnwrapTraits::ForwardType, 1282 typename CallbackParamTraits<X3>::ForwardType x3,
4379 typename Bound4UnwrapTraits::ForwardType, 1283 typename CallbackParamTraits<X4>::ForwardType x4)>
4380 typename Bound5UnwrapTraits::ForwardType, 1284 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
4381 typename Bound6UnwrapTraits::ForwardType,
4382 typename CallbackParamTraits<X7>::ForwardType x7,
4383 typename CallbackParamTraits<X8>::ForwardType x8,
4384 typename CallbackParamTraits<X9>::ForwardType x9,
4385 typename CallbackParamTraits<X10>::ForwardType x10)>
4386 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4387 x9, x10);
4388 } 1285 }
4389 }; 1286 };
4390 1287
4391 // Arity 10 -> 3. 1288 // Arity 4 -> 2.
4392 template <typename StorageType, typename R,typename X1, typename X2, 1289 template <typename StorageType, typename R,typename X1, typename X2,
4393 typename X3, typename X4, typename X5, typename X6, typename X7, 1290 typename X3, typename X4>
4394 typename X8, typename X9, typename X10> 1291 struct Invoker<2, StorageType, R(X1, X2, X3, X4)> {
4395 struct Invoker<7, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4396 typedef R(RunType)(BindStateBase*, 1292 typedef R(RunType)(BindStateBase*,
4397 typename CallbackParamTraits<X8>::ForwardType, 1293 typename CallbackParamTraits<X3>::ForwardType,
4398 typename CallbackParamTraits<X9>::ForwardType, 1294 typename CallbackParamTraits<X4>::ForwardType);
4399 typename CallbackParamTraits<X10>::ForwardType);
4400 1295
4401 typedef R(UnboundRunType)(X8, X9, X10); 1296 typedef R(UnboundRunType)(X3, X4);
4402 1297
4403 static R Run(BindStateBase* base, 1298 static R Run(BindStateBase* base,
4404 typename CallbackParamTraits<X8>::ForwardType x8, 1299 typename CallbackParamTraits<X3>::ForwardType x3,
4405 typename CallbackParamTraits<X9>::ForwardType x9, 1300 typename CallbackParamTraits<X4>::ForwardType x4) {
4406 typename CallbackParamTraits<X10>::ForwardType x10) {
4407 StorageType* storage = static_cast<StorageType*>(base); 1301 StorageType* storage = static_cast<StorageType*>(base);
4408 1302
4409 // Local references to make debugger stepping easier. If in a debugger, 1303 // Local references to make debugger stepping easier. If in a debugger,
4410 // you really want to warp ahead and step through the
4411 // InvokeHelper<>::MakeItSo() call below.
4412 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4413 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4414 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4415 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4416 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4417 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
4418 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
4419
4420 typename Bound1UnwrapTraits::ForwardType x1 =
4421 Bound1UnwrapTraits::Unwrap(storage->p1_);
4422 typename Bound2UnwrapTraits::ForwardType x2 =
4423 Bound2UnwrapTraits::Unwrap(storage->p2_);
4424 typename Bound3UnwrapTraits::ForwardType x3 =
4425 Bound3UnwrapTraits::Unwrap(storage->p3_);
4426 typename Bound4UnwrapTraits::ForwardType x4 =
4427 Bound4UnwrapTraits::Unwrap(storage->p4_);
4428 typename Bound5UnwrapTraits::ForwardType x5 =
4429 Bound5UnwrapTraits::Unwrap(storage->p5_);
4430 typename Bound6UnwrapTraits::ForwardType x6 =
4431 Bound6UnwrapTraits::Unwrap(storage->p6_);
4432 typename Bound7UnwrapTraits::ForwardType x7 =
4433 Bound7UnwrapTraits::Unwrap(storage->p7_);
4434 return InvokeHelper<StorageType::IsWeakCall::value, R,
4435 typename StorageType::RunnableType,
4436 void(typename Bound1UnwrapTraits::ForwardType,
4437 typename Bound2UnwrapTraits::ForwardType,
4438 typename Bound3UnwrapTraits::ForwardType,
4439 typename Bound4UnwrapTraits::ForwardType,
4440 typename Bound5UnwrapTraits::ForwardType,
4441 typename Bound6UnwrapTraits::ForwardType,
4442 typename Bound7UnwrapTraits::ForwardType,
4443 typename CallbackParamTraits<X8>::ForwardType x8,
4444 typename CallbackParamTraits<X9>::ForwardType x9,
4445 typename CallbackParamTraits<X10>::ForwardType x10)>
4446 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4447 x9, x10);
4448 }
4449 };
4450
4451 // Arity 10 -> 2.
4452 template <typename StorageType, typename R,typename X1, typename X2,
4453 typename X3, typename X4, typename X5, typename X6, typename X7,
4454 typename X8, typename X9, typename X10>
4455 struct Invoker<8, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4456 typedef R(RunType)(BindStateBase*,
4457 typename CallbackParamTraits<X9>::ForwardType,
4458 typename CallbackParamTraits<X10>::ForwardType);
4459
4460 typedef R(UnboundRunType)(X9, X10);
4461
4462 static R Run(BindStateBase* base,
4463 typename CallbackParamTraits<X9>::ForwardType x9,
4464 typename CallbackParamTraits<X10>::ForwardType x10) {
4465 StorageType* storage = static_cast<StorageType*>(base);
4466
4467 // Local references to make debugger stepping easier. If in a debugger,
4468 // you really want to warp ahead and step through the 1304 // you really want to warp ahead and step through the
4469 // InvokeHelper<>::MakeItSo() call below. 1305 // InvokeHelper<>::MakeItSo() call below.
4470 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1306 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4471 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1307 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4472 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4473 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4474 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4475 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
4476 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
4477 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
4478 1308
4479 typename Bound1UnwrapTraits::ForwardType x1 = 1309 typename Bound1UnwrapTraits::ForwardType x1 =
4480 Bound1UnwrapTraits::Unwrap(storage->p1_); 1310 Bound1UnwrapTraits::Unwrap(storage->p1_);
4481 typename Bound2UnwrapTraits::ForwardType x2 = 1311 typename Bound2UnwrapTraits::ForwardType x2 =
4482 Bound2UnwrapTraits::Unwrap(storage->p2_); 1312 Bound2UnwrapTraits::Unwrap(storage->p2_);
4483 typename Bound3UnwrapTraits::ForwardType x3 =
4484 Bound3UnwrapTraits::Unwrap(storage->p3_);
4485 typename Bound4UnwrapTraits::ForwardType x4 =
4486 Bound4UnwrapTraits::Unwrap(storage->p4_);
4487 typename Bound5UnwrapTraits::ForwardType x5 =
4488 Bound5UnwrapTraits::Unwrap(storage->p5_);
4489 typename Bound6UnwrapTraits::ForwardType x6 =
4490 Bound6UnwrapTraits::Unwrap(storage->p6_);
4491 typename Bound7UnwrapTraits::ForwardType x7 =
4492 Bound7UnwrapTraits::Unwrap(storage->p7_);
4493 typename Bound8UnwrapTraits::ForwardType x8 =
4494 Bound8UnwrapTraits::Unwrap(storage->p8_);
4495 return InvokeHelper<StorageType::IsWeakCall::value, R, 1313 return InvokeHelper<StorageType::IsWeakCall::value, R,
4496 typename StorageType::RunnableType, 1314 typename StorageType::RunnableType,
4497 void(typename Bound1UnwrapTraits::ForwardType, 1315 void(typename Bound1UnwrapTraits::ForwardType,
4498 typename Bound2UnwrapTraits::ForwardType, 1316 typename Bound2UnwrapTraits::ForwardType,
4499 typename Bound3UnwrapTraits::ForwardType, 1317 typename CallbackParamTraits<X3>::ForwardType x3,
4500 typename Bound4UnwrapTraits::ForwardType, 1318 typename CallbackParamTraits<X4>::ForwardType x4)>
4501 typename Bound5UnwrapTraits::ForwardType, 1319 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
4502 typename Bound6UnwrapTraits::ForwardType,
4503 typename Bound7UnwrapTraits::ForwardType,
4504 typename Bound8UnwrapTraits::ForwardType,
4505 typename CallbackParamTraits<X9>::ForwardType x9,
4506 typename CallbackParamTraits<X10>::ForwardType x10)>
4507 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4508 x9, x10);
4509 } 1320 }
4510 }; 1321 };
4511 1322
4512 // Arity 10 -> 1. 1323 // Arity 4 -> 1.
4513 template <typename StorageType, typename R,typename X1, typename X2, 1324 template <typename StorageType, typename R,typename X1, typename X2,
4514 typename X3, typename X4, typename X5, typename X6, typename X7, 1325 typename X3, typename X4>
4515 typename X8, typename X9, typename X10> 1326 struct Invoker<3, StorageType, R(X1, X2, X3, X4)> {
4516 struct Invoker<9, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4517 typedef R(RunType)(BindStateBase*, 1327 typedef R(RunType)(BindStateBase*,
4518 typename CallbackParamTraits<X10>::ForwardType); 1328 typename CallbackParamTraits<X4>::ForwardType);
4519 1329
4520 typedef R(UnboundRunType)(X10); 1330 typedef R(UnboundRunType)(X4);
4521 1331
4522 static R Run(BindStateBase* base, 1332 static R Run(BindStateBase* base,
4523 typename CallbackParamTraits<X10>::ForwardType x10) { 1333 typename CallbackParamTraits<X4>::ForwardType x4) {
4524 StorageType* storage = static_cast<StorageType*>(base); 1334 StorageType* storage = static_cast<StorageType*>(base);
4525 1335
4526 // Local references to make debugger stepping easier. If in a debugger, 1336 // Local references to make debugger stepping easier. If in a debugger,
4527 // you really want to warp ahead and step through the 1337 // you really want to warp ahead and step through the
4528 // InvokeHelper<>::MakeItSo() call below. 1338 // InvokeHelper<>::MakeItSo() call below.
4529 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1339 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4530 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1340 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4531 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1341 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4532 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4533 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4534 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
4535 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
4536 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
4537 typedef typename StorageType::Bound9UnwrapTraits Bound9UnwrapTraits;
4538 1342
4539 typename Bound1UnwrapTraits::ForwardType x1 = 1343 typename Bound1UnwrapTraits::ForwardType x1 =
4540 Bound1UnwrapTraits::Unwrap(storage->p1_); 1344 Bound1UnwrapTraits::Unwrap(storage->p1_);
4541 typename Bound2UnwrapTraits::ForwardType x2 = 1345 typename Bound2UnwrapTraits::ForwardType x2 =
4542 Bound2UnwrapTraits::Unwrap(storage->p2_); 1346 Bound2UnwrapTraits::Unwrap(storage->p2_);
4543 typename Bound3UnwrapTraits::ForwardType x3 = 1347 typename Bound3UnwrapTraits::ForwardType x3 =
4544 Bound3UnwrapTraits::Unwrap(storage->p3_); 1348 Bound3UnwrapTraits::Unwrap(storage->p3_);
4545 typename Bound4UnwrapTraits::ForwardType x4 =
4546 Bound4UnwrapTraits::Unwrap(storage->p4_);
4547 typename Bound5UnwrapTraits::ForwardType x5 =
4548 Bound5UnwrapTraits::Unwrap(storage->p5_);
4549 typename Bound6UnwrapTraits::ForwardType x6 =
4550 Bound6UnwrapTraits::Unwrap(storage->p6_);
4551 typename Bound7UnwrapTraits::ForwardType x7 =
4552 Bound7UnwrapTraits::Unwrap(storage->p7_);
4553 typename Bound8UnwrapTraits::ForwardType x8 =
4554 Bound8UnwrapTraits::Unwrap(storage->p8_);
4555 typename Bound9UnwrapTraits::ForwardType x9 =
4556 Bound9UnwrapTraits::Unwrap(storage->p9_);
4557 return InvokeHelper<StorageType::IsWeakCall::value, R, 1349 return InvokeHelper<StorageType::IsWeakCall::value, R,
4558 typename StorageType::RunnableType, 1350 typename StorageType::RunnableType,
4559 void(typename Bound1UnwrapTraits::ForwardType, 1351 void(typename Bound1UnwrapTraits::ForwardType,
4560 typename Bound2UnwrapTraits::ForwardType, 1352 typename Bound2UnwrapTraits::ForwardType,
4561 typename Bound3UnwrapTraits::ForwardType, 1353 typename Bound3UnwrapTraits::ForwardType,
4562 typename Bound4UnwrapTraits::ForwardType, 1354 typename CallbackParamTraits<X4>::ForwardType x4)>
4563 typename Bound5UnwrapTraits::ForwardType, 1355 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
4564 typename Bound6UnwrapTraits::ForwardType,
4565 typename Bound7UnwrapTraits::ForwardType,
4566 typename Bound8UnwrapTraits::ForwardType,
4567 typename Bound9UnwrapTraits::ForwardType,
4568 typename CallbackParamTraits<X10>::ForwardType x10)>
4569 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4570 x9, x10);
4571 } 1356 }
4572 }; 1357 };
4573 1358
4574 // Arity 10 -> 0. 1359 // Arity 4 -> 0.
4575 template <typename StorageType, typename R,typename X1, typename X2, 1360 template <typename StorageType, typename R,typename X1, typename X2,
4576 typename X3, typename X4, typename X5, typename X6, typename X7, 1361 typename X3, typename X4>
4577 typename X8, typename X9, typename X10> 1362 struct Invoker<4, StorageType, R(X1, X2, X3, X4)> {
4578 struct Invoker<10, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> {
4579 typedef R(RunType)(BindStateBase*); 1363 typedef R(RunType)(BindStateBase*);
4580 1364
4581 typedef R(UnboundRunType)(); 1365 typedef R(UnboundRunType)();
4582 1366
4583 static R Run(BindStateBase* base) { 1367 static R Run(BindStateBase* base) {
4584 StorageType* storage = static_cast<StorageType*>(base); 1368 StorageType* storage = static_cast<StorageType*>(base);
4585 1369
4586 // Local references to make debugger stepping easier. If in a debugger, 1370 // Local references to make debugger stepping easier. If in a debugger,
4587 // you really want to warp ahead and step through the 1371 // you really want to warp ahead and step through the
4588 // InvokeHelper<>::MakeItSo() call below. 1372 // InvokeHelper<>::MakeItSo() call below.
4589 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1373 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4590 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1374 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4591 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1375 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4592 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits; 1376 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4593 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4594 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
4595 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
4596 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
4597 typedef typename StorageType::Bound9UnwrapTraits Bound9UnwrapTraits;
4598 typedef typename StorageType::Bound10UnwrapTraits Bound10UnwrapTraits;
4599 1377
4600 typename Bound1UnwrapTraits::ForwardType x1 = 1378 typename Bound1UnwrapTraits::ForwardType x1 =
4601 Bound1UnwrapTraits::Unwrap(storage->p1_); 1379 Bound1UnwrapTraits::Unwrap(storage->p1_);
4602 typename Bound2UnwrapTraits::ForwardType x2 = 1380 typename Bound2UnwrapTraits::ForwardType x2 =
4603 Bound2UnwrapTraits::Unwrap(storage->p2_); 1381 Bound2UnwrapTraits::Unwrap(storage->p2_);
4604 typename Bound3UnwrapTraits::ForwardType x3 = 1382 typename Bound3UnwrapTraits::ForwardType x3 =
4605 Bound3UnwrapTraits::Unwrap(storage->p3_); 1383 Bound3UnwrapTraits::Unwrap(storage->p3_);
4606 typename Bound4UnwrapTraits::ForwardType x4 = 1384 typename Bound4UnwrapTraits::ForwardType x4 =
4607 Bound4UnwrapTraits::Unwrap(storage->p4_); 1385 Bound4UnwrapTraits::Unwrap(storage->p4_);
4608 typename Bound5UnwrapTraits::ForwardType x5 =
4609 Bound5UnwrapTraits::Unwrap(storage->p5_);
4610 typename Bound6UnwrapTraits::ForwardType x6 =
4611 Bound6UnwrapTraits::Unwrap(storage->p6_);
4612 typename Bound7UnwrapTraits::ForwardType x7 =
4613 Bound7UnwrapTraits::Unwrap(storage->p7_);
4614 typename Bound8UnwrapTraits::ForwardType x8 =
4615 Bound8UnwrapTraits::Unwrap(storage->p8_);
4616 typename Bound9UnwrapTraits::ForwardType x9 =
4617 Bound9UnwrapTraits::Unwrap(storage->p9_);
4618 typename Bound10UnwrapTraits::ForwardType x10 =
4619 Bound10UnwrapTraits::Unwrap(storage->p10_);
4620 return InvokeHelper<StorageType::IsWeakCall::value, R, 1386 return InvokeHelper<StorageType::IsWeakCall::value, R,
4621 typename StorageType::RunnableType, 1387 typename StorageType::RunnableType,
4622 void(typename Bound1UnwrapTraits::ForwardType, 1388 void(typename Bound1UnwrapTraits::ForwardType,
4623 typename Bound2UnwrapTraits::ForwardType, 1389 typename Bound2UnwrapTraits::ForwardType,
4624 typename Bound3UnwrapTraits::ForwardType, 1390 typename Bound3UnwrapTraits::ForwardType,
4625 typename Bound4UnwrapTraits::ForwardType, 1391 typename Bound4UnwrapTraits::ForwardType)>
4626 typename Bound5UnwrapTraits::ForwardType, 1392 ::MakeItSo(storage->runnable_, x1, x2, x3, x4);
4627 typename Bound6UnwrapTraits::ForwardType,
4628 typename Bound7UnwrapTraits::ForwardType,
4629 typename Bound8UnwrapTraits::ForwardType,
4630 typename Bound9UnwrapTraits::ForwardType,
4631 typename Bound10UnwrapTraits::ForwardType)>
4632 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4633 x9, x10);
4634 } 1393 }
4635 }; 1394 };
4636 1395
4637 // Arity 11 -> 11. 1396 // Arity 5 -> 5.
4638 template <typename StorageType, typename R,typename X1, typename X2, 1397 template <typename StorageType, typename R,typename X1, typename X2,
4639 typename X3, typename X4, typename X5, typename X6, typename X7, 1398 typename X3, typename X4, typename X5>
4640 typename X8, typename X9, typename X10, typename X11> 1399 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5)> {
4641 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
4642 X11)> {
4643 typedef R(RunType)(BindStateBase*, 1400 typedef R(RunType)(BindStateBase*,
4644 typename CallbackParamTraits<X1>::ForwardType, 1401 typename CallbackParamTraits<X1>::ForwardType,
4645 typename CallbackParamTraits<X2>::ForwardType, 1402 typename CallbackParamTraits<X2>::ForwardType,
4646 typename CallbackParamTraits<X3>::ForwardType, 1403 typename CallbackParamTraits<X3>::ForwardType,
4647 typename CallbackParamTraits<X4>::ForwardType, 1404 typename CallbackParamTraits<X4>::ForwardType,
4648 typename CallbackParamTraits<X5>::ForwardType, 1405 typename CallbackParamTraits<X5>::ForwardType);
4649 typename CallbackParamTraits<X6>::ForwardType,
4650 typename CallbackParamTraits<X7>::ForwardType,
4651 typename CallbackParamTraits<X8>::ForwardType,
4652 typename CallbackParamTraits<X9>::ForwardType,
4653 typename CallbackParamTraits<X10>::ForwardType,
4654 typename CallbackParamTraits<X11>::ForwardType);
4655 1406
4656 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11); 1407 typedef R(UnboundRunType)(X1, X2, X3, X4, X5);
4657 1408
4658 static R Run(BindStateBase* base, 1409 static R Run(BindStateBase* base,
4659 typename CallbackParamTraits<X1>::ForwardType x1, 1410 typename CallbackParamTraits<X1>::ForwardType x1,
4660 typename CallbackParamTraits<X2>::ForwardType x2, 1411 typename CallbackParamTraits<X2>::ForwardType x2,
4661 typename CallbackParamTraits<X3>::ForwardType x3, 1412 typename CallbackParamTraits<X3>::ForwardType x3,
4662 typename CallbackParamTraits<X4>::ForwardType x4, 1413 typename CallbackParamTraits<X4>::ForwardType x4,
4663 typename CallbackParamTraits<X5>::ForwardType x5, 1414 typename CallbackParamTraits<X5>::ForwardType x5) {
4664 typename CallbackParamTraits<X6>::ForwardType x6,
4665 typename CallbackParamTraits<X7>::ForwardType x7,
4666 typename CallbackParamTraits<X8>::ForwardType x8,
4667 typename CallbackParamTraits<X9>::ForwardType x9,
4668 typename CallbackParamTraits<X10>::ForwardType x10,
4669 typename CallbackParamTraits<X11>::ForwardType x11) {
4670 StorageType* storage = static_cast<StorageType*>(base); 1415 StorageType* storage = static_cast<StorageType*>(base);
4671 1416
4672 // Local references to make debugger stepping easier. If in a debugger, 1417 // Local references to make debugger stepping easier. If in a debugger,
4673 // you really want to warp ahead and step through the 1418 // you really want to warp ahead and step through the
4674 // InvokeHelper<>::MakeItSo() call below. 1419 // InvokeHelper<>::MakeItSo() call below.
4675 1420
4676 return InvokeHelper<StorageType::IsWeakCall::value, R, 1421 return InvokeHelper<StorageType::IsWeakCall::value, R,
4677 typename StorageType::RunnableType, 1422 typename StorageType::RunnableType,
4678 void(typename CallbackParamTraits<X1>::ForwardType x1, 1423 void(typename CallbackParamTraits<X1>::ForwardType x1,
4679 typename CallbackParamTraits<X2>::ForwardType x2, 1424 typename CallbackParamTraits<X2>::ForwardType x2,
4680 typename CallbackParamTraits<X3>::ForwardType x3, 1425 typename CallbackParamTraits<X3>::ForwardType x3,
4681 typename CallbackParamTraits<X4>::ForwardType x4, 1426 typename CallbackParamTraits<X4>::ForwardType x4,
4682 typename CallbackParamTraits<X5>::ForwardType x5, 1427 typename CallbackParamTraits<X5>::ForwardType x5)>
4683 typename CallbackParamTraits<X6>::ForwardType x6, 1428 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
4684 typename CallbackParamTraits<X7>::ForwardType x7,
4685 typename CallbackParamTraits<X8>::ForwardType x8,
4686 typename CallbackParamTraits<X9>::ForwardType x9,
4687 typename CallbackParamTraits<X10>::ForwardType x10,
4688 typename CallbackParamTraits<X11>::ForwardType x11)>
4689 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4690 x9, x10, x11);
4691 } 1429 }
4692 }; 1430 };
4693 1431
4694 // Arity 11 -> 10. 1432 // Arity 5 -> 4.
4695 template <typename StorageType, typename R,typename X1, typename X2, 1433 template <typename StorageType, typename R,typename X1, typename X2,
4696 typename X3, typename X4, typename X5, typename X6, typename X7, 1434 typename X3, typename X4, typename X5>
4697 typename X8, typename X9, typename X10, typename X11> 1435 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5)> {
4698 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
4699 X11)> {
4700 typedef R(RunType)(BindStateBase*, 1436 typedef R(RunType)(BindStateBase*,
4701 typename CallbackParamTraits<X2>::ForwardType, 1437 typename CallbackParamTraits<X2>::ForwardType,
4702 typename CallbackParamTraits<X3>::ForwardType, 1438 typename CallbackParamTraits<X3>::ForwardType,
4703 typename CallbackParamTraits<X4>::ForwardType, 1439 typename CallbackParamTraits<X4>::ForwardType,
4704 typename CallbackParamTraits<X5>::ForwardType, 1440 typename CallbackParamTraits<X5>::ForwardType);
4705 typename CallbackParamTraits<X6>::ForwardType,
4706 typename CallbackParamTraits<X7>::ForwardType,
4707 typename CallbackParamTraits<X8>::ForwardType,
4708 typename CallbackParamTraits<X9>::ForwardType,
4709 typename CallbackParamTraits<X10>::ForwardType,
4710 typename CallbackParamTraits<X11>::ForwardType);
4711 1441
4712 typedef R(UnboundRunType)(X2, X3, X4, X5, X6, X7, X8, X9, X10, X11); 1442 typedef R(UnboundRunType)(X2, X3, X4, X5);
4713 1443
4714 static R Run(BindStateBase* base, 1444 static R Run(BindStateBase* base,
4715 typename CallbackParamTraits<X2>::ForwardType x2, 1445 typename CallbackParamTraits<X2>::ForwardType x2,
4716 typename CallbackParamTraits<X3>::ForwardType x3, 1446 typename CallbackParamTraits<X3>::ForwardType x3,
4717 typename CallbackParamTraits<X4>::ForwardType x4, 1447 typename CallbackParamTraits<X4>::ForwardType x4,
4718 typename CallbackParamTraits<X5>::ForwardType x5, 1448 typename CallbackParamTraits<X5>::ForwardType x5) {
4719 typename CallbackParamTraits<X6>::ForwardType x6,
4720 typename CallbackParamTraits<X7>::ForwardType x7,
4721 typename CallbackParamTraits<X8>::ForwardType x8,
4722 typename CallbackParamTraits<X9>::ForwardType x9,
4723 typename CallbackParamTraits<X10>::ForwardType x10,
4724 typename CallbackParamTraits<X11>::ForwardType x11) {
4725 StorageType* storage = static_cast<StorageType*>(base); 1449 StorageType* storage = static_cast<StorageType*>(base);
4726 1450
4727 // Local references to make debugger stepping easier. If in a debugger, 1451 // Local references to make debugger stepping easier. If in a debugger,
4728 // you really want to warp ahead and step through the 1452 // you really want to warp ahead and step through the
4729 // InvokeHelper<>::MakeItSo() call below. 1453 // InvokeHelper<>::MakeItSo() call below.
4730 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1454 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4731 1455
4732 typename Bound1UnwrapTraits::ForwardType x1 = 1456 typename Bound1UnwrapTraits::ForwardType x1 =
4733 Bound1UnwrapTraits::Unwrap(storage->p1_); 1457 Bound1UnwrapTraits::Unwrap(storage->p1_);
4734 return InvokeHelper<StorageType::IsWeakCall::value, R, 1458 return InvokeHelper<StorageType::IsWeakCall::value, R,
4735 typename StorageType::RunnableType, 1459 typename StorageType::RunnableType,
4736 void(typename Bound1UnwrapTraits::ForwardType, 1460 void(typename Bound1UnwrapTraits::ForwardType,
4737 typename CallbackParamTraits<X2>::ForwardType x2, 1461 typename CallbackParamTraits<X2>::ForwardType x2,
4738 typename CallbackParamTraits<X3>::ForwardType x3, 1462 typename CallbackParamTraits<X3>::ForwardType x3,
4739 typename CallbackParamTraits<X4>::ForwardType x4, 1463 typename CallbackParamTraits<X4>::ForwardType x4,
4740 typename CallbackParamTraits<X5>::ForwardType x5, 1464 typename CallbackParamTraits<X5>::ForwardType x5)>
4741 typename CallbackParamTraits<X6>::ForwardType x6, 1465 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
4742 typename CallbackParamTraits<X7>::ForwardType x7,
4743 typename CallbackParamTraits<X8>::ForwardType x8,
4744 typename CallbackParamTraits<X9>::ForwardType x9,
4745 typename CallbackParamTraits<X10>::ForwardType x10,
4746 typename CallbackParamTraits<X11>::ForwardType x11)>
4747 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4748 x9, x10, x11);
4749 } 1466 }
4750 }; 1467 };
4751 1468
4752 // Arity 11 -> 9. 1469 // Arity 5 -> 3.
4753 template <typename StorageType, typename R,typename X1, typename X2, 1470 template <typename StorageType, typename R,typename X1, typename X2,
4754 typename X3, typename X4, typename X5, typename X6, typename X7, 1471 typename X3, typename X4, typename X5>
4755 typename X8, typename X9, typename X10, typename X11> 1472 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5)> {
4756 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
4757 X11)> {
4758 typedef R(RunType)(BindStateBase*, 1473 typedef R(RunType)(BindStateBase*,
4759 typename CallbackParamTraits<X3>::ForwardType, 1474 typename CallbackParamTraits<X3>::ForwardType,
4760 typename CallbackParamTraits<X4>::ForwardType, 1475 typename CallbackParamTraits<X4>::ForwardType,
4761 typename CallbackParamTraits<X5>::ForwardType, 1476 typename CallbackParamTraits<X5>::ForwardType);
4762 typename CallbackParamTraits<X6>::ForwardType,
4763 typename CallbackParamTraits<X7>::ForwardType,
4764 typename CallbackParamTraits<X8>::ForwardType,
4765 typename CallbackParamTraits<X9>::ForwardType,
4766 typename CallbackParamTraits<X10>::ForwardType,
4767 typename CallbackParamTraits<X11>::ForwardType);
4768 1477
4769 typedef R(UnboundRunType)(X3, X4, X5, X6, X7, X8, X9, X10, X11); 1478 typedef R(UnboundRunType)(X3, X4, X5);
4770 1479
4771 static R Run(BindStateBase* base, 1480 static R Run(BindStateBase* base,
4772 typename CallbackParamTraits<X3>::ForwardType x3, 1481 typename CallbackParamTraits<X3>::ForwardType x3,
4773 typename CallbackParamTraits<X4>::ForwardType x4, 1482 typename CallbackParamTraits<X4>::ForwardType x4,
4774 typename CallbackParamTraits<X5>::ForwardType x5, 1483 typename CallbackParamTraits<X5>::ForwardType x5) {
4775 typename CallbackParamTraits<X6>::ForwardType x6,
4776 typename CallbackParamTraits<X7>::ForwardType x7,
4777 typename CallbackParamTraits<X8>::ForwardType x8,
4778 typename CallbackParamTraits<X9>::ForwardType x9,
4779 typename CallbackParamTraits<X10>::ForwardType x10,
4780 typename CallbackParamTraits<X11>::ForwardType x11) {
4781 StorageType* storage = static_cast<StorageType*>(base); 1484 StorageType* storage = static_cast<StorageType*>(base);
4782 1485
4783 // Local references to make debugger stepping easier. If in a debugger, 1486 // Local references to make debugger stepping easier. If in a debugger,
4784 // you really want to warp ahead and step through the 1487 // you really want to warp ahead and step through the
4785 // InvokeHelper<>::MakeItSo() call below. 1488 // InvokeHelper<>::MakeItSo() call below.
4786 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1489 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4787 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1490 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4788 1491
4789 typename Bound1UnwrapTraits::ForwardType x1 = 1492 typename Bound1UnwrapTraits::ForwardType x1 =
4790 Bound1UnwrapTraits::Unwrap(storage->p1_); 1493 Bound1UnwrapTraits::Unwrap(storage->p1_);
4791 typename Bound2UnwrapTraits::ForwardType x2 = 1494 typename Bound2UnwrapTraits::ForwardType x2 =
4792 Bound2UnwrapTraits::Unwrap(storage->p2_); 1495 Bound2UnwrapTraits::Unwrap(storage->p2_);
4793 return InvokeHelper<StorageType::IsWeakCall::value, R, 1496 return InvokeHelper<StorageType::IsWeakCall::value, R,
4794 typename StorageType::RunnableType, 1497 typename StorageType::RunnableType,
4795 void(typename Bound1UnwrapTraits::ForwardType, 1498 void(typename Bound1UnwrapTraits::ForwardType,
4796 typename Bound2UnwrapTraits::ForwardType, 1499 typename Bound2UnwrapTraits::ForwardType,
4797 typename CallbackParamTraits<X3>::ForwardType x3, 1500 typename CallbackParamTraits<X3>::ForwardType x3,
4798 typename CallbackParamTraits<X4>::ForwardType x4, 1501 typename CallbackParamTraits<X4>::ForwardType x4,
4799 typename CallbackParamTraits<X5>::ForwardType x5, 1502 typename CallbackParamTraits<X5>::ForwardType x5)>
4800 typename CallbackParamTraits<X6>::ForwardType x6, 1503 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
4801 typename CallbackParamTraits<X7>::ForwardType x7,
4802 typename CallbackParamTraits<X8>::ForwardType x8,
4803 typename CallbackParamTraits<X9>::ForwardType x9,
4804 typename CallbackParamTraits<X10>::ForwardType x10,
4805 typename CallbackParamTraits<X11>::ForwardType x11)>
4806 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4807 x9, x10, x11);
4808 } 1504 }
4809 }; 1505 };
4810 1506
4811 // Arity 11 -> 8. 1507 // Arity 5 -> 2.
4812 template <typename StorageType, typename R,typename X1, typename X2, 1508 template <typename StorageType, typename R,typename X1, typename X2,
4813 typename X3, typename X4, typename X5, typename X6, typename X7, 1509 typename X3, typename X4, typename X5>
4814 typename X8, typename X9, typename X10, typename X11> 1510 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5)> {
4815 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
4816 X11)> {
4817 typedef R(RunType)(BindStateBase*, 1511 typedef R(RunType)(BindStateBase*,
4818 typename CallbackParamTraits<X4>::ForwardType, 1512 typename CallbackParamTraits<X4>::ForwardType,
4819 typename CallbackParamTraits<X5>::ForwardType, 1513 typename CallbackParamTraits<X5>::ForwardType);
4820 typename CallbackParamTraits<X6>::ForwardType,
4821 typename CallbackParamTraits<X7>::ForwardType,
4822 typename CallbackParamTraits<X8>::ForwardType,
4823 typename CallbackParamTraits<X9>::ForwardType,
4824 typename CallbackParamTraits<X10>::ForwardType,
4825 typename CallbackParamTraits<X11>::ForwardType);
4826 1514
4827 typedef R(UnboundRunType)(X4, X5, X6, X7, X8, X9, X10, X11); 1515 typedef R(UnboundRunType)(X4, X5);
4828 1516
4829 static R Run(BindStateBase* base, 1517 static R Run(BindStateBase* base,
4830 typename CallbackParamTraits<X4>::ForwardType x4, 1518 typename CallbackParamTraits<X4>::ForwardType x4,
4831 typename CallbackParamTraits<X5>::ForwardType x5, 1519 typename CallbackParamTraits<X5>::ForwardType x5) {
4832 typename CallbackParamTraits<X6>::ForwardType x6,
4833 typename CallbackParamTraits<X7>::ForwardType x7,
4834 typename CallbackParamTraits<X8>::ForwardType x8,
4835 typename CallbackParamTraits<X9>::ForwardType x9,
4836 typename CallbackParamTraits<X10>::ForwardType x10,
4837 typename CallbackParamTraits<X11>::ForwardType x11) {
4838 StorageType* storage = static_cast<StorageType*>(base); 1520 StorageType* storage = static_cast<StorageType*>(base);
4839 1521
4840 // Local references to make debugger stepping easier. If in a debugger, 1522 // Local references to make debugger stepping easier. If in a debugger,
4841 // you really want to warp ahead and step through the 1523 // you really want to warp ahead and step through the
4842 // InvokeHelper<>::MakeItSo() call below. 1524 // InvokeHelper<>::MakeItSo() call below.
4843 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1525 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4844 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1526 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4845 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1527 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4846 1528
4847 typename Bound1UnwrapTraits::ForwardType x1 = 1529 typename Bound1UnwrapTraits::ForwardType x1 =
4848 Bound1UnwrapTraits::Unwrap(storage->p1_); 1530 Bound1UnwrapTraits::Unwrap(storage->p1_);
4849 typename Bound2UnwrapTraits::ForwardType x2 = 1531 typename Bound2UnwrapTraits::ForwardType x2 =
4850 Bound2UnwrapTraits::Unwrap(storage->p2_); 1532 Bound2UnwrapTraits::Unwrap(storage->p2_);
4851 typename Bound3UnwrapTraits::ForwardType x3 = 1533 typename Bound3UnwrapTraits::ForwardType x3 =
4852 Bound3UnwrapTraits::Unwrap(storage->p3_); 1534 Bound3UnwrapTraits::Unwrap(storage->p3_);
4853 return InvokeHelper<StorageType::IsWeakCall::value, R, 1535 return InvokeHelper<StorageType::IsWeakCall::value, R,
4854 typename StorageType::RunnableType, 1536 typename StorageType::RunnableType,
4855 void(typename Bound1UnwrapTraits::ForwardType, 1537 void(typename Bound1UnwrapTraits::ForwardType,
4856 typename Bound2UnwrapTraits::ForwardType, 1538 typename Bound2UnwrapTraits::ForwardType,
4857 typename Bound3UnwrapTraits::ForwardType, 1539 typename Bound3UnwrapTraits::ForwardType,
4858 typename CallbackParamTraits<X4>::ForwardType x4, 1540 typename CallbackParamTraits<X4>::ForwardType x4,
4859 typename CallbackParamTraits<X5>::ForwardType x5, 1541 typename CallbackParamTraits<X5>::ForwardType x5)>
4860 typename CallbackParamTraits<X6>::ForwardType x6, 1542 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
4861 typename CallbackParamTraits<X7>::ForwardType x7,
4862 typename CallbackParamTraits<X8>::ForwardType x8,
4863 typename CallbackParamTraits<X9>::ForwardType x9,
4864 typename CallbackParamTraits<X10>::ForwardType x10,
4865 typename CallbackParamTraits<X11>::ForwardType x11)>
4866 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4867 x9, x10, x11);
4868 } 1543 }
4869 }; 1544 };
4870 1545
4871 // Arity 11 -> 7. 1546 // Arity 5 -> 1.
4872 template <typename StorageType, typename R,typename X1, typename X2, 1547 template <typename StorageType, typename R,typename X1, typename X2,
4873 typename X3, typename X4, typename X5, typename X6, typename X7, 1548 typename X3, typename X4, typename X5>
4874 typename X8, typename X9, typename X10, typename X11> 1549 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5)> {
4875 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
4876 X11)> {
4877 typedef R(RunType)(BindStateBase*, 1550 typedef R(RunType)(BindStateBase*,
4878 typename CallbackParamTraits<X5>::ForwardType, 1551 typename CallbackParamTraits<X5>::ForwardType);
4879 typename CallbackParamTraits<X6>::ForwardType,
4880 typename CallbackParamTraits<X7>::ForwardType,
4881 typename CallbackParamTraits<X8>::ForwardType,
4882 typename CallbackParamTraits<X9>::ForwardType,
4883 typename CallbackParamTraits<X10>::ForwardType,
4884 typename CallbackParamTraits<X11>::ForwardType);
4885 1552
4886 typedef R(UnboundRunType)(X5, X6, X7, X8, X9, X10, X11); 1553 typedef R(UnboundRunType)(X5);
4887 1554
4888 static R Run(BindStateBase* base, 1555 static R Run(BindStateBase* base,
4889 typename CallbackParamTraits<X5>::ForwardType x5, 1556 typename CallbackParamTraits<X5>::ForwardType x5) {
4890 typename CallbackParamTraits<X6>::ForwardType x6,
4891 typename CallbackParamTraits<X7>::ForwardType x7,
4892 typename CallbackParamTraits<X8>::ForwardType x8,
4893 typename CallbackParamTraits<X9>::ForwardType x9,
4894 typename CallbackParamTraits<X10>::ForwardType x10,
4895 typename CallbackParamTraits<X11>::ForwardType x11) {
4896 StorageType* storage = static_cast<StorageType*>(base); 1557 StorageType* storage = static_cast<StorageType*>(base);
4897 1558
4898 // Local references to make debugger stepping easier. If in a debugger, 1559 // Local references to make debugger stepping easier. If in a debugger,
4899 // you really want to warp ahead and step through the 1560 // you really want to warp ahead and step through the
4900 // InvokeHelper<>::MakeItSo() call below. 1561 // InvokeHelper<>::MakeItSo() call below.
4901 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1562 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4902 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1563 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4903 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1564 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4904 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits; 1565 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4905 1566
4906 typename Bound1UnwrapTraits::ForwardType x1 = 1567 typename Bound1UnwrapTraits::ForwardType x1 =
4907 Bound1UnwrapTraits::Unwrap(storage->p1_); 1568 Bound1UnwrapTraits::Unwrap(storage->p1_);
4908 typename Bound2UnwrapTraits::ForwardType x2 = 1569 typename Bound2UnwrapTraits::ForwardType x2 =
4909 Bound2UnwrapTraits::Unwrap(storage->p2_); 1570 Bound2UnwrapTraits::Unwrap(storage->p2_);
4910 typename Bound3UnwrapTraits::ForwardType x3 = 1571 typename Bound3UnwrapTraits::ForwardType x3 =
4911 Bound3UnwrapTraits::Unwrap(storage->p3_); 1572 Bound3UnwrapTraits::Unwrap(storage->p3_);
4912 typename Bound4UnwrapTraits::ForwardType x4 = 1573 typename Bound4UnwrapTraits::ForwardType x4 =
4913 Bound4UnwrapTraits::Unwrap(storage->p4_); 1574 Bound4UnwrapTraits::Unwrap(storage->p4_);
4914 return InvokeHelper<StorageType::IsWeakCall::value, R, 1575 return InvokeHelper<StorageType::IsWeakCall::value, R,
4915 typename StorageType::RunnableType, 1576 typename StorageType::RunnableType,
4916 void(typename Bound1UnwrapTraits::ForwardType, 1577 void(typename Bound1UnwrapTraits::ForwardType,
4917 typename Bound2UnwrapTraits::ForwardType, 1578 typename Bound2UnwrapTraits::ForwardType,
4918 typename Bound3UnwrapTraits::ForwardType, 1579 typename Bound3UnwrapTraits::ForwardType,
4919 typename Bound4UnwrapTraits::ForwardType, 1580 typename Bound4UnwrapTraits::ForwardType,
4920 typename CallbackParamTraits<X5>::ForwardType x5, 1581 typename CallbackParamTraits<X5>::ForwardType x5)>
4921 typename CallbackParamTraits<X6>::ForwardType x6, 1582 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
4922 typename CallbackParamTraits<X7>::ForwardType x7,
4923 typename CallbackParamTraits<X8>::ForwardType x8,
4924 typename CallbackParamTraits<X9>::ForwardType x9,
4925 typename CallbackParamTraits<X10>::ForwardType x10,
4926 typename CallbackParamTraits<X11>::ForwardType x11)>
4927 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4928 x9, x10, x11);
4929 } 1583 }
4930 }; 1584 };
4931 1585
4932 // Arity 11 -> 6. 1586 // Arity 5 -> 0.
4933 template <typename StorageType, typename R,typename X1, typename X2, 1587 template <typename StorageType, typename R,typename X1, typename X2,
4934 typename X3, typename X4, typename X5, typename X6, typename X7, 1588 typename X3, typename X4, typename X5>
4935 typename X8, typename X9, typename X10, typename X11> 1589 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5)> {
4936 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, 1590 typedef R(RunType)(BindStateBase*);
4937 X11)> {
4938 typedef R(RunType)(BindStateBase*,
4939 typename CallbackParamTraits<X6>::ForwardType,
4940 typename CallbackParamTraits<X7>::ForwardType,
4941 typename CallbackParamTraits<X8>::ForwardType,
4942 typename CallbackParamTraits<X9>::ForwardType,
4943 typename CallbackParamTraits<X10>::ForwardType,
4944 typename CallbackParamTraits<X11>::ForwardType);
4945 1591
4946 typedef R(UnboundRunType)(X6, X7, X8, X9, X10, X11); 1592 typedef R(UnboundRunType)();
4947 1593
4948 static R Run(BindStateBase* base, 1594 static R Run(BindStateBase* base) {
4949 typename CallbackParamTraits<X6>::ForwardType x6,
4950 typename CallbackParamTraits<X7>::ForwardType x7,
4951 typename CallbackParamTraits<X8>::ForwardType x8,
4952 typename CallbackParamTraits<X9>::ForwardType x9,
4953 typename CallbackParamTraits<X10>::ForwardType x10,
4954 typename CallbackParamTraits<X11>::ForwardType x11) {
4955 StorageType* storage = static_cast<StorageType*>(base); 1595 StorageType* storage = static_cast<StorageType*>(base);
4956 1596
4957 // Local references to make debugger stepping easier. If in a debugger, 1597 // Local references to make debugger stepping easier. If in a debugger,
4958 // you really want to warp ahead and step through the 1598 // you really want to warp ahead and step through the
4959 // InvokeHelper<>::MakeItSo() call below. 1599 // InvokeHelper<>::MakeItSo() call below.
4960 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1600 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
4961 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1601 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
4962 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1602 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
4963 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits; 1603 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
4964 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits; 1604 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
4965 1605
4966 typename Bound1UnwrapTraits::ForwardType x1 = 1606 typename Bound1UnwrapTraits::ForwardType x1 =
4967 Bound1UnwrapTraits::Unwrap(storage->p1_); 1607 Bound1UnwrapTraits::Unwrap(storage->p1_);
4968 typename Bound2UnwrapTraits::ForwardType x2 = 1608 typename Bound2UnwrapTraits::ForwardType x2 =
4969 Bound2UnwrapTraits::Unwrap(storage->p2_); 1609 Bound2UnwrapTraits::Unwrap(storage->p2_);
4970 typename Bound3UnwrapTraits::ForwardType x3 = 1610 typename Bound3UnwrapTraits::ForwardType x3 =
4971 Bound3UnwrapTraits::Unwrap(storage->p3_); 1611 Bound3UnwrapTraits::Unwrap(storage->p3_);
4972 typename Bound4UnwrapTraits::ForwardType x4 = 1612 typename Bound4UnwrapTraits::ForwardType x4 =
4973 Bound4UnwrapTraits::Unwrap(storage->p4_); 1613 Bound4UnwrapTraits::Unwrap(storage->p4_);
4974 typename Bound5UnwrapTraits::ForwardType x5 = 1614 typename Bound5UnwrapTraits::ForwardType x5 =
4975 Bound5UnwrapTraits::Unwrap(storage->p5_); 1615 Bound5UnwrapTraits::Unwrap(storage->p5_);
4976 return InvokeHelper<StorageType::IsWeakCall::value, R, 1616 return InvokeHelper<StorageType::IsWeakCall::value, R,
4977 typename StorageType::RunnableType, 1617 typename StorageType::RunnableType,
4978 void(typename Bound1UnwrapTraits::ForwardType, 1618 void(typename Bound1UnwrapTraits::ForwardType,
4979 typename Bound2UnwrapTraits::ForwardType, 1619 typename Bound2UnwrapTraits::ForwardType,
4980 typename Bound3UnwrapTraits::ForwardType, 1620 typename Bound3UnwrapTraits::ForwardType,
4981 typename Bound4UnwrapTraits::ForwardType, 1621 typename Bound4UnwrapTraits::ForwardType,
4982 typename Bound5UnwrapTraits::ForwardType, 1622 typename Bound5UnwrapTraits::ForwardType)>
4983 typename CallbackParamTraits<X6>::ForwardType x6, 1623 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5);
4984 typename CallbackParamTraits<X7>::ForwardType x7,
4985 typename CallbackParamTraits<X8>::ForwardType x8,
4986 typename CallbackParamTraits<X9>::ForwardType x9,
4987 typename CallbackParamTraits<X10>::ForwardType x10,
4988 typename CallbackParamTraits<X11>::ForwardType x11)>
4989 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
4990 x9, x10, x11);
4991 } 1624 }
4992 }; 1625 };
4993 1626
4994 // Arity 11 -> 5. 1627 // Arity 6 -> 6.
4995 template <typename StorageType, typename R,typename X1, typename X2, 1628 template <typename StorageType, typename R,typename X1, typename X2,
4996 typename X3, typename X4, typename X5, typename X6, typename X7, 1629 typename X3, typename X4, typename X5, typename X6>
4997 typename X8, typename X9, typename X10, typename X11> 1630 struct Invoker<0, StorageType, R(X1, X2, X3, X4, X5, X6)> {
4998 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
4999 X11)> {
5000 typedef R(RunType)(BindStateBase*, 1631 typedef R(RunType)(BindStateBase*,
5001 typename CallbackParamTraits<X7>::ForwardType, 1632 typename CallbackParamTraits<X1>::ForwardType,
5002 typename CallbackParamTraits<X8>::ForwardType, 1633 typename CallbackParamTraits<X2>::ForwardType,
5003 typename CallbackParamTraits<X9>::ForwardType, 1634 typename CallbackParamTraits<X3>::ForwardType,
5004 typename CallbackParamTraits<X10>::ForwardType, 1635 typename CallbackParamTraits<X4>::ForwardType,
5005 typename CallbackParamTraits<X11>::ForwardType); 1636 typename CallbackParamTraits<X5>::ForwardType,
1637 typename CallbackParamTraits<X6>::ForwardType);
5006 1638
5007 typedef R(UnboundRunType)(X7, X8, X9, X10, X11); 1639 typedef R(UnboundRunType)(X1, X2, X3, X4, X5, X6);
5008 1640
5009 static R Run(BindStateBase* base, 1641 static R Run(BindStateBase* base,
5010 typename CallbackParamTraits<X7>::ForwardType x7, 1642 typename CallbackParamTraits<X1>::ForwardType x1,
5011 typename CallbackParamTraits<X8>::ForwardType x8, 1643 typename CallbackParamTraits<X2>::ForwardType x2,
5012 typename CallbackParamTraits<X9>::ForwardType x9, 1644 typename CallbackParamTraits<X3>::ForwardType x3,
5013 typename CallbackParamTraits<X10>::ForwardType x10, 1645 typename CallbackParamTraits<X4>::ForwardType x4,
5014 typename CallbackParamTraits<X11>::ForwardType x11) { 1646 typename CallbackParamTraits<X5>::ForwardType x5,
1647 typename CallbackParamTraits<X6>::ForwardType x6) {
1648 StorageType* storage = static_cast<StorageType*>(base);
1649
1650 // Local references to make debugger stepping easier. If in a debugger,
1651 // you really want to warp ahead and step through the
1652 // InvokeHelper<>::MakeItSo() call below.
1653
1654 return InvokeHelper<StorageType::IsWeakCall::value, R,
1655 typename StorageType::RunnableType,
1656 void(typename CallbackParamTraits<X1>::ForwardType x1,
1657 typename CallbackParamTraits<X2>::ForwardType x2,
1658 typename CallbackParamTraits<X3>::ForwardType x3,
1659 typename CallbackParamTraits<X4>::ForwardType x4,
1660 typename CallbackParamTraits<X5>::ForwardType x5,
1661 typename CallbackParamTraits<X6>::ForwardType x6)>
1662 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
1663 }
1664 };
1665
1666 // Arity 6 -> 5.
1667 template <typename StorageType, typename R,typename X1, typename X2,
1668 typename X3, typename X4, typename X5, typename X6>
1669 struct Invoker<1, StorageType, R(X1, X2, X3, X4, X5, X6)> {
1670 typedef R(RunType)(BindStateBase*,
1671 typename CallbackParamTraits<X2>::ForwardType,
1672 typename CallbackParamTraits<X3>::ForwardType,
1673 typename CallbackParamTraits<X4>::ForwardType,
1674 typename CallbackParamTraits<X5>::ForwardType,
1675 typename CallbackParamTraits<X6>::ForwardType);
1676
1677 typedef R(UnboundRunType)(X2, X3, X4, X5, X6);
1678
1679 static R Run(BindStateBase* base,
1680 typename CallbackParamTraits<X2>::ForwardType x2,
1681 typename CallbackParamTraits<X3>::ForwardType x3,
1682 typename CallbackParamTraits<X4>::ForwardType x4,
1683 typename CallbackParamTraits<X5>::ForwardType x5,
1684 typename CallbackParamTraits<X6>::ForwardType x6) {
5015 StorageType* storage = static_cast<StorageType*>(base); 1685 StorageType* storage = static_cast<StorageType*>(base);
5016 1686
5017 // Local references to make debugger stepping easier. If in a debugger, 1687 // Local references to make debugger stepping easier. If in a debugger,
5018 // you really want to warp ahead and step through the 1688 // you really want to warp ahead and step through the
5019 // InvokeHelper<>::MakeItSo() call below. 1689 // InvokeHelper<>::MakeItSo() call below.
5020 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1690 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
5021 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
5022 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
5023 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
5024 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
5025 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
5026 1691
5027 typename Bound1UnwrapTraits::ForwardType x1 = 1692 typename Bound1UnwrapTraits::ForwardType x1 =
5028 Bound1UnwrapTraits::Unwrap(storage->p1_); 1693 Bound1UnwrapTraits::Unwrap(storage->p1_);
5029 typename Bound2UnwrapTraits::ForwardType x2 =
5030 Bound2UnwrapTraits::Unwrap(storage->p2_);
5031 typename Bound3UnwrapTraits::ForwardType x3 =
5032 Bound3UnwrapTraits::Unwrap(storage->p3_);
5033 typename Bound4UnwrapTraits::ForwardType x4 =
5034 Bound4UnwrapTraits::Unwrap(storage->p4_);
5035 typename Bound5UnwrapTraits::ForwardType x5 =
5036 Bound5UnwrapTraits::Unwrap(storage->p5_);
5037 typename Bound6UnwrapTraits::ForwardType x6 =
5038 Bound6UnwrapTraits::Unwrap(storage->p6_);
5039 return InvokeHelper<StorageType::IsWeakCall::value, R, 1694 return InvokeHelper<StorageType::IsWeakCall::value, R,
5040 typename StorageType::RunnableType, 1695 typename StorageType::RunnableType,
5041 void(typename Bound1UnwrapTraits::ForwardType, 1696 void(typename Bound1UnwrapTraits::ForwardType,
5042 typename Bound2UnwrapTraits::ForwardType, 1697 typename CallbackParamTraits<X2>::ForwardType x2,
5043 typename Bound3UnwrapTraits::ForwardType, 1698 typename CallbackParamTraits<X3>::ForwardType x3,
5044 typename Bound4UnwrapTraits::ForwardType, 1699 typename CallbackParamTraits<X4>::ForwardType x4,
5045 typename Bound5UnwrapTraits::ForwardType, 1700 typename CallbackParamTraits<X5>::ForwardType x5,
5046 typename Bound6UnwrapTraits::ForwardType, 1701 typename CallbackParamTraits<X6>::ForwardType x6)>
5047 typename CallbackParamTraits<X7>::ForwardType x7, 1702 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
5048 typename CallbackParamTraits<X8>::ForwardType x8,
5049 typename CallbackParamTraits<X9>::ForwardType x9,
5050 typename CallbackParamTraits<X10>::ForwardType x10,
5051 typename CallbackParamTraits<X11>::ForwardType x11)>
5052 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
5053 x9, x10, x11);
5054 } 1703 }
5055 }; 1704 };
5056 1705
5057 // Arity 11 -> 4. 1706 // Arity 6 -> 4.
5058 template <typename StorageType, typename R,typename X1, typename X2, 1707 template <typename StorageType, typename R,typename X1, typename X2,
5059 typename X3, typename X4, typename X5, typename X6, typename X7, 1708 typename X3, typename X4, typename X5, typename X6>
5060 typename X8, typename X9, typename X10, typename X11> 1709 struct Invoker<2, StorageType, R(X1, X2, X3, X4, X5, X6)> {
5061 struct Invoker<7, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
5062 X11)> {
5063 typedef R(RunType)(BindStateBase*, 1710 typedef R(RunType)(BindStateBase*,
5064 typename CallbackParamTraits<X8>::ForwardType, 1711 typename CallbackParamTraits<X3>::ForwardType,
5065 typename CallbackParamTraits<X9>::ForwardType, 1712 typename CallbackParamTraits<X4>::ForwardType,
5066 typename CallbackParamTraits<X10>::ForwardType, 1713 typename CallbackParamTraits<X5>::ForwardType,
5067 typename CallbackParamTraits<X11>::ForwardType); 1714 typename CallbackParamTraits<X6>::ForwardType);
5068 1715
5069 typedef R(UnboundRunType)(X8, X9, X10, X11); 1716 typedef R(UnboundRunType)(X3, X4, X5, X6);
5070 1717
5071 static R Run(BindStateBase* base, 1718 static R Run(BindStateBase* base,
5072 typename CallbackParamTraits<X8>::ForwardType x8, 1719 typename CallbackParamTraits<X3>::ForwardType x3,
5073 typename CallbackParamTraits<X9>::ForwardType x9, 1720 typename CallbackParamTraits<X4>::ForwardType x4,
5074 typename CallbackParamTraits<X10>::ForwardType x10, 1721 typename CallbackParamTraits<X5>::ForwardType x5,
5075 typename CallbackParamTraits<X11>::ForwardType x11) { 1722 typename CallbackParamTraits<X6>::ForwardType x6) {
5076 StorageType* storage = static_cast<StorageType*>(base); 1723 StorageType* storage = static_cast<StorageType*>(base);
5077 1724
5078 // Local references to make debugger stepping easier. If in a debugger, 1725 // Local references to make debugger stepping easier. If in a debugger,
5079 // you really want to warp ahead and step through the 1726 // you really want to warp ahead and step through the
5080 // InvokeHelper<>::MakeItSo() call below. 1727 // InvokeHelper<>::MakeItSo() call below.
5081 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1728 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
5082 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1729 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
5083 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
5084 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
5085 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
5086 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
5087 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
5088 1730
5089 typename Bound1UnwrapTraits::ForwardType x1 = 1731 typename Bound1UnwrapTraits::ForwardType x1 =
5090 Bound1UnwrapTraits::Unwrap(storage->p1_); 1732 Bound1UnwrapTraits::Unwrap(storage->p1_);
5091 typename Bound2UnwrapTraits::ForwardType x2 = 1733 typename Bound2UnwrapTraits::ForwardType x2 =
5092 Bound2UnwrapTraits::Unwrap(storage->p2_); 1734 Bound2UnwrapTraits::Unwrap(storage->p2_);
5093 typename Bound3UnwrapTraits::ForwardType x3 =
5094 Bound3UnwrapTraits::Unwrap(storage->p3_);
5095 typename Bound4UnwrapTraits::ForwardType x4 =
5096 Bound4UnwrapTraits::Unwrap(storage->p4_);
5097 typename Bound5UnwrapTraits::ForwardType x5 =
5098 Bound5UnwrapTraits::Unwrap(storage->p5_);
5099 typename Bound6UnwrapTraits::ForwardType x6 =
5100 Bound6UnwrapTraits::Unwrap(storage->p6_);
5101 typename Bound7UnwrapTraits::ForwardType x7 =
5102 Bound7UnwrapTraits::Unwrap(storage->p7_);
5103 return InvokeHelper<StorageType::IsWeakCall::value, R, 1735 return InvokeHelper<StorageType::IsWeakCall::value, R,
5104 typename StorageType::RunnableType, 1736 typename StorageType::RunnableType,
5105 void(typename Bound1UnwrapTraits::ForwardType, 1737 void(typename Bound1UnwrapTraits::ForwardType,
5106 typename Bound2UnwrapTraits::ForwardType, 1738 typename Bound2UnwrapTraits::ForwardType,
5107 typename Bound3UnwrapTraits::ForwardType, 1739 typename CallbackParamTraits<X3>::ForwardType x3,
5108 typename Bound4UnwrapTraits::ForwardType, 1740 typename CallbackParamTraits<X4>::ForwardType x4,
5109 typename Bound5UnwrapTraits::ForwardType, 1741 typename CallbackParamTraits<X5>::ForwardType x5,
5110 typename Bound6UnwrapTraits::ForwardType, 1742 typename CallbackParamTraits<X6>::ForwardType x6)>
5111 typename Bound7UnwrapTraits::ForwardType, 1743 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
5112 typename CallbackParamTraits<X8>::ForwardType x8,
5113 typename CallbackParamTraits<X9>::ForwardType x9,
5114 typename CallbackParamTraits<X10>::ForwardType x10,
5115 typename CallbackParamTraits<X11>::ForwardType x11)>
5116 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
5117 x9, x10, x11);
5118 } 1744 }
5119 }; 1745 };
5120 1746
5121 // Arity 11 -> 3. 1747 // Arity 6 -> 3.
5122 template <typename StorageType, typename R,typename X1, typename X2, 1748 template <typename StorageType, typename R,typename X1, typename X2,
5123 typename X3, typename X4, typename X5, typename X6, typename X7, 1749 typename X3, typename X4, typename X5, typename X6>
5124 typename X8, typename X9, typename X10, typename X11> 1750 struct Invoker<3, StorageType, R(X1, X2, X3, X4, X5, X6)> {
5125 struct Invoker<8, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
5126 X11)> {
5127 typedef R(RunType)(BindStateBase*, 1751 typedef R(RunType)(BindStateBase*,
5128 typename CallbackParamTraits<X9>::ForwardType, 1752 typename CallbackParamTraits<X4>::ForwardType,
5129 typename CallbackParamTraits<X10>::ForwardType, 1753 typename CallbackParamTraits<X5>::ForwardType,
5130 typename CallbackParamTraits<X11>::ForwardType); 1754 typename CallbackParamTraits<X6>::ForwardType);
5131 1755
5132 typedef R(UnboundRunType)(X9, X10, X11); 1756 typedef R(UnboundRunType)(X4, X5, X6);
5133 1757
5134 static R Run(BindStateBase* base, 1758 static R Run(BindStateBase* base,
5135 typename CallbackParamTraits<X9>::ForwardType x9, 1759 typename CallbackParamTraits<X4>::ForwardType x4,
5136 typename CallbackParamTraits<X10>::ForwardType x10, 1760 typename CallbackParamTraits<X5>::ForwardType x5,
5137 typename CallbackParamTraits<X11>::ForwardType x11) { 1761 typename CallbackParamTraits<X6>::ForwardType x6) {
5138 StorageType* storage = static_cast<StorageType*>(base); 1762 StorageType* storage = static_cast<StorageType*>(base);
5139 1763
5140 // Local references to make debugger stepping easier. If in a debugger, 1764 // Local references to make debugger stepping easier. If in a debugger,
5141 // you really want to warp ahead and step through the 1765 // you really want to warp ahead and step through the
5142 // InvokeHelper<>::MakeItSo() call below. 1766 // InvokeHelper<>::MakeItSo() call below.
5143 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1767 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
5144 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1768 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
5145 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1769 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
5146 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
5147 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
5148 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
5149 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
5150 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
5151 1770
5152 typename Bound1UnwrapTraits::ForwardType x1 = 1771 typename Bound1UnwrapTraits::ForwardType x1 =
5153 Bound1UnwrapTraits::Unwrap(storage->p1_); 1772 Bound1UnwrapTraits::Unwrap(storage->p1_);
5154 typename Bound2UnwrapTraits::ForwardType x2 = 1773 typename Bound2UnwrapTraits::ForwardType x2 =
5155 Bound2UnwrapTraits::Unwrap(storage->p2_); 1774 Bound2UnwrapTraits::Unwrap(storage->p2_);
5156 typename Bound3UnwrapTraits::ForwardType x3 = 1775 typename Bound3UnwrapTraits::ForwardType x3 =
5157 Bound3UnwrapTraits::Unwrap(storage->p3_); 1776 Bound3UnwrapTraits::Unwrap(storage->p3_);
5158 typename Bound4UnwrapTraits::ForwardType x4 =
5159 Bound4UnwrapTraits::Unwrap(storage->p4_);
5160 typename Bound5UnwrapTraits::ForwardType x5 =
5161 Bound5UnwrapTraits::Unwrap(storage->p5_);
5162 typename Bound6UnwrapTraits::ForwardType x6 =
5163 Bound6UnwrapTraits::Unwrap(storage->p6_);
5164 typename Bound7UnwrapTraits::ForwardType x7 =
5165 Bound7UnwrapTraits::Unwrap(storage->p7_);
5166 typename Bound8UnwrapTraits::ForwardType x8 =
5167 Bound8UnwrapTraits::Unwrap(storage->p8_);
5168 return InvokeHelper<StorageType::IsWeakCall::value, R, 1777 return InvokeHelper<StorageType::IsWeakCall::value, R,
5169 typename StorageType::RunnableType, 1778 typename StorageType::RunnableType,
5170 void(typename Bound1UnwrapTraits::ForwardType, 1779 void(typename Bound1UnwrapTraits::ForwardType,
5171 typename Bound2UnwrapTraits::ForwardType, 1780 typename Bound2UnwrapTraits::ForwardType,
5172 typename Bound3UnwrapTraits::ForwardType, 1781 typename Bound3UnwrapTraits::ForwardType,
5173 typename Bound4UnwrapTraits::ForwardType, 1782 typename CallbackParamTraits<X4>::ForwardType x4,
5174 typename Bound5UnwrapTraits::ForwardType, 1783 typename CallbackParamTraits<X5>::ForwardType x5,
5175 typename Bound6UnwrapTraits::ForwardType, 1784 typename CallbackParamTraits<X6>::ForwardType x6)>
5176 typename Bound7UnwrapTraits::ForwardType, 1785 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
5177 typename Bound8UnwrapTraits::ForwardType,
5178 typename CallbackParamTraits<X9>::ForwardType x9,
5179 typename CallbackParamTraits<X10>::ForwardType x10,
5180 typename CallbackParamTraits<X11>::ForwardType x11)>
5181 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
5182 x9, x10, x11);
5183 } 1786 }
5184 }; 1787 };
5185 1788
5186 // Arity 11 -> 2. 1789 // Arity 6 -> 2.
5187 template <typename StorageType, typename R,typename X1, typename X2, 1790 template <typename StorageType, typename R,typename X1, typename X2,
5188 typename X3, typename X4, typename X5, typename X6, typename X7, 1791 typename X3, typename X4, typename X5, typename X6>
5189 typename X8, typename X9, typename X10, typename X11> 1792 struct Invoker<4, StorageType, R(X1, X2, X3, X4, X5, X6)> {
5190 struct Invoker<9, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
5191 X11)> {
5192 typedef R(RunType)(BindStateBase*, 1793 typedef R(RunType)(BindStateBase*,
5193 typename CallbackParamTraits<X10>::ForwardType, 1794 typename CallbackParamTraits<X5>::ForwardType,
5194 typename CallbackParamTraits<X11>::ForwardType); 1795 typename CallbackParamTraits<X6>::ForwardType);
5195 1796
5196 typedef R(UnboundRunType)(X10, X11); 1797 typedef R(UnboundRunType)(X5, X6);
5197 1798
5198 static R Run(BindStateBase* base, 1799 static R Run(BindStateBase* base,
5199 typename CallbackParamTraits<X10>::ForwardType x10, 1800 typename CallbackParamTraits<X5>::ForwardType x5,
5200 typename CallbackParamTraits<X11>::ForwardType x11) { 1801 typename CallbackParamTraits<X6>::ForwardType x6) {
5201 StorageType* storage = static_cast<StorageType*>(base); 1802 StorageType* storage = static_cast<StorageType*>(base);
5202 1803
5203 // Local references to make debugger stepping easier. If in a debugger, 1804 // Local references to make debugger stepping easier. If in a debugger,
5204 // you really want to warp ahead and step through the 1805 // you really want to warp ahead and step through the
5205 // InvokeHelper<>::MakeItSo() call below. 1806 // InvokeHelper<>::MakeItSo() call below.
5206 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1807 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
5207 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1808 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
5208 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1809 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
5209 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits; 1810 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
5210 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
5211 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
5212 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
5213 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
5214 typedef typename StorageType::Bound9UnwrapTraits Bound9UnwrapTraits;
5215 1811
5216 typename Bound1UnwrapTraits::ForwardType x1 = 1812 typename Bound1UnwrapTraits::ForwardType x1 =
5217 Bound1UnwrapTraits::Unwrap(storage->p1_); 1813 Bound1UnwrapTraits::Unwrap(storage->p1_);
5218 typename Bound2UnwrapTraits::ForwardType x2 = 1814 typename Bound2UnwrapTraits::ForwardType x2 =
5219 Bound2UnwrapTraits::Unwrap(storage->p2_); 1815 Bound2UnwrapTraits::Unwrap(storage->p2_);
5220 typename Bound3UnwrapTraits::ForwardType x3 = 1816 typename Bound3UnwrapTraits::ForwardType x3 =
5221 Bound3UnwrapTraits::Unwrap(storage->p3_); 1817 Bound3UnwrapTraits::Unwrap(storage->p3_);
5222 typename Bound4UnwrapTraits::ForwardType x4 = 1818 typename Bound4UnwrapTraits::ForwardType x4 =
5223 Bound4UnwrapTraits::Unwrap(storage->p4_); 1819 Bound4UnwrapTraits::Unwrap(storage->p4_);
5224 typename Bound5UnwrapTraits::ForwardType x5 =
5225 Bound5UnwrapTraits::Unwrap(storage->p5_);
5226 typename Bound6UnwrapTraits::ForwardType x6 =
5227 Bound6UnwrapTraits::Unwrap(storage->p6_);
5228 typename Bound7UnwrapTraits::ForwardType x7 =
5229 Bound7UnwrapTraits::Unwrap(storage->p7_);
5230 typename Bound8UnwrapTraits::ForwardType x8 =
5231 Bound8UnwrapTraits::Unwrap(storage->p8_);
5232 typename Bound9UnwrapTraits::ForwardType x9 =
5233 Bound9UnwrapTraits::Unwrap(storage->p9_);
5234 return InvokeHelper<StorageType::IsWeakCall::value, R, 1820 return InvokeHelper<StorageType::IsWeakCall::value, R,
5235 typename StorageType::RunnableType, 1821 typename StorageType::RunnableType,
5236 void(typename Bound1UnwrapTraits::ForwardType, 1822 void(typename Bound1UnwrapTraits::ForwardType,
5237 typename Bound2UnwrapTraits::ForwardType, 1823 typename Bound2UnwrapTraits::ForwardType,
5238 typename Bound3UnwrapTraits::ForwardType, 1824 typename Bound3UnwrapTraits::ForwardType,
5239 typename Bound4UnwrapTraits::ForwardType, 1825 typename Bound4UnwrapTraits::ForwardType,
5240 typename Bound5UnwrapTraits::ForwardType, 1826 typename CallbackParamTraits<X5>::ForwardType x5,
5241 typename Bound6UnwrapTraits::ForwardType, 1827 typename CallbackParamTraits<X6>::ForwardType x6)>
5242 typename Bound7UnwrapTraits::ForwardType, 1828 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
5243 typename Bound8UnwrapTraits::ForwardType,
5244 typename Bound9UnwrapTraits::ForwardType,
5245 typename CallbackParamTraits<X10>::ForwardType x10,
5246 typename CallbackParamTraits<X11>::ForwardType x11)>
5247 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
5248 x9, x10, x11);
5249 } 1829 }
5250 }; 1830 };
5251 1831
5252 // Arity 11 -> 1. 1832 // Arity 6 -> 1.
5253 template <typename StorageType, typename R,typename X1, typename X2, 1833 template <typename StorageType, typename R,typename X1, typename X2,
5254 typename X3, typename X4, typename X5, typename X6, typename X7, 1834 typename X3, typename X4, typename X5, typename X6>
5255 typename X8, typename X9, typename X10, typename X11> 1835 struct Invoker<5, StorageType, R(X1, X2, X3, X4, X5, X6)> {
5256 struct Invoker<10, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
5257 X11)> {
5258 typedef R(RunType)(BindStateBase*, 1836 typedef R(RunType)(BindStateBase*,
5259 typename CallbackParamTraits<X11>::ForwardType); 1837 typename CallbackParamTraits<X6>::ForwardType);
5260 1838
5261 typedef R(UnboundRunType)(X11); 1839 typedef R(UnboundRunType)(X6);
5262 1840
5263 static R Run(BindStateBase* base, 1841 static R Run(BindStateBase* base,
5264 typename CallbackParamTraits<X11>::ForwardType x11) { 1842 typename CallbackParamTraits<X6>::ForwardType x6) {
5265 StorageType* storage = static_cast<StorageType*>(base); 1843 StorageType* storage = static_cast<StorageType*>(base);
5266 1844
5267 // Local references to make debugger stepping easier. If in a debugger, 1845 // Local references to make debugger stepping easier. If in a debugger,
5268 // you really want to warp ahead and step through the 1846 // you really want to warp ahead and step through the
5269 // InvokeHelper<>::MakeItSo() call below. 1847 // InvokeHelper<>::MakeItSo() call below.
5270 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1848 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
5271 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1849 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
5272 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1850 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
5273 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits; 1851 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
5274 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits; 1852 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
5275 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
5276 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
5277 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
5278 typedef typename StorageType::Bound9UnwrapTraits Bound9UnwrapTraits;
5279 typedef typename StorageType::Bound10UnwrapTraits Bound10UnwrapTraits;
5280 1853
5281 typename Bound1UnwrapTraits::ForwardType x1 = 1854 typename Bound1UnwrapTraits::ForwardType x1 =
5282 Bound1UnwrapTraits::Unwrap(storage->p1_); 1855 Bound1UnwrapTraits::Unwrap(storage->p1_);
5283 typename Bound2UnwrapTraits::ForwardType x2 = 1856 typename Bound2UnwrapTraits::ForwardType x2 =
5284 Bound2UnwrapTraits::Unwrap(storage->p2_); 1857 Bound2UnwrapTraits::Unwrap(storage->p2_);
5285 typename Bound3UnwrapTraits::ForwardType x3 = 1858 typename Bound3UnwrapTraits::ForwardType x3 =
5286 Bound3UnwrapTraits::Unwrap(storage->p3_); 1859 Bound3UnwrapTraits::Unwrap(storage->p3_);
5287 typename Bound4UnwrapTraits::ForwardType x4 = 1860 typename Bound4UnwrapTraits::ForwardType x4 =
5288 Bound4UnwrapTraits::Unwrap(storage->p4_); 1861 Bound4UnwrapTraits::Unwrap(storage->p4_);
5289 typename Bound5UnwrapTraits::ForwardType x5 = 1862 typename Bound5UnwrapTraits::ForwardType x5 =
5290 Bound5UnwrapTraits::Unwrap(storage->p5_); 1863 Bound5UnwrapTraits::Unwrap(storage->p5_);
5291 typename Bound6UnwrapTraits::ForwardType x6 =
5292 Bound6UnwrapTraits::Unwrap(storage->p6_);
5293 typename Bound7UnwrapTraits::ForwardType x7 =
5294 Bound7UnwrapTraits::Unwrap(storage->p7_);
5295 typename Bound8UnwrapTraits::ForwardType x8 =
5296 Bound8UnwrapTraits::Unwrap(storage->p8_);
5297 typename Bound9UnwrapTraits::ForwardType x9 =
5298 Bound9UnwrapTraits::Unwrap(storage->p9_);
5299 typename Bound10UnwrapTraits::ForwardType x10 =
5300 Bound10UnwrapTraits::Unwrap(storage->p10_);
5301 return InvokeHelper<StorageType::IsWeakCall::value, R, 1864 return InvokeHelper<StorageType::IsWeakCall::value, R,
5302 typename StorageType::RunnableType, 1865 typename StorageType::RunnableType,
5303 void(typename Bound1UnwrapTraits::ForwardType, 1866 void(typename Bound1UnwrapTraits::ForwardType,
5304 typename Bound2UnwrapTraits::ForwardType, 1867 typename Bound2UnwrapTraits::ForwardType,
5305 typename Bound3UnwrapTraits::ForwardType, 1868 typename Bound3UnwrapTraits::ForwardType,
5306 typename Bound4UnwrapTraits::ForwardType, 1869 typename Bound4UnwrapTraits::ForwardType,
5307 typename Bound5UnwrapTraits::ForwardType, 1870 typename Bound5UnwrapTraits::ForwardType,
5308 typename Bound6UnwrapTraits::ForwardType, 1871 typename CallbackParamTraits<X6>::ForwardType x6)>
5309 typename Bound7UnwrapTraits::ForwardType, 1872 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
5310 typename Bound8UnwrapTraits::ForwardType,
5311 typename Bound9UnwrapTraits::ForwardType,
5312 typename Bound10UnwrapTraits::ForwardType,
5313 typename CallbackParamTraits<X11>::ForwardType x11)>
5314 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
5315 x9, x10, x11);
5316 } 1873 }
5317 }; 1874 };
5318 1875
5319 // Arity 11 -> 0. 1876 // Arity 6 -> 0.
5320 template <typename StorageType, typename R,typename X1, typename X2, 1877 template <typename StorageType, typename R,typename X1, typename X2,
5321 typename X3, typename X4, typename X5, typename X6, typename X7, 1878 typename X3, typename X4, typename X5, typename X6>
5322 typename X8, typename X9, typename X10, typename X11> 1879 struct Invoker<6, StorageType, R(X1, X2, X3, X4, X5, X6)> {
5323 struct Invoker<11, StorageType, R(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10,
5324 X11)> {
5325 typedef R(RunType)(BindStateBase*); 1880 typedef R(RunType)(BindStateBase*);
5326 1881
5327 typedef R(UnboundRunType)(); 1882 typedef R(UnboundRunType)();
5328 1883
5329 static R Run(BindStateBase* base) { 1884 static R Run(BindStateBase* base) {
5330 StorageType* storage = static_cast<StorageType*>(base); 1885 StorageType* storage = static_cast<StorageType*>(base);
5331 1886
5332 // Local references to make debugger stepping easier. If in a debugger, 1887 // Local references to make debugger stepping easier. If in a debugger,
5333 // you really want to warp ahead and step through the 1888 // you really want to warp ahead and step through the
5334 // InvokeHelper<>::MakeItSo() call below. 1889 // InvokeHelper<>::MakeItSo() call below.
5335 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits; 1890 typedef typename StorageType::Bound1UnwrapTraits Bound1UnwrapTraits;
5336 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits; 1891 typedef typename StorageType::Bound2UnwrapTraits Bound2UnwrapTraits;
5337 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits; 1892 typedef typename StorageType::Bound3UnwrapTraits Bound3UnwrapTraits;
5338 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits; 1893 typedef typename StorageType::Bound4UnwrapTraits Bound4UnwrapTraits;
5339 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits; 1894 typedef typename StorageType::Bound5UnwrapTraits Bound5UnwrapTraits;
5340 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits; 1895 typedef typename StorageType::Bound6UnwrapTraits Bound6UnwrapTraits;
5341 typedef typename StorageType::Bound7UnwrapTraits Bound7UnwrapTraits;
5342 typedef typename StorageType::Bound8UnwrapTraits Bound8UnwrapTraits;
5343 typedef typename StorageType::Bound9UnwrapTraits Bound9UnwrapTraits;
5344 typedef typename StorageType::Bound10UnwrapTraits Bound10UnwrapTraits;
5345 typedef typename StorageType::Bound11UnwrapTraits Bound11UnwrapTraits;
5346 1896
5347 typename Bound1UnwrapTraits::ForwardType x1 = 1897 typename Bound1UnwrapTraits::ForwardType x1 =
5348 Bound1UnwrapTraits::Unwrap(storage->p1_); 1898 Bound1UnwrapTraits::Unwrap(storage->p1_);
5349 typename Bound2UnwrapTraits::ForwardType x2 = 1899 typename Bound2UnwrapTraits::ForwardType x2 =
5350 Bound2UnwrapTraits::Unwrap(storage->p2_); 1900 Bound2UnwrapTraits::Unwrap(storage->p2_);
5351 typename Bound3UnwrapTraits::ForwardType x3 = 1901 typename Bound3UnwrapTraits::ForwardType x3 =
5352 Bound3UnwrapTraits::Unwrap(storage->p3_); 1902 Bound3UnwrapTraits::Unwrap(storage->p3_);
5353 typename Bound4UnwrapTraits::ForwardType x4 = 1903 typename Bound4UnwrapTraits::ForwardType x4 =
5354 Bound4UnwrapTraits::Unwrap(storage->p4_); 1904 Bound4UnwrapTraits::Unwrap(storage->p4_);
5355 typename Bound5UnwrapTraits::ForwardType x5 = 1905 typename Bound5UnwrapTraits::ForwardType x5 =
5356 Bound5UnwrapTraits::Unwrap(storage->p5_); 1906 Bound5UnwrapTraits::Unwrap(storage->p5_);
5357 typename Bound6UnwrapTraits::ForwardType x6 = 1907 typename Bound6UnwrapTraits::ForwardType x6 =
5358 Bound6UnwrapTraits::Unwrap(storage->p6_); 1908 Bound6UnwrapTraits::Unwrap(storage->p6_);
5359 typename Bound7UnwrapTraits::ForwardType x7 =
5360 Bound7UnwrapTraits::Unwrap(storage->p7_);
5361 typename Bound8UnwrapTraits::ForwardType x8 =
5362 Bound8UnwrapTraits::Unwrap(storage->p8_);
5363 typename Bound9UnwrapTraits::ForwardType x9 =
5364 Bound9UnwrapTraits::Unwrap(storage->p9_);
5365 typename Bound10UnwrapTraits::ForwardType x10 =
5366 Bound10UnwrapTraits::Unwrap(storage->p10_);
5367 typename Bound11UnwrapTraits::ForwardType x11 =
5368 Bound11UnwrapTraits::Unwrap(storage->p11_);
5369 return InvokeHelper<StorageType::IsWeakCall::value, R, 1909 return InvokeHelper<StorageType::IsWeakCall::value, R,
5370 typename StorageType::RunnableType, 1910 typename StorageType::RunnableType,
5371 void(typename Bound1UnwrapTraits::ForwardType, 1911 void(typename Bound1UnwrapTraits::ForwardType,
5372 typename Bound2UnwrapTraits::ForwardType, 1912 typename Bound2UnwrapTraits::ForwardType,
5373 typename Bound3UnwrapTraits::ForwardType, 1913 typename Bound3UnwrapTraits::ForwardType,
5374 typename Bound4UnwrapTraits::ForwardType, 1914 typename Bound4UnwrapTraits::ForwardType,
5375 typename Bound5UnwrapTraits::ForwardType, 1915 typename Bound5UnwrapTraits::ForwardType,
5376 typename Bound6UnwrapTraits::ForwardType, 1916 typename Bound6UnwrapTraits::ForwardType)>
5377 typename Bound7UnwrapTraits::ForwardType, 1917 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6);
5378 typename Bound8UnwrapTraits::ForwardType,
5379 typename Bound9UnwrapTraits::ForwardType,
5380 typename Bound10UnwrapTraits::ForwardType,
5381 typename Bound11UnwrapTraits::ForwardType)>
5382 ::MakeItSo(storage->runnable_, x1, x2, x3, x4, x5, x6, x7, x8,
5383 x9, x10, x11);
5384 } 1918 }
5385 }; 1919 };
5386 1920
5387 1921
5388 // BindState<> 1922 // BindState<>
5389 // 1923 //
5390 // This stores all the state passed into Bind() and is also where most 1924 // This stores all the state passed into Bind() and is also where most
5391 // of the template resolution magic occurs. 1925 // of the template resolution magic occurs.
5392 // 1926 //
5393 // Runnable is the functor we are binding arguments to. 1927 // Runnable is the functor we are binding arguments to.
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
5601 2135
5602 RunnableType runnable_; 2136 RunnableType runnable_;
5603 P1 p1_; 2137 P1 p1_;
5604 P2 p2_; 2138 P2 p2_;
5605 P3 p3_; 2139 P3 p3_;
5606 P4 p4_; 2140 P4 p4_;
5607 P5 p5_; 2141 P5 p5_;
5608 P6 p6_; 2142 P6 p6_;
5609 }; 2143 };
5610 2144
5611 template <typename Runnable, typename RunType, typename P1, typename P2,
5612 typename P3, typename P4, typename P5, typename P6, typename P7>
5613 struct BindState<Runnable, RunType, void(P1, P2, P3, P4, P5, P6,
5614 P7)> : public BindStateBase {
5615 typedef Runnable RunnableType;
5616 typedef IsWeakMethod<HasIsMethodTag<Runnable>::value, P1> IsWeakCall;
5617 typedef Invoker<7, BindState, RunType> InvokerType;
5618 typedef typename InvokerType::UnboundRunType UnboundRunType;
5619
5620 // Convenience typedefs for bound argument types.
5621 typedef UnwrapTraits<P1> Bound1UnwrapTraits;
5622 typedef UnwrapTraits<P2> Bound2UnwrapTraits;
5623 typedef UnwrapTraits<P3> Bound3UnwrapTraits;
5624 typedef UnwrapTraits<P4> Bound4UnwrapTraits;
5625 typedef UnwrapTraits<P5> Bound5UnwrapTraits;
5626 typedef UnwrapTraits<P6> Bound6UnwrapTraits;
5627 typedef UnwrapTraits<P7> Bound7UnwrapTraits;
5628
5629 BindState(const Runnable& runnable, const P1& p1, const P2& p2, const P3& p3,
5630 const P4& p4, const P5& p5, const P6& p6, const P7& p7)
5631 : runnable_(runnable),
5632 p1_(p1),
5633 p2_(p2),
5634 p3_(p3),
5635 p4_(p4),
5636 p5_(p5),
5637 p6_(p6),
5638 p7_(p7) {
5639 MaybeRefcount<HasIsMethodTag<Runnable>::value, P1>::AddRef(p1_);
5640 }
5641
5642 virtual ~BindState() { MaybeRefcount<HasIsMethodTag<Runnable>::value,
5643 P1>::Release(p1_); }
5644
5645 RunnableType runnable_;
5646 P1 p1_;
5647 P2 p2_;
5648 P3 p3_;
5649 P4 p4_;
5650 P5 p5_;
5651 P6 p6_;
5652 P7 p7_;
5653 };
5654
5655 template <typename Runnable, typename RunType, typename P1, typename P2,
5656 typename P3, typename P4, typename P5, typename P6, typename P7,
5657 typename P8>
5658 struct BindState<Runnable, RunType, void(P1, P2, P3, P4, P5, P6, P7,
5659 P8)> : public BindStateBase {
5660 typedef Runnable RunnableType;
5661 typedef IsWeakMethod<HasIsMethodTag<Runnable>::value, P1> IsWeakCall;
5662 typedef Invoker<8, BindState, RunType> InvokerType;
5663 typedef typename InvokerType::UnboundRunType UnboundRunType;
5664
5665 // Convenience typedefs for bound argument types.
5666 typedef UnwrapTraits<P1> Bound1UnwrapTraits;
5667 typedef UnwrapTraits<P2> Bound2UnwrapTraits;
5668 typedef UnwrapTraits<P3> Bound3UnwrapTraits;
5669 typedef UnwrapTraits<P4> Bound4UnwrapTraits;
5670 typedef UnwrapTraits<P5> Bound5UnwrapTraits;
5671 typedef UnwrapTraits<P6> Bound6UnwrapTraits;
5672 typedef UnwrapTraits<P7> Bound7UnwrapTraits;
5673 typedef UnwrapTraits<P8> Bound8UnwrapTraits;
5674
5675 BindState(const Runnable& runnable, const P1& p1, const P2& p2, const P3& p3,
5676 const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8)
5677 : runnable_(runnable),
5678 p1_(p1),
5679 p2_(p2),
5680 p3_(p3),
5681 p4_(p4),
5682 p5_(p5),
5683 p6_(p6),
5684 p7_(p7),
5685 p8_(p8) {
5686 MaybeRefcount<HasIsMethodTag<Runnable>::value, P1>::AddRef(p1_);
5687 }
5688
5689 virtual ~BindState() { MaybeRefcount<HasIsMethodTag<Runnable>::value,
5690 P1>::Release(p1_); }
5691
5692 RunnableType runnable_;
5693 P1 p1_;
5694 P2 p2_;
5695 P3 p3_;
5696 P4 p4_;
5697 P5 p5_;
5698 P6 p6_;
5699 P7 p7_;
5700 P8 p8_;
5701 };
5702
5703 template <typename Runnable, typename RunType, typename P1, typename P2,
5704 typename P3, typename P4, typename P5, typename P6, typename P7,
5705 typename P8, typename P9>
5706 struct BindState<Runnable, RunType, void(P1, P2, P3, P4, P5, P6, P7, P8,
5707 P9)> : public BindStateBase {
5708 typedef Runnable RunnableType;
5709 typedef IsWeakMethod<HasIsMethodTag<Runnable>::value, P1> IsWeakCall;
5710 typedef Invoker<9, BindState, RunType> InvokerType;
5711 typedef typename InvokerType::UnboundRunType UnboundRunType;
5712
5713 // Convenience typedefs for bound argument types.
5714 typedef UnwrapTraits<P1> Bound1UnwrapTraits;
5715 typedef UnwrapTraits<P2> Bound2UnwrapTraits;
5716 typedef UnwrapTraits<P3> Bound3UnwrapTraits;
5717 typedef UnwrapTraits<P4> Bound4UnwrapTraits;
5718 typedef UnwrapTraits<P5> Bound5UnwrapTraits;
5719 typedef UnwrapTraits<P6> Bound6UnwrapTraits;
5720 typedef UnwrapTraits<P7> Bound7UnwrapTraits;
5721 typedef UnwrapTraits<P8> Bound8UnwrapTraits;
5722 typedef UnwrapTraits<P9> Bound9UnwrapTraits;
5723
5724 BindState(const Runnable& runnable, const P1& p1, const P2& p2, const P3& p3,
5725 const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8,
5726 const P9& p9)
5727 : runnable_(runnable),
5728 p1_(p1),
5729 p2_(p2),
5730 p3_(p3),
5731 p4_(p4),
5732 p5_(p5),
5733 p6_(p6),
5734 p7_(p7),
5735 p8_(p8),
5736 p9_(p9) {
5737 MaybeRefcount<HasIsMethodTag<Runnable>::value, P1>::AddRef(p1_);
5738 }
5739
5740 virtual ~BindState() { MaybeRefcount<HasIsMethodTag<Runnable>::value,
5741 P1>::Release(p1_); }
5742
5743 RunnableType runnable_;
5744 P1 p1_;
5745 P2 p2_;
5746 P3 p3_;
5747 P4 p4_;
5748 P5 p5_;
5749 P6 p6_;
5750 P7 p7_;
5751 P8 p8_;
5752 P9 p9_;
5753 };
5754
5755 template <typename Runnable, typename RunType, typename P1, typename P2,
5756 typename P3, typename P4, typename P5, typename P6, typename P7,
5757 typename P8, typename P9, typename P10>
5758 struct BindState<Runnable, RunType, void(P1, P2, P3, P4, P5, P6, P7, P8, P9,
5759 P10)> : public BindStateBase {
5760 typedef Runnable RunnableType;
5761 typedef IsWeakMethod<HasIsMethodTag<Runnable>::value, P1> IsWeakCall;
5762 typedef Invoker<10, BindState, RunType> InvokerType;
5763 typedef typename InvokerType::UnboundRunType UnboundRunType;
5764
5765 // Convenience typedefs for bound argument types.
5766 typedef UnwrapTraits<P1> Bound1UnwrapTraits;
5767 typedef UnwrapTraits<P2> Bound2UnwrapTraits;
5768 typedef UnwrapTraits<P3> Bound3UnwrapTraits;
5769 typedef UnwrapTraits<P4> Bound4UnwrapTraits;
5770 typedef UnwrapTraits<P5> Bound5UnwrapTraits;
5771 typedef UnwrapTraits<P6> Bound6UnwrapTraits;
5772 typedef UnwrapTraits<P7> Bound7UnwrapTraits;
5773 typedef UnwrapTraits<P8> Bound8UnwrapTraits;
5774 typedef UnwrapTraits<P9> Bound9UnwrapTraits;
5775 typedef UnwrapTraits<P10> Bound10UnwrapTraits;
5776
5777 BindState(const Runnable& runnable, const P1& p1, const P2& p2, const P3& p3,
5778 const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8,
5779 const P9& p9, const P10& p10)
5780 : runnable_(runnable),
5781 p1_(p1),
5782 p2_(p2),
5783 p3_(p3),
5784 p4_(p4),
5785 p5_(p5),
5786 p6_(p6),
5787 p7_(p7),
5788 p8_(p8),
5789 p9_(p9),
5790 p10_(p10) {
5791 MaybeRefcount<HasIsMethodTag<Runnable>::value, P1>::AddRef(p1_);
5792 }
5793
5794 virtual ~BindState() { MaybeRefcount<HasIsMethodTag<Runnable>::value,
5795 P1>::Release(p1_); }
5796
5797 RunnableType runnable_;
5798 P1 p1_;
5799 P2 p2_;
5800 P3 p3_;
5801 P4 p4_;
5802 P5 p5_;
5803 P6 p6_;
5804 P7 p7_;
5805 P8 p8_;
5806 P9 p9_;
5807 P10 p10_;
5808 };
5809
5810 template <typename Runnable, typename RunType, typename P1, typename P2,
5811 typename P3, typename P4, typename P5, typename P6, typename P7,
5812 typename P8, typename P9, typename P10, typename P11>
5813 struct BindState<Runnable, RunType, void(P1, P2, P3, P4, P5, P6, P7, P8, P9,
5814 P10, P11)> : public BindStateBase {
5815 typedef Runnable RunnableType;
5816 typedef IsWeakMethod<HasIsMethodTag<Runnable>::value, P1> IsWeakCall;
5817 typedef Invoker<11, BindState, RunType> InvokerType;
5818 typedef typename InvokerType::UnboundRunType UnboundRunType;
5819
5820 // Convenience typedefs for bound argument types.
5821 typedef UnwrapTraits<P1> Bound1UnwrapTraits;
5822 typedef UnwrapTraits<P2> Bound2UnwrapTraits;
5823 typedef UnwrapTraits<P3> Bound3UnwrapTraits;
5824 typedef UnwrapTraits<P4> Bound4UnwrapTraits;
5825 typedef UnwrapTraits<P5> Bound5UnwrapTraits;
5826 typedef UnwrapTraits<P6> Bound6UnwrapTraits;
5827 typedef UnwrapTraits<P7> Bound7UnwrapTraits;
5828 typedef UnwrapTraits<P8> Bound8UnwrapTraits;
5829 typedef UnwrapTraits<P9> Bound9UnwrapTraits;
5830 typedef UnwrapTraits<P10> Bound10UnwrapTraits;
5831 typedef UnwrapTraits<P11> Bound11UnwrapTraits;
5832
5833 BindState(const Runnable& runnable, const P1& p1, const P2& p2, const P3& p3,
5834 const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8,
5835 const P9& p9, const P10& p10, const P11& p11)
5836 : runnable_(runnable),
5837 p1_(p1),
5838 p2_(p2),
5839 p3_(p3),
5840 p4_(p4),
5841 p5_(p5),
5842 p6_(p6),
5843 p7_(p7),
5844 p8_(p8),
5845 p9_(p9),
5846 p10_(p10),
5847 p11_(p11) {
5848 MaybeRefcount<HasIsMethodTag<Runnable>::value, P1>::AddRef(p1_);
5849 }
5850
5851 virtual ~BindState() { MaybeRefcount<HasIsMethodTag<Runnable>::value,
5852 P1>::Release(p1_); }
5853
5854 RunnableType runnable_;
5855 P1 p1_;
5856 P2 p2_;
5857 P3 p3_;
5858 P4 p4_;
5859 P5 p5_;
5860 P6 p6_;
5861 P7 p7_;
5862 P8 p8_;
5863 P9 p9_;
5864 P10 p10_;
5865 P11 p11_;
5866 };
5867
5868 } // namespace internal 2145 } // namespace internal
5869 } // namespace base 2146 } // namespace base
5870 2147
5871 #endif // BASE_BIND_INTERNAL_H_ 2148 #endif // BASE_BIND_INTERNAL_H_
OLDNEW
« no previous file with comments | « base/bind.h.pump ('k') | base/bind_internal.h.pump » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698