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-6 parameters. Note that | 230 // After this, create template specializations for 0-11 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 |
576 | 917 |
577 // Syntactic sugar to make Callbacks<void(void)> easier to declare since it | 918 // Syntactic sugar to make Callbacks<void(void)> easier to declare since it |
578 // will be used in a lot of APIs with delayed execution. | 919 // will be used in a lot of APIs with delayed execution. |
579 typedef Callback<void(void)> Closure; | 920 typedef Callback<void(void)> Closure; |
580 | 921 |
581 } // namespace base | 922 } // namespace base |
582 | 923 |
583 #endif // BASE_CALLBACK_H | 924 #endif // BASE_CALLBACK_H |
OLD | NEW |