blob: a4fc2f9482094cf02d0f34681711fd719cf202d3 [file] [log] [blame]
[email protected]6476c72c2011-02-11 18:46:191// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef IPC_PARAM_TRAITS_READ_MACROS_H_
6#define IPC_PARAM_TRAITS_READ_MACROS_H_
7
8// Null out all the macros that need nulling.
9#include "ipc/ipc_message_null_macros.h"
10
11// STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur.
12#undef IPC_STRUCT_BEGIN
13#undef IPC_STRUCT_MEMBER
14#undef IPC_STRUCT_END
15#define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name)
16#define IPC_STRUCT_MEMBER(type, name) IPC_STRUCT_TRAITS_MEMBER(name)
17#define IPC_STRUCT_END() IPC_STRUCT_TRAITS_END()
18
19// Set up so next include will generate read methods.
20#undef IPC_STRUCT_TRAITS_BEGIN
21#undef IPC_STRUCT_TRAITS_MEMBER
22#undef IPC_STRUCT_TRAITS_END
23#define IPC_STRUCT_TRAITS_BEGIN(struct_name) \
24 bool ParamTraits<struct_name>:: \
25 Read(const Message* m, void** iter, param_type* p) { \
26 return
27#define IPC_STRUCT_TRAITS_MEMBER(name) ReadParam(m, iter, &p->name) &&
28#define IPC_STRUCT_TRAITS_END() 1; }
29
30#undef IPC_ENUM_TRAITS
31#define IPC_ENUM_TRAITS(enum_name) \
32 bool ParamTraits<enum_name>:: \
33 Read(const Message* m, void** iter, param_type* p) { \
34 int type; \
35 if (!m->ReadInt(iter, &type)) \
36 return false; \
37 *p = static_cast<param_type>(type); \
38 return true; \
39 }
40
41#endif // IPC_PARAM_TRAITS_READ_MACROS_H_
42