diff options
Diffstat (limited to 'ipc/ipc_message_utils.h')
-rw-r--r-- | ipc/ipc_message_utils.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h index 0e4c68e..19622b2 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,37 @@ 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; + if (INT_MAX/sizeof(P) <= static_cast<size_t>(size)) + return false; + r->resize(size); + for (int i = 0; i < size; i++) { + (*r)[i] = new P(); + if (!ReadParam(m, iter, (*r)[i])) + 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 |