Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Unified Diff: ipc/ipc_message_utils.h

Issue 2938613002: Add a variadic version of ParamTraits, to allow for >5 IPC parameters. (Closed)
Patch Set: Some style changes. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_message_utils.h
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
index 84324ebaf417f5aee89cdfb33b60d513ac19c7c5..3f429b66539d0a0ae9e6782d11426b27e45ef55a 100644
--- a/ipc/ipc_message_utils.h
+++ b/ipc/ipc_message_utils.h
@@ -724,149 +724,63 @@ struct ParamTraits<std::tuple<>> {
}
};
-template <class A>
-struct ParamTraits<std::tuple<A>> {
- typedef std::tuple<A> param_type;
- static void GetSize(base::PickleSizer* sizer, const param_type& p) {
- GetParamSize(sizer, std::get<0>(p));
- }
- static void Write(base::Pickle* m, const param_type& p) {
- WriteParam(m, std::get<0>(p));
- }
- static bool Read(const base::Pickle* m,
- base::PickleIterator* iter,
- param_type* r) {
- return ReadParam(m, iter, &std::get<0>(*r));
- }
- static void Log(const param_type& p, std::string* l) {
- LogParam(std::get<0>(p), l);
- }
-};
+template <typename T, int index, int count>
+struct TupleParamTraitsHelper {
+ using Next = TupleParamTraitsHelper<T, index + 1, count>;
-template <class A, class B>
-struct ParamTraits<std::tuple<A, B>> {
- typedef std::tuple<A, B> param_type;
- static void GetSize(base::PickleSizer* sizer, const param_type& p) {
- GetParamSize(sizer, std::get<0>(p));
- GetParamSize(sizer, std::get<1>(p));
- }
- static void Write(base::Pickle* m, const param_type& p) {
- WriteParam(m, std::get<0>(p));
- WriteParam(m, std::get<1>(p));
+ static void GetSize(base::PickleSizer* sizer, const T& p) {
+ GetParamSize(sizer, std::get<index>(p));
+ Next::GetSize(sizer, p);
}
- static bool Read(const base::Pickle* m,
- base::PickleIterator* iter,
- param_type* r) {
- return (ReadParam(m, iter, &std::get<0>(*r)) &&
- ReadParam(m, iter, &std::get<1>(*r)));
- }
- static void Log(const param_type& p, std::string* l) {
- LogParam(std::get<0>(p), l);
- l->append(", ");
- LogParam(std::get<1>(p), l);
- }
-};
-template <class A, class B, class C>
-struct ParamTraits<std::tuple<A, B, C>> {
- typedef std::tuple<A, B, C> param_type;
- static void GetSize(base::PickleSizer* sizer, const param_type& p) {
- GetParamSize(sizer, std::get<0>(p));
- GetParamSize(sizer, std::get<1>(p));
- GetParamSize(sizer, std::get<2>(p));
- }
- static void Write(base::Pickle* m, const param_type& p) {
- WriteParam(m, std::get<0>(p));
- WriteParam(m, std::get<1>(p));
- WriteParam(m, std::get<2>(p));
+ static void Write(base::Pickle* m, const T& p) {
+ WriteParam(m, std::get<index>(p));
+ Next::Write(m, p);
}
- static bool Read(const base::Pickle* m,
- base::PickleIterator* iter,
- param_type* r) {
- return (ReadParam(m, iter, &std::get<0>(*r)) &&
- ReadParam(m, iter, &std::get<1>(*r)) &&
- ReadParam(m, iter, &std::get<2>(*r)));
+
+ static bool Read(const base::Pickle* m, base::PickleIterator* iter, T* r) {
+ return ReadParam(m, iter, &std::get<index>(*r)) && Next::Read(m, iter, r);
}
- static void Log(const param_type& p, std::string* l) {
- LogParam(std::get<0>(p), l);
- l->append(", ");
- LogParam(std::get<1>(p), l);
- l->append(", ");
- LogParam(std::get<2>(p), l);
+
+ static void Log(const T& p, std::string* l) {
+ LogParam(std::get<index>(p), l);
+ if (index < count - 1)
+ l->append(", ");
+ Next::Log(p, l);
}
};
-template <class A, class B, class C, class D>
-struct ParamTraits<std::tuple<A, B, C, D>> {
- typedef std::tuple<A, B, C, D> param_type;
- static void GetSize(base::PickleSizer* sizer, const param_type& p) {
- GetParamSize(sizer, std::get<0>(p));
- GetParamSize(sizer, std::get<1>(p));
- GetParamSize(sizer, std::get<2>(p));
- GetParamSize(sizer, std::get<3>(p));
- }
- static void Write(base::Pickle* m, const param_type& p) {
- WriteParam(m, std::get<0>(p));
- WriteParam(m, std::get<1>(p));
- WriteParam(m, std::get<2>(p));
- WriteParam(m, std::get<3>(p));
- }
- static bool Read(const base::Pickle* m,
- base::PickleIterator* iter,
- param_type* r) {
- return (ReadParam(m, iter, &std::get<0>(*r)) &&
- ReadParam(m, iter, &std::get<1>(*r)) &&
- ReadParam(m, iter, &std::get<2>(*r)) &&
- ReadParam(m, iter, &std::get<3>(*r)));
- }
- static void Log(const param_type& p, std::string* l) {
- LogParam(std::get<0>(p), l);
- l->append(", ");
- LogParam(std::get<1>(p), l);
- l->append(", ");
- LogParam(std::get<2>(p), l);
- l->append(", ");
- LogParam(std::get<3>(p), l);
+template <typename T, int index>
+struct TupleParamTraitsHelper<T, index, index> {
+ static void GetSize(base::PickleSizer* sizer, const T& p) {}
+ static void Write(base::Pickle* m, const T& p) {}
+ static bool Read(const base::Pickle* m, base::PickleIterator* iter, T* r) {
+ return true;
}
+ static void Log(const T& p, std::string* l) {}
};
-template <class A, class B, class C, class D, class E>
-struct ParamTraits<std::tuple<A, B, C, D, E>> {
- typedef std::tuple<A, B, C, D, E> param_type;
+template <typename... Args>
+struct ParamTraits<std::tuple<Args...>> {
+ using param_type = std::tuple<Args...>;
+ using Helper =
+ TupleParamTraitsHelper<param_type, 0, std::tuple_size<param_type>::value>;
+
static void GetSize(base::PickleSizer* sizer, const param_type& p) {
- GetParamSize(sizer, std::get<0>(p));
- GetParamSize(sizer, std::get<1>(p));
- GetParamSize(sizer, std::get<2>(p));
- GetParamSize(sizer, std::get<3>(p));
- GetParamSize(sizer, std::get<4>(p));
+ Helper::GetSize(sizer, p);
}
+
static void Write(base::Pickle* m, const param_type& p) {
- WriteParam(m, std::get<0>(p));
- WriteParam(m, std::get<1>(p));
- WriteParam(m, std::get<2>(p));
- WriteParam(m, std::get<3>(p));
- WriteParam(m, std::get<4>(p));
+ Helper::Write(m, p);
}
+
static bool Read(const base::Pickle* m,
base::PickleIterator* iter,
param_type* r) {
- return (ReadParam(m, iter, &std::get<0>(*r)) &&
- ReadParam(m, iter, &std::get<1>(*r)) &&
- ReadParam(m, iter, &std::get<2>(*r)) &&
- ReadParam(m, iter, &std::get<3>(*r)) &&
- ReadParam(m, iter, &std::get<4>(*r)));
- }
- static void Log(const param_type& p, std::string* l) {
- LogParam(std::get<0>(p), l);
- l->append(", ");
- LogParam(std::get<1>(p), l);
- l->append(", ");
- LogParam(std::get<2>(p), l);
- l->append(", ");
- LogParam(std::get<3>(p), l);
- l->append(", ");
- LogParam(std::get<4>(p), l);
+ return Helper::Read(m, iter, r);
}
+
+ static void Log(const param_type& p, std::string* l) { Helper::Log(p, l); }
};
template <class P, size_t stack_capacity>
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698