|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef IPC_PARAM_TRAITS_READ_MACROS_H_ | 
|  | #define IPC_PARAM_TRAITS_READ_MACROS_H_ | 
|  |  | 
|  | // Null out all the macros that need nulling. | 
|  | #include "ipc/ipc_message_null_macros.h" | 
|  |  | 
|  | // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. | 
|  | #undef IPC_STRUCT_BEGIN_WITH_PARENT | 
|  | #undef IPC_STRUCT_MEMBER | 
|  | #undef IPC_STRUCT_END | 
|  | #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ | 
|  | IPC_STRUCT_TRAITS_BEGIN(struct_name) | 
|  | #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name) | 
|  | #define IPC_STRUCT_END() IPC_STRUCT_TRAITS_END() | 
|  |  | 
|  | // Set up so next include will generate read methods. | 
|  | #undef IPC_STRUCT_TRAITS_BEGIN | 
|  | #undef IPC_STRUCT_TRAITS_MEMBER | 
|  | #undef IPC_STRUCT_TRAITS_PARENT | 
|  | #undef IPC_STRUCT_TRAITS_END | 
|  | #define IPC_STRUCT_TRAITS_BEGIN(struct_name)                              \ | 
|  | bool ParamTraits<struct_name>::Read(                                    \ | 
|  | const base::Pickle* m, base::PickleIterator* iter, param_type* p) { \ | 
|  | return | 
|  | #define IPC_STRUCT_TRAITS_MEMBER(name) ReadParam(m, iter, &p->name) && | 
|  | #define IPC_STRUCT_TRAITS_PARENT(type) ParamTraits<type>::Read(m, iter, p) && | 
|  | #define IPC_STRUCT_TRAITS_END() 1; } | 
|  |  | 
|  | #undef IPC_ENUM_TRAITS_VALIDATE | 
|  | #define IPC_ENUM_TRAITS_VALIDATE(enum_name, validation_expression)        \ | 
|  | bool ParamTraits<enum_name>::Read(                                      \ | 
|  | const base::Pickle* m, base::PickleIterator* iter, param_type* p) { \ | 
|  | int value;                                                            \ | 
|  | if (!iter->ReadInt(&value))                                           \ | 
|  | return false;                                                       \ | 
|  | if (!(validation_expression))                                         \ | 
|  | return false;                                                       \ | 
|  | *p = static_cast<param_type>(value);                                  \ | 
|  | return true;                                                          \ | 
|  | } | 
|  |  | 
|  | #endif  // IPC_PARAM_TRAITS_READ_MACROS_H_ | 
|  |  |