| 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 |