Index: ipc/ipc_message_utils.h |
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h |
index 0e4c68e513efbbc9b6a0651e625a5978dc724739..d5817d2f7c90cbf8d90875331725436aaa512ea2 100644 |
--- a/ipc/ipc_message_utils.h |
+++ b/ipc/ipc_message_utils.h |
@@ -12,6 +12,7 @@ |
#include <vector> |
#include "base/format_macros.h" |
+#include "base/memory/scoped_vector.h" |
#include "base/platform_file.h" |
#include "base/string16.h" |
#include "base/stringprintf.h" |
@@ -633,6 +634,34 @@ struct ParamTraits< Tuple5<A, B, C, D, E> > { |
} |
}; |
+template<class P> |
+struct ParamTraits<ScopedVector<P> > { |
+ typedef ScopedVector<P> param_type; |
+ static void Write(Message* m, const param_type& p) { |
+ WriteParam(m, static_cast<int>(p.size())); |
+ for (size_t i = 0; i < p.size(); i++) |
+ WriteParam(m, *p[i]); |
+ } |
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
+ int size = 0; |
+ if (!m->ReadLength(iter, &size)) |
+ return false; |
+ for (int i = 0; i < size; i++) { |
jam
2012/11/12 20:58:54
you should do error checking just like std::vector
hashimoto
2012/11/13 05:03:51
What is still unclear for me is that do we need to
|
+ r->push_back(new P()); |
+ if (!ReadParam(m, iter, r->back())) |
+ return false; |
+ } |
+ return true; |
+ } |
+ static void Log(const param_type& p, std::string* l) { |
+ for (size_t i = 0; i < p.size(); ++i) { |
+ if (i != 0) |
+ l->append(" "); |
+ LogParam(*p[i], l); |
+ } |
+ } |
+}; |
+ |
// IPC types ParamTraits ------------------------------------------------------- |
// A ChannelHandle is basically a platform-inspecific wrapper around the |