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