Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef IPC_IPC_MESSAGE_UTILS_H_ | 5 #ifndef IPC_IPC_MESSAGE_UTILS_H_ |
| 6 #define IPC_IPC_MESSAGE_UTILS_H_ | 6 #define IPC_IPC_MESSAGE_UTILS_H_ |
| 7 | 7 |
| 8 #include <limits.h> | 8 #include <limits.h> |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 #include <stdint.h> | 10 #include <stdint.h> |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 651 typedef base::TimeTicks param_type; | 651 typedef base::TimeTicks param_type; |
| 652 static void GetSize(base::PickleSizer* sizer, const param_type& p); | 652 static void GetSize(base::PickleSizer* sizer, const param_type& p); |
| 653 static void Write(base::Pickle* m, const param_type& p); | 653 static void Write(base::Pickle* m, const param_type& p); |
| 654 static bool Read(const base::Pickle* m, | 654 static bool Read(const base::Pickle* m, |
| 655 base::PickleIterator* iter, | 655 base::PickleIterator* iter, |
| 656 param_type* r); | 656 param_type* r); |
| 657 static void Log(const param_type& p, std::string* l); | 657 static void Log(const param_type& p, std::string* l); |
| 658 }; | 658 }; |
| 659 | 659 |
| 660 template <> | 660 template <> |
| 661 struct ParamTraits<base::Tuple<>> { | 661 struct ParamTraits<std::tuple<>> { |
|
Nico
2016/02/09 12:23:11
This change is for 2013, right?
tzik
2016/02/10 15:10:54
Yes, it seems failing on the type alias + variadic
| |
| 662 typedef base::Tuple<> param_type; | 662 typedef std::tuple<> param_type; |
| 663 static void GetSize(base::PickleSizer* sizer, const param_type& p) {} | 663 static void GetSize(base::PickleSizer* sizer, const param_type& p) {} |
| 664 static void Write(base::Pickle* m, const param_type& p) {} | 664 static void Write(base::Pickle* m, const param_type& p) {} |
| 665 static bool Read(const base::Pickle* m, | 665 static bool Read(const base::Pickle* m, |
| 666 base::PickleIterator* iter, | 666 base::PickleIterator* iter, |
| 667 param_type* r) { | 667 param_type* r) { |
| 668 return true; | 668 return true; |
| 669 } | 669 } |
| 670 static void Log(const param_type& p, std::string* l) { | 670 static void Log(const param_type& p, std::string* l) { |
| 671 } | 671 } |
| 672 }; | 672 }; |
| 673 | 673 |
| 674 template <class A> | 674 template <class A> |
| 675 struct ParamTraits<base::Tuple<A>> { | 675 struct ParamTraits<std::tuple<A>> { |
| 676 typedef base::Tuple<A> param_type; | 676 typedef std::tuple<A> param_type; |
| 677 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 677 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 678 GetParamSize(sizer, base::get<0>(p)); | 678 GetParamSize(sizer, base::get<0>(p)); |
| 679 } | 679 } |
| 680 static void Write(base::Pickle* m, const param_type& p) { | 680 static void Write(base::Pickle* m, const param_type& p) { |
| 681 WriteParam(m, base::get<0>(p)); | 681 WriteParam(m, base::get<0>(p)); |
| 682 } | 682 } |
| 683 static bool Read(const base::Pickle* m, | 683 static bool Read(const base::Pickle* m, |
| 684 base::PickleIterator* iter, | 684 base::PickleIterator* iter, |
| 685 param_type* r) { | 685 param_type* r) { |
| 686 return ReadParam(m, iter, &base::get<0>(*r)); | 686 return ReadParam(m, iter, &base::get<0>(*r)); |
| 687 } | 687 } |
| 688 static void Log(const param_type& p, std::string* l) { | 688 static void Log(const param_type& p, std::string* l) { |
| 689 LogParam(base::get<0>(p), l); | 689 LogParam(base::get<0>(p), l); |
| 690 } | 690 } |
| 691 }; | 691 }; |
| 692 | 692 |
| 693 template <class A, class B> | 693 template <class A, class B> |
| 694 struct ParamTraits<base::Tuple<A, B>> { | 694 struct ParamTraits<std::tuple<A, B>> { |
| 695 typedef base::Tuple<A, B> param_type; | 695 typedef std::tuple<A, B> param_type; |
| 696 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 696 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 697 GetParamSize(sizer, base::get<0>(p)); | 697 GetParamSize(sizer, base::get<0>(p)); |
| 698 GetParamSize(sizer, base::get<1>(p)); | 698 GetParamSize(sizer, base::get<1>(p)); |
| 699 } | 699 } |
| 700 static void Write(base::Pickle* m, const param_type& p) { | 700 static void Write(base::Pickle* m, const param_type& p) { |
| 701 WriteParam(m, base::get<0>(p)); | 701 WriteParam(m, base::get<0>(p)); |
| 702 WriteParam(m, base::get<1>(p)); | 702 WriteParam(m, base::get<1>(p)); |
| 703 } | 703 } |
| 704 static bool Read(const base::Pickle* m, | 704 static bool Read(const base::Pickle* m, |
| 705 base::PickleIterator* iter, | 705 base::PickleIterator* iter, |
| 706 param_type* r) { | 706 param_type* r) { |
| 707 return (ReadParam(m, iter, &base::get<0>(*r)) && | 707 return (ReadParam(m, iter, &base::get<0>(*r)) && |
| 708 ReadParam(m, iter, &base::get<1>(*r))); | 708 ReadParam(m, iter, &base::get<1>(*r))); |
| 709 } | 709 } |
| 710 static void Log(const param_type& p, std::string* l) { | 710 static void Log(const param_type& p, std::string* l) { |
| 711 LogParam(base::get<0>(p), l); | 711 LogParam(base::get<0>(p), l); |
| 712 l->append(", "); | 712 l->append(", "); |
| 713 LogParam(base::get<1>(p), l); | 713 LogParam(base::get<1>(p), l); |
| 714 } | 714 } |
| 715 }; | 715 }; |
| 716 | 716 |
| 717 template <class A, class B, class C> | 717 template <class A, class B, class C> |
| 718 struct ParamTraits<base::Tuple<A, B, C>> { | 718 struct ParamTraits<std::tuple<A, B, C>> { |
| 719 typedef base::Tuple<A, B, C> param_type; | 719 typedef std::tuple<A, B, C> param_type; |
| 720 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 720 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 721 GetParamSize(sizer, base::get<0>(p)); | 721 GetParamSize(sizer, base::get<0>(p)); |
| 722 GetParamSize(sizer, base::get<1>(p)); | 722 GetParamSize(sizer, base::get<1>(p)); |
| 723 GetParamSize(sizer, base::get<2>(p)); | 723 GetParamSize(sizer, base::get<2>(p)); |
| 724 } | 724 } |
| 725 static void Write(base::Pickle* m, const param_type& p) { | 725 static void Write(base::Pickle* m, const param_type& p) { |
| 726 WriteParam(m, base::get<0>(p)); | 726 WriteParam(m, base::get<0>(p)); |
| 727 WriteParam(m, base::get<1>(p)); | 727 WriteParam(m, base::get<1>(p)); |
| 728 WriteParam(m, base::get<2>(p)); | 728 WriteParam(m, base::get<2>(p)); |
| 729 } | 729 } |
| 730 static bool Read(const base::Pickle* m, | 730 static bool Read(const base::Pickle* m, |
| 731 base::PickleIterator* iter, | 731 base::PickleIterator* iter, |
| 732 param_type* r) { | 732 param_type* r) { |
| 733 return (ReadParam(m, iter, &base::get<0>(*r)) && | 733 return (ReadParam(m, iter, &base::get<0>(*r)) && |
| 734 ReadParam(m, iter, &base::get<1>(*r)) && | 734 ReadParam(m, iter, &base::get<1>(*r)) && |
| 735 ReadParam(m, iter, &base::get<2>(*r))); | 735 ReadParam(m, iter, &base::get<2>(*r))); |
| 736 } | 736 } |
| 737 static void Log(const param_type& p, std::string* l) { | 737 static void Log(const param_type& p, std::string* l) { |
| 738 LogParam(base::get<0>(p), l); | 738 LogParam(base::get<0>(p), l); |
| 739 l->append(", "); | 739 l->append(", "); |
| 740 LogParam(base::get<1>(p), l); | 740 LogParam(base::get<1>(p), l); |
| 741 l->append(", "); | 741 l->append(", "); |
| 742 LogParam(base::get<2>(p), l); | 742 LogParam(base::get<2>(p), l); |
| 743 } | 743 } |
| 744 }; | 744 }; |
| 745 | 745 |
| 746 template <class A, class B, class C, class D> | 746 template <class A, class B, class C, class D> |
| 747 struct ParamTraits<base::Tuple<A, B, C, D>> { | 747 struct ParamTraits<std::tuple<A, B, C, D>> { |
| 748 typedef base::Tuple<A, B, C, D> param_type; | 748 typedef std::tuple<A, B, C, D> param_type; |
| 749 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 749 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 750 GetParamSize(sizer, base::get<0>(p)); | 750 GetParamSize(sizer, base::get<0>(p)); |
| 751 GetParamSize(sizer, base::get<1>(p)); | 751 GetParamSize(sizer, base::get<1>(p)); |
| 752 GetParamSize(sizer, base::get<2>(p)); | 752 GetParamSize(sizer, base::get<2>(p)); |
| 753 GetParamSize(sizer, base::get<3>(p)); | 753 GetParamSize(sizer, base::get<3>(p)); |
| 754 } | 754 } |
| 755 static void Write(base::Pickle* m, const param_type& p) { | 755 static void Write(base::Pickle* m, const param_type& p) { |
| 756 WriteParam(m, base::get<0>(p)); | 756 WriteParam(m, base::get<0>(p)); |
| 757 WriteParam(m, base::get<1>(p)); | 757 WriteParam(m, base::get<1>(p)); |
| 758 WriteParam(m, base::get<2>(p)); | 758 WriteParam(m, base::get<2>(p)); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 771 l->append(", "); | 771 l->append(", "); |
| 772 LogParam(base::get<1>(p), l); | 772 LogParam(base::get<1>(p), l); |
| 773 l->append(", "); | 773 l->append(", "); |
| 774 LogParam(base::get<2>(p), l); | 774 LogParam(base::get<2>(p), l); |
| 775 l->append(", "); | 775 l->append(", "); |
| 776 LogParam(base::get<3>(p), l); | 776 LogParam(base::get<3>(p), l); |
| 777 } | 777 } |
| 778 }; | 778 }; |
| 779 | 779 |
| 780 template <class A, class B, class C, class D, class E> | 780 template <class A, class B, class C, class D, class E> |
| 781 struct ParamTraits<base::Tuple<A, B, C, D, E>> { | 781 struct ParamTraits<std::tuple<A, B, C, D, E>> { |
| 782 typedef base::Tuple<A, B, C, D, E> param_type; | 782 typedef std::tuple<A, B, C, D, E> param_type; |
| 783 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 783 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 784 GetParamSize(sizer, base::get<0>(p)); | 784 GetParamSize(sizer, base::get<0>(p)); |
| 785 GetParamSize(sizer, base::get<1>(p)); | 785 GetParamSize(sizer, base::get<1>(p)); |
| 786 GetParamSize(sizer, base::get<2>(p)); | 786 GetParamSize(sizer, base::get<2>(p)); |
| 787 GetParamSize(sizer, base::get<3>(p)); | 787 GetParamSize(sizer, base::get<3>(p)); |
| 788 GetParamSize(sizer, base::get<4>(p)); | 788 GetParamSize(sizer, base::get<4>(p)); |
| 789 } | 789 } |
| 790 static void Write(base::Pickle* m, const param_type& p) { | 790 static void Write(base::Pickle* m, const param_type& p) { |
| 791 WriteParam(m, base::get<0>(p)); | 791 WriteParam(m, base::get<0>(p)); |
| 792 WriteParam(m, base::get<1>(p)); | 792 WriteParam(m, base::get<1>(p)); |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1156 return ok; | 1156 return ok; |
| 1157 } | 1157 } |
| 1158 | 1158 |
| 1159 template<class T, class Method> | 1159 template<class T, class Method> |
| 1160 static bool DispatchDelayReplyWithSendParams(bool ok, | 1160 static bool DispatchDelayReplyWithSendParams(bool ok, |
| 1161 const SendParam& send_params, | 1161 const SendParam& send_params, |
| 1162 const Message* msg, T* obj, | 1162 const Message* msg, T* obj, |
| 1163 Method func) { | 1163 Method func) { |
| 1164 Message* reply = SyncMessage::GenerateReply(msg); | 1164 Message* reply = SyncMessage::GenerateReply(msg); |
| 1165 if (ok) { | 1165 if (ok) { |
| 1166 base::Tuple<Message&> t = base::MakeRefTuple(*reply); | 1166 std::tuple<Message&> t = base::MakeRefTuple(*reply); |
| 1167 ConnectMessageAndReply(msg, reply); | 1167 ConnectMessageAndReply(msg, reply); |
| 1168 base::DispatchToMethod(obj, func, send_params, &t); | 1168 base::DispatchToMethod(obj, func, send_params, &t); |
| 1169 } else { | 1169 } else { |
| 1170 NOTREACHED() << "Error deserializing message " << msg->type(); | 1170 NOTREACHED() << "Error deserializing message " << msg->type(); |
| 1171 reply->set_reply_error(); | 1171 reply->set_reply_error(); |
| 1172 obj->Send(reply); | 1172 obj->Send(reply); |
| 1173 } | 1173 } |
| 1174 return ok; | 1174 return ok; |
| 1175 } | 1175 } |
| 1176 | 1176 |
| 1177 template <typename... Ts> | 1177 template <typename... Ts> |
| 1178 static void WriteReplyParams(Message* reply, Ts... args) { | 1178 static void WriteReplyParams(Message* reply, Ts... args) { |
| 1179 ReplyParam p(args...); | 1179 ReplyParam p(args...); |
| 1180 WriteParam(reply, p); | 1180 WriteParam(reply, p); |
| 1181 } | 1181 } |
| 1182 }; | 1182 }; |
| 1183 | 1183 |
| 1184 } // namespace IPC | 1184 } // namespace IPC |
| 1185 | 1185 |
| 1186 #endif // IPC_IPC_MESSAGE_UTILS_H_ | 1186 #endif // IPC_IPC_MESSAGE_UTILS_H_ |
| OLD | NEW |