| 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 <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 | 513 |
| 514 template <> | 514 template <> |
| 515 struct IPC_EXPORT ParamTraits<base::TimeTicks> { | 515 struct IPC_EXPORT ParamTraits<base::TimeTicks> { |
| 516 typedef base::TimeTicks param_type; | 516 typedef base::TimeTicks param_type; |
| 517 static void Write(Message* m, const param_type& p); | 517 static void Write(Message* m, const param_type& p); |
| 518 static bool Read(const Message* m, PickleIterator* iter, param_type* r); | 518 static bool Read(const Message* m, PickleIterator* iter, param_type* r); |
| 519 static void Log(const param_type& p, std::string* l); | 519 static void Log(const param_type& p, std::string* l); |
| 520 }; | 520 }; |
| 521 | 521 |
| 522 template <> | 522 template <> |
| 523 struct ParamTraits<Tuple0> { | 523 struct ParamTraits<Tuple<>> { |
| 524 typedef Tuple0 param_type; | 524 typedef Tuple<> param_type; |
| 525 static void Write(Message* m, const param_type& p) { | 525 static void Write(Message* m, const param_type& p) { |
| 526 } | 526 } |
| 527 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { | 527 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 528 return true; | 528 return true; |
| 529 } | 529 } |
| 530 static void Log(const param_type& p, std::string* l) { | 530 static void Log(const param_type& p, std::string* l) { |
| 531 } | 531 } |
| 532 }; | 532 }; |
| 533 | 533 |
| 534 template <class A> | 534 template <class A> |
| 535 struct ParamTraits< Tuple1<A> > { | 535 struct ParamTraits<Tuple<A>> { |
| 536 typedef Tuple1<A> param_type; | 536 typedef Tuple<A> param_type; |
| 537 static void Write(Message* m, const param_type& p) { | 537 static void Write(Message* m, const param_type& p) { |
| 538 WriteParam(m, p.a); | 538 WriteParam(m, get<0>(p)); |
| 539 } | 539 } |
| 540 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { | 540 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 541 return ReadParam(m, iter, &r->a); | 541 return ReadParam(m, iter, &get<0>(*r)); |
| 542 } | 542 } |
| 543 static void Log(const param_type& p, std::string* l) { | 543 static void Log(const param_type& p, std::string* l) { |
| 544 LogParam(p.a, l); | 544 LogParam(get<0>(p), l); |
| 545 } | 545 } |
| 546 }; | 546 }; |
| 547 | 547 |
| 548 template <class A, class B> | 548 template <class A, class B> |
| 549 struct ParamTraits< Tuple2<A, B> > { | 549 struct ParamTraits< Tuple<A, B> > { |
| 550 typedef Tuple2<A, B> param_type; | 550 typedef Tuple<A, B> param_type; |
| 551 static void Write(Message* m, const param_type& p) { | 551 static void Write(Message* m, const param_type& p) { |
| 552 WriteParam(m, p.a); | 552 WriteParam(m, get<0>(p)); |
| 553 WriteParam(m, p.b); | 553 WriteParam(m, get<1>(p)); |
| 554 } | 554 } |
| 555 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { | 555 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 556 return (ReadParam(m, iter, &r->a) && | 556 return (ReadParam(m, iter, &get<0>(*r)) && |
| 557 ReadParam(m, iter, &r->b)); | 557 ReadParam(m, iter, &get<1>(*r))); |
| 558 } | 558 } |
| 559 static void Log(const param_type& p, std::string* l) { | 559 static void Log(const param_type& p, std::string* l) { |
| 560 LogParam(p.a, l); | 560 LogParam(get<0>(p), l); |
| 561 l->append(", "); | 561 l->append(", "); |
| 562 LogParam(p.b, l); | 562 LogParam(get<1>(p), l); |
| 563 } | 563 } |
| 564 }; | 564 }; |
| 565 | 565 |
| 566 template <class A, class B, class C> | 566 template <class A, class B, class C> |
| 567 struct ParamTraits< Tuple3<A, B, C> > { | 567 struct ParamTraits< Tuple<A, B, C> > { |
| 568 typedef Tuple3<A, B, C> param_type; | 568 typedef Tuple<A, B, C> param_type; |
| 569 static void Write(Message* m, const param_type& p) { | 569 static void Write(Message* m, const param_type& p) { |
| 570 WriteParam(m, p.a); | 570 WriteParam(m, get<0>(p)); |
| 571 WriteParam(m, p.b); | 571 WriteParam(m, get<1>(p)); |
| 572 WriteParam(m, p.c); | 572 WriteParam(m, get<2>(p)); |
| 573 } | 573 } |
| 574 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { | 574 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 575 return (ReadParam(m, iter, &r->a) && | 575 return (ReadParam(m, iter, &get<0>(*r)) && |
| 576 ReadParam(m, iter, &r->b) && | 576 ReadParam(m, iter, &get<1>(*r)) && |
| 577 ReadParam(m, iter, &r->c)); | 577 ReadParam(m, iter, &get<2>(*r))); |
| 578 } | 578 } |
| 579 static void Log(const param_type& p, std::string* l) { | 579 static void Log(const param_type& p, std::string* l) { |
| 580 LogParam(p.a, l); | 580 LogParam(get<0>(p), l); |
| 581 l->append(", "); | 581 l->append(", "); |
| 582 LogParam(p.b, l); | 582 LogParam(get<1>(p), l); |
| 583 l->append(", "); | 583 l->append(", "); |
| 584 LogParam(p.c, l); | 584 LogParam(get<2>(p), l); |
| 585 } | 585 } |
| 586 }; | 586 }; |
| 587 | 587 |
| 588 template <class A, class B, class C, class D> | 588 template <class A, class B, class C, class D> |
| 589 struct ParamTraits< Tuple4<A, B, C, D> > { | 589 struct ParamTraits< Tuple<A, B, C, D> > { |
| 590 typedef Tuple4<A, B, C, D> param_type; | 590 typedef Tuple<A, B, C, D> param_type; |
| 591 static void Write(Message* m, const param_type& p) { | 591 static void Write(Message* m, const param_type& p) { |
| 592 WriteParam(m, p.a); | 592 WriteParam(m, get<0>(p)); |
| 593 WriteParam(m, p.b); | 593 WriteParam(m, get<1>(p)); |
| 594 WriteParam(m, p.c); | 594 WriteParam(m, get<2>(p)); |
| 595 WriteParam(m, p.d); | 595 WriteParam(m, get<3>(p)); |
| 596 } | 596 } |
| 597 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { | 597 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 598 return (ReadParam(m, iter, &r->a) && | 598 return (ReadParam(m, iter, &get<0>(*r)) && |
| 599 ReadParam(m, iter, &r->b) && | 599 ReadParam(m, iter, &get<1>(*r)) && |
| 600 ReadParam(m, iter, &r->c) && | 600 ReadParam(m, iter, &get<2>(*r)) && |
| 601 ReadParam(m, iter, &r->d)); | 601 ReadParam(m, iter, &get<3>(*r))); |
| 602 } | 602 } |
| 603 static void Log(const param_type& p, std::string* l) { | 603 static void Log(const param_type& p, std::string* l) { |
| 604 LogParam(p.a, l); | 604 LogParam(get<0>(p), l); |
| 605 l->append(", "); | 605 l->append(", "); |
| 606 LogParam(p.b, l); | 606 LogParam(get<1>(p), l); |
| 607 l->append(", "); | 607 l->append(", "); |
| 608 LogParam(p.c, l); | 608 LogParam(get<2>(p), l); |
| 609 l->append(", "); | 609 l->append(", "); |
| 610 LogParam(p.d, l); | 610 LogParam(get<3>(p), l); |
| 611 } | 611 } |
| 612 }; | 612 }; |
| 613 | 613 |
| 614 template <class A, class B, class C, class D, class E> | 614 template <class A, class B, class C, class D, class E> |
| 615 struct ParamTraits< Tuple5<A, B, C, D, E> > { | 615 struct ParamTraits< Tuple<A, B, C, D, E> > { |
| 616 typedef Tuple5<A, B, C, D, E> param_type; | 616 typedef Tuple<A, B, C, D, E> param_type; |
| 617 static void Write(Message* m, const param_type& p) { | 617 static void Write(Message* m, const param_type& p) { |
| 618 WriteParam(m, p.a); | 618 WriteParam(m, get<0>(p)); |
| 619 WriteParam(m, p.b); | 619 WriteParam(m, get<1>(p)); |
| 620 WriteParam(m, p.c); | 620 WriteParam(m, get<2>(p)); |
| 621 WriteParam(m, p.d); | 621 WriteParam(m, get<3>(p)); |
| 622 WriteParam(m, p.e); | 622 WriteParam(m, get<4>(p)); |
| 623 } | 623 } |
| 624 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { | 624 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 625 return (ReadParam(m, iter, &r->a) && | 625 return (ReadParam(m, iter, &get<0>(*r)) && |
| 626 ReadParam(m, iter, &r->b) && | 626 ReadParam(m, iter, &get<1>(*r)) && |
| 627 ReadParam(m, iter, &r->c) && | 627 ReadParam(m, iter, &get<2>(*r)) && |
| 628 ReadParam(m, iter, &r->d) && | 628 ReadParam(m, iter, &get<3>(*r)) && |
| 629 ReadParam(m, iter, &r->e)); | 629 ReadParam(m, iter, &get<4>(*r))); |
| 630 } | 630 } |
| 631 static void Log(const param_type& p, std::string* l) { | 631 static void Log(const param_type& p, std::string* l) { |
| 632 LogParam(p.a, l); | 632 LogParam(get<0>(p), l); |
| 633 l->append(", "); | 633 l->append(", "); |
| 634 LogParam(p.b, l); | 634 LogParam(get<1>(p), l); |
| 635 l->append(", "); | 635 l->append(", "); |
| 636 LogParam(p.c, l); | 636 LogParam(get<2>(p), l); |
| 637 l->append(", "); | 637 l->append(", "); |
| 638 LogParam(p.d, l); | 638 LogParam(get<3>(p), l); |
| 639 l->append(", "); | 639 l->append(", "); |
| 640 LogParam(p.e, l); | 640 LogParam(get<4>(p), l); |
| 641 } | 641 } |
| 642 }; | 642 }; |
| 643 | 643 |
| 644 template<class P> | 644 template<class P> |
| 645 struct ParamTraits<ScopedVector<P> > { | 645 struct ParamTraits<ScopedVector<P> > { |
| 646 typedef ScopedVector<P> param_type; | 646 typedef ScopedVector<P> param_type; |
| 647 static void Write(Message* m, const param_type& p) { | 647 static void Write(Message* m, const param_type& p) { |
| 648 WriteParam(m, static_cast<int>(p.size())); | 648 WriteParam(m, static_cast<int>(p.size())); |
| 649 for (size_t i = 0; i < p.size(); i++) | 649 for (size_t i = 0; i < p.size(); i++) |
| 650 WriteParam(m, *p[i]); | 650 WriteParam(m, *p[i]); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 return ok; | 905 return ok; |
| 906 } | 906 } |
| 907 | 907 |
| 908 template<class T, class Method> | 908 template<class T, class Method> |
| 909 static bool DispatchDelayReplyWithSendParams(bool ok, | 909 static bool DispatchDelayReplyWithSendParams(bool ok, |
| 910 const SendParam& send_params, | 910 const SendParam& send_params, |
| 911 const Message* msg, T* obj, | 911 const Message* msg, T* obj, |
| 912 Method func) { | 912 Method func) { |
| 913 Message* reply = SyncMessage::GenerateReply(msg); | 913 Message* reply = SyncMessage::GenerateReply(msg); |
| 914 if (ok) { | 914 if (ok) { |
| 915 Tuple1<Message&> t = MakeRefTuple(*reply); | 915 Tuple<Message&> t = MakeRefTuple(*reply); |
| 916 ConnectMessageAndReply(msg, reply); | 916 ConnectMessageAndReply(msg, reply); |
| 917 DispatchToMethod(obj, func, send_params, &t); | 917 DispatchToMethod(obj, func, send_params, &t); |
| 918 } else { | 918 } else { |
| 919 NOTREACHED() << "Error deserializing message " << msg->type(); | 919 NOTREACHED() << "Error deserializing message " << msg->type(); |
| 920 reply->set_reply_error(); | 920 reply->set_reply_error(); |
| 921 obj->Send(reply); | 921 obj->Send(reply); |
| 922 } | 922 } |
| 923 return ok; | 923 return ok; |
| 924 } | 924 } |
| 925 | 925 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 950 template<typename TA, typename TB, typename TC, typename TD, typename TE> | 950 template<typename TA, typename TB, typename TC, typename TD, typename TE> |
| 951 static void WriteReplyParams(Message* reply, TA a, TB b, TC c, TD d, TE e) { | 951 static void WriteReplyParams(Message* reply, TA a, TB b, TC c, TD d, TE e) { |
| 952 ReplyParam p(a, b, c, d, e); | 952 ReplyParam p(a, b, c, d, e); |
| 953 WriteParam(reply, p); | 953 WriteParam(reply, p); |
| 954 } | 954 } |
| 955 }; | 955 }; |
| 956 | 956 |
| 957 } // namespace IPC | 957 } // namespace IPC |
| 958 | 958 |
| 959 #endif // IPC_IPC_MESSAGE_UTILS_H_ | 959 #endif // IPC_IPC_MESSAGE_UTILS_H_ |
| OLD | NEW |