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

Side by Side Diff: ipc/ipc_message_macros.h

Issue 5526008: Simplify the magic required to create IPC message headers a bit. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ipc/ipc_message_impl_macros.h ('k') | ipc/ipc_message_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This header is meant to be included in multiple passes, hence no traditional 5 // This header is meant to be included in multiple passes, hence no traditional
6 // header guard. 6 // header guard.
7 // 7 //
8 // In the first pass, IPC_MESSAGE_MACROS_ENUMS should be defined, which will 8 // In your XXX_messages_internal.h file, before defining any messages do:
9 // create enums for each of the messages defined with the IPC_MESSAGE_* macros. 9 // #define IPC_MESSAGE_START XMsgStart
10 // 10 // XMstStart value is from the IPCMessageStart enum in ipc_message_utils.h, and
11 // In the second pass, either IPC_MESSAGE_MACROS_DEBUGSTRINGS or 11 // needs to be unique for each different file.
12 // IPC_MESSAGE_MACROS_CLASSES should be defined (if both, DEBUGSTRINGS takes 12 // In your XXX_messages.cc file, after all the includes for param types:
13 // precedence). Only one .cc file should have DEBUGSTRINGS defined, as this 13 // #define IPC_MESSAGE_IMPL
14 // will create helper functions mapping message types to strings. Having 14 // #include "X_messages.h"
15 // CLASSES defined will create classes for each of the messages defined with
16 // the IPC_MESSAGE_* macros.
17 // 15 //
18 // "Sync" messages are just synchronous calls, the Send() call doesn't return 16 // "Sync" messages are just synchronous calls, the Send() call doesn't return
19 // until a reply comes back. Input parameters are first (const TYPE&), and 17 // until a reply comes back. Input parameters are first (const TYPE&), and
20 // To declare a sync message, use the IPC_SYNC_ macros. The numbers at the 18 // To declare a sync message, use the IPC_SYNC_ macros. The numbers at the
21 // end show how many input/output parameters there are (i.e. 1_2 is 1 in, 2 19 // end show how many input/output parameters there are (i.e. 1_2 is 1 in, 2
22 // out). The caller does a Send([route id, ], in1, &out1, &out2). 20 // out). The caller does a Send([route id, ], in1, &out1, &out2).
23 // The receiver's handler function will be 21 // The receiver's handler function will be
24 // void OnSyncMessageName(const type1& in1, type2* out1, type3* out2) 22 // void OnSyncMessageName(const type1& in1, type2* out1, type3* out2)
25 // 23 //
26 // 24 //
27 // A caller can also send a synchronous message, while the receiver can respond 25 // A caller can also send a synchronous message, while the receiver can respond
28 // at a later time. This is transparent from the sender's side. The receiver 26 // at a later time. This is transparent from the sender's side. The receiver
29 // needs to use a different handler that takes in a IPC::Message* as the output 27 // needs to use a different handler that takes in a IPC::Message* as the output
30 // type, stash the message, and when it has the data it can Send the message. 28 // type, stash the message, and when it has the data it can Send the message.
31 // 29 //
32 // Use the IPC_MESSAGE_HANDLER_DELAY_REPLY macro instead of IPC_MESSAGE_HANDLER 30 // Use the IPC_MESSAGE_HANDLER_DELAY_REPLY macro instead of IPC_MESSAGE_HANDLER
33 // IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_SyncMessageName, 31 // IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_SyncMessageName,
34 // OnSyncMessageName) 32 // OnSyncMessageName)
35 // 33 //
36 // The handler function will look like: 34 // The handler function will look like:
37 // void OnSyncMessageName(const type1& in1, IPC::Message* reply_msg); 35 // void OnSyncMessageName(const type1& in1, IPC::Message* reply_msg);
38 // 36 //
39 // Receiver stashes the IPC::Message* pointer, and when it's ready, it does: 37 // Receiver stashes the IPC::Message* pointer, and when it's ready, it does:
40 // ViewHostMsg_SyncMessageName::WriteReplyParams(reply_msg, out1, out2); 38 // ViewHostMsg_SyncMessageName::WriteReplyParams(reply_msg, out1, out2);
41 // Send(reply_msg); 39 // Send(reply_msg);
42 40
43 #include "ipc/ipc_message_utils.h" 41 #include "ipc/ipc_message_utils.h"
44 42
45 43 // In case a file includes several X_messages.h files, we don't want to get
46 #ifndef MESSAGES_INTERNAL_FILE 44 // errors because each X_messages_internal.h file will define this.
47 #error This file should only be included by X_messages.h, which needs to define\ 45 #undef IPC_MESSAGE_START
48 MESSAGES_INTERNAL_FILE first. 46
47 #if defined(IPC_MESSAGE_IMPL)
48 #include "ipc/ipc_message_impl_macros.h"
49 #elif defined(IPC_MESSAGE_MACROS_LOG_ENABLED)
50
51 #ifndef IPC_LOG_TABLE_CREATED
52 #define IPC_LOG_TABLE_CREATED
53
54 #include "base/hash_tables.h"
55
56 typedef void (*LogFunction)(std::string* name,
57 const IPC::Message* msg,
58 std::string* params);
59
60 typedef base::hash_map<uint32, LogFunction > LogFunctionMap;
61 LogFunctionMap g_log_function_mapping;
62
49 #endif 63 #endif
50 64
51 // Trick xcode into seeing the possible real dependencies since they 65
52 // don't understand #include MESSAGES_INTERNAL_FILE. See http://crbug.com/7828 66 #define IPC_MESSAGE_LOG(msg_class) \
53 #if 0 67 class LoggerRegisterHelper##msg_class { \
54 #include "ipc/ipc_sync_message_unittest.h" 68 public: \
55 #include "chrome/common/automation_messages_internal.h" 69 LoggerRegisterHelper##msg_class() { \
56 #include "chrome/common/devtools_messages_internal.h" 70 g_log_function_mapping[msg_class::ID] = msg_class::Log; \
57 #include "chrome/common/plugin_messages_internal.h" 71 } \
58 #include "chrome/common/render_messages_internal.h" 72 }; \
59 #include "chrome/common/worker_messages_internal.h" 73 LoggerRegisterHelper##msg_class g_LoggerRegisterHelper##msg_class;
60 #include "ppapi/proxy/ppapi_messages_internal.h" 74
75 #define IPC_MESSAGE_CONTROL0_EXTRA(msg_class) \
76 IPC_MESSAGE_LOG(msg_class)
77
78 #define IPC_MESSAGE_CONTROL1_EXTRA(msg_class, type1) \
79 IPC_MESSAGE_LOG(msg_class)
80
81 #define IPC_MESSAGE_CONTROL2_EXTRA(msg_class, type1, type2) \
82 IPC_MESSAGE_LOG(msg_class)
83
84 #define IPC_MESSAGE_CONTROL3_EXTRA(msg_class, type1, type2, type3) \
85 IPC_MESSAGE_LOG(msg_class)
86
87 #define IPC_MESSAGE_CONTROL4_EXTRA(msg_class, type1, type2, type3, type4) \
88 IPC_MESSAGE_LOG(msg_class)
89
90 #define IPC_MESSAGE_CONTROL5_EXTRA(msg_class, type1, type2, type3, type4, type5) \
91 IPC_MESSAGE_LOG(msg_class)
92
93 #define IPC_MESSAGE_ROUTED0_EXTRA(msg_class) \
94 IPC_MESSAGE_LOG(msg_class)
95
96 #define IPC_MESSAGE_ROUTED1_EXTRA(msg_class, type1) \
97 IPC_MESSAGE_LOG(msg_class)
98
99 #define IPC_MESSAGE_ROUTED2_EXTRA(msg_class, type1, type2) \
100 IPC_MESSAGE_LOG(msg_class)
101
102 #define IPC_MESSAGE_ROUTED3_EXTRA(msg_class, type1, type2, type3) \
103 IPC_MESSAGE_LOG(msg_class)
104
105 #define IPC_MESSAGE_ROUTED4_EXTRA(msg_class, type1, type2, type3, type4) \
106 IPC_MESSAGE_LOG(msg_class)
107
108 #define IPC_MESSAGE_ROUTED5_EXTRA(msg_class, type1, type2, type3, type4, type5) \
109 IPC_MESSAGE_LOG(msg_class)
110
111 #define IPC_SYNC_MESSAGE_CONTROL0_0_EXTRA(msg_class) \
112 IPC_MESSAGE_LOG(msg_class)
113
114 #define IPC_SYNC_MESSAGE_CONTROL0_1_EXTRA(msg_class, type1_out) \
115 IPC_MESSAGE_LOG(msg_class)
116
117 #define IPC_SYNC_MESSAGE_CONTROL0_2_EXTRA(msg_class, type1_out, type2_out) \
118 IPC_MESSAGE_LOG(msg_class)
119
120 #define IPC_SYNC_MESSAGE_CONTROL0_3_EXTRA(msg_class, type1_out, type2_out, type3 _out) \
121 IPC_MESSAGE_LOG(msg_class)
122
123 #define IPC_SYNC_MESSAGE_CONTROL1_0_EXTRA(msg_class, type1_in) \
124 IPC_MESSAGE_LOG(msg_class)
125
126 #define IPC_SYNC_MESSAGE_CONTROL1_1_EXTRA(msg_class, type1_in, type1_out) \
127 IPC_MESSAGE_LOG(msg_class)
128
129 #define IPC_SYNC_MESSAGE_CONTROL1_2_EXTRA(msg_class, type1_in, type1_out, type2_ out) \
130 IPC_MESSAGE_LOG(msg_class)
131
132 #define IPC_SYNC_MESSAGE_CONTROL1_3_EXTRA(msg_class, type1_in, type1_out, type2_ out, type3_out) \
133 IPC_MESSAGE_LOG(msg_class)
134
135 #define IPC_SYNC_MESSAGE_CONTROL2_0_EXTRA(msg_class, type1_in, type2_in) \
136 IPC_MESSAGE_LOG(msg_class)
137
138 #define IPC_SYNC_MESSAGE_CONTROL2_1_EXTRA(msg_class, type1_in, type2_in, type1_o ut) \
139 IPC_MESSAGE_LOG(msg_class)
140
141 #define IPC_SYNC_MESSAGE_CONTROL2_2_EXTRA(msg_class, type1_in, type2_in, type1_o ut, type2_out) \
142 IPC_MESSAGE_LOG(msg_class)
143
144 #define IPC_SYNC_MESSAGE_CONTROL2_3_EXTRA(msg_class, type1_in, type2_in, type1_o ut, type2_out, type3_out) \
145 IPC_MESSAGE_LOG(msg_class)
146
147 #define IPC_SYNC_MESSAGE_CONTROL3_1_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out) \
148 IPC_MESSAGE_LOG(msg_class)
149
150 #define IPC_SYNC_MESSAGE_CONTROL3_2_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out, type2_out) \
151 IPC_MESSAGE_LOG(msg_class)
152
153 #define IPC_SYNC_MESSAGE_CONTROL3_3_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out, type2_out, type3_out) \
154 IPC_MESSAGE_LOG(msg_class)
155
156 #define IPC_SYNC_MESSAGE_CONTROL3_4_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out, type2_out, type3_out, type4_out) \
157 IPC_MESSAGE_LOG(msg_class)
158
159 #define IPC_SYNC_MESSAGE_CONTROL4_1_EXTRA(msg_class, type1_in, type2_in, type3_i n, type4_in, type1_out) \
160 IPC_MESSAGE_LOG(msg_class)
161
162 #define IPC_SYNC_MESSAGE_CONTROL4_2_EXTRA(msg_class, type1_in, type2_in, type3_i n, type4_in, type1_out, type2_out) \
163 IPC_MESSAGE_LOG(msg_class)
164
165 #define IPC_SYNC_MESSAGE_ROUTED0_0_EXTRA(msg_class) \
166 IPC_MESSAGE_LOG(msg_class)
167
168 #define IPC_SYNC_MESSAGE_ROUTED0_1_EXTRA(msg_class, type1_out) \
169 IPC_MESSAGE_LOG(msg_class)
170
171 #define IPC_SYNC_MESSAGE_ROUTED0_2_EXTRA(msg_class, type1_out, type2_out) \
172 IPC_MESSAGE_LOG(msg_class)
173
174 #define IPC_SYNC_MESSAGE_ROUTED0_3_EXTRA(msg_class, type1_out, type2_out, type3_ out) \
175 IPC_MESSAGE_LOG(msg_class)
176
177 #define IPC_SYNC_MESSAGE_ROUTED1_0_EXTRA(msg_class, type1_in) \
178 IPC_MESSAGE_LOG(msg_class)
179
180 #define IPC_SYNC_MESSAGE_ROUTED1_1_EXTRA(msg_class, type1_in, type1_out) \
181 IPC_MESSAGE_LOG(msg_class)
182
183 #define IPC_SYNC_MESSAGE_ROUTED1_2_EXTRA(msg_class, type1_in, type1_out, type2_o ut) \
184 IPC_MESSAGE_LOG(msg_class)
185
186 #define IPC_SYNC_MESSAGE_ROUTED1_3_EXTRA(msg_class, type1_in, type1_out, type2_o ut, type3_out) \
187 IPC_MESSAGE_LOG(msg_class)
188
189 #define IPC_SYNC_MESSAGE_ROUTED1_4_EXTRA(msg_class, type1_in, type1_out, type2_o ut, type3_out, type4_out) \
190 IPC_MESSAGE_LOG(msg_class)
191
192 #define IPC_SYNC_MESSAGE_ROUTED2_0_EXTRA(msg_class, type1_in, type2_in) \
193 IPC_MESSAGE_LOG(msg_class)
194
195 #define IPC_SYNC_MESSAGE_ROUTED2_1_EXTRA(msg_class, type1_in, type2_in, type1_ou t) \
196 IPC_MESSAGE_LOG(msg_class)
197
198 #define IPC_SYNC_MESSAGE_ROUTED2_2_EXTRA(msg_class, type1_in, type2_in, type1_ou t, type2_out) \
199 IPC_MESSAGE_LOG(msg_class)
200
201 #define IPC_SYNC_MESSAGE_ROUTED2_3_EXTRA(msg_class, type1_in, type2_in, type1_ou t, type2_out, type3_out) \
202 IPC_MESSAGE_LOG(msg_class)
203
204 #define IPC_SYNC_MESSAGE_ROUTED3_0_EXTRA(msg_class, type1_in, type2_in, type3_in ) \
205 IPC_MESSAGE_LOG(msg_class)
206
207 #define IPC_SYNC_MESSAGE_ROUTED3_1_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out) \
208 IPC_MESSAGE_LOG(msg_class)
209
210 #define IPC_SYNC_MESSAGE_ROUTED3_2_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out, type2_out) \
211 IPC_MESSAGE_LOG(msg_class)
212
213 #define IPC_SYNC_MESSAGE_ROUTED3_3_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out, type2_out, type3_out) \
214 IPC_MESSAGE_LOG(msg_class)
215
216 #define IPC_SYNC_MESSAGE_ROUTED3_4_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out, type2_out, type3_out, type4_out) \
217 IPC_MESSAGE_LOG(msg_class)
218
219 #define IPC_SYNC_MESSAGE_ROUTED4_0_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in) \
220 IPC_MESSAGE_LOG(msg_class)
221
222 #define IPC_SYNC_MESSAGE_ROUTED4_1_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type1_out) \
223 IPC_MESSAGE_LOG(msg_class)
224
225 #define IPC_SYNC_MESSAGE_ROUTED4_2_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type1_out, type2_out) \
226 IPC_MESSAGE_LOG(msg_class)
227
228 #define IPC_SYNC_MESSAGE_ROUTED4_3_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type1_out, type2_out, type3_out) \
229 IPC_MESSAGE_LOG(msg_class)
230
231 #define IPC_SYNC_MESSAGE_ROUTED5_0_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in) \
232 IPC_MESSAGE_LOG(msg_class)
233
234 #define IPC_SYNC_MESSAGE_ROUTED5_1_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in, type1_out) \
235 IPC_MESSAGE_LOG(msg_class)
236
237 #define IPC_SYNC_MESSAGE_ROUTED5_2_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in, type1_out, type2_out) \
238 IPC_MESSAGE_LOG(msg_class)
239
240 #define IPC_SYNC_MESSAGE_ROUTED5_3_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in, type1_out, type2_out, type3_out) \
241 IPC_MESSAGE_LOG(msg_class)
242
243 #else
244
245 #define IPC_MESSAGE_CONTROL0_EXTRA(msg_class)
246 #define IPC_MESSAGE_CONTROL1_EXTRA(msg_class, type1)
247 #define IPC_MESSAGE_CONTROL2_EXTRA(msg_class, type1, type2)
248 #define IPC_MESSAGE_CONTROL3_EXTRA(msg_class, type1, type2, type3)
249 #define IPC_MESSAGE_CONTROL4_EXTRA(msg_class, type1, type2, type3, type4)
250 #define IPC_MESSAGE_CONTROL5_EXTRA(msg_class, type1, type2, type3, type4, type5)
251 #define IPC_MESSAGE_ROUTED0_EXTRA(msg_class)
252 #define IPC_MESSAGE_ROUTED1_EXTRA(msg_class, type1)
253 #define IPC_MESSAGE_ROUTED2_EXTRA(msg_class, type1, type2)
254 #define IPC_MESSAGE_ROUTED3_EXTRA(msg_class, type1, type2, type3)
255 #define IPC_MESSAGE_ROUTED4_EXTRA(msg_class, type1, type2, type3, type4)
256 #define IPC_MESSAGE_ROUTED5_EXTRA(msg_class, type1, type2, type3, type4, type5)
257 #define IPC_SYNC_MESSAGE_CONTROL0_0_EXTRA(msg_class)
258 #define IPC_SYNC_MESSAGE_CONTROL0_1_EXTRA(msg_class, type1_out)
259 #define IPC_SYNC_MESSAGE_CONTROL0_2_EXTRA(msg_class, type1_out, type2_out)
260 #define IPC_SYNC_MESSAGE_CONTROL0_3_EXTRA(msg_class, type1_out, type2_out, type3 _out)
261 #define IPC_SYNC_MESSAGE_CONTROL1_0_EXTRA(msg_class, type1_in)
262 #define IPC_SYNC_MESSAGE_CONTROL1_1_EXTRA(msg_class, type1_in, type1_out)
263 #define IPC_SYNC_MESSAGE_CONTROL1_2_EXTRA(msg_class, type1_in, type1_out, type2_ out)
264 #define IPC_SYNC_MESSAGE_CONTROL1_3_EXTRA(msg_class, type1_in, type1_out, type2_ out, type3_out)
265 #define IPC_SYNC_MESSAGE_CONTROL2_0_EXTRA(msg_class, type1_in, type2_in)
266 #define IPC_SYNC_MESSAGE_CONTROL2_1_EXTRA(msg_class, type1_in, type2_in, type1_o ut)
267 #define IPC_SYNC_MESSAGE_CONTROL2_2_EXTRA(msg_class, type1_in, type2_in, type1_o ut, type2_out)
268 #define IPC_SYNC_MESSAGE_CONTROL2_3_EXTRA(msg_class, type1_in, type2_in, type1_o ut, type2_out, type3_out)
269 #define IPC_SYNC_MESSAGE_CONTROL3_1_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out)
270 #define IPC_SYNC_MESSAGE_CONTROL3_2_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out, type2_out)
271 #define IPC_SYNC_MESSAGE_CONTROL3_3_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out, type2_out, type3_out)
272 #define IPC_SYNC_MESSAGE_CONTROL3_4_EXTRA(msg_class, type1_in, type2_in, type3_i n, type1_out, type2_out, type3_out, type4_out)
273 #define IPC_SYNC_MESSAGE_CONTROL4_1_EXTRA(msg_class, type1_in, type2_in, type3_i n, type4_in, type1_out)
274 #define IPC_SYNC_MESSAGE_CONTROL4_2_EXTRA(msg_class, type1_in, type2_in, type3_i n, type4_in, type1_out, type2_out)
275 #define IPC_SYNC_MESSAGE_ROUTED0_0_EXTRA(msg_class)
276 #define IPC_SYNC_MESSAGE_ROUTED0_1_EXTRA(msg_class, type1_out)
277 #define IPC_SYNC_MESSAGE_ROUTED0_2_EXTRA(msg_class, type1_out, type2_out)
278 #define IPC_SYNC_MESSAGE_ROUTED0_3_EXTRA(msg_class, type1_out, type2_out, type3_ out)
279 #define IPC_SYNC_MESSAGE_ROUTED1_0_EXTRA(msg_class, type1_in)
280 #define IPC_SYNC_MESSAGE_ROUTED1_1_EXTRA(msg_class, type1_in, type1_out)
281 #define IPC_SYNC_MESSAGE_ROUTED1_2_EXTRA(msg_class, type1_in, type1_out, type2_o ut)
282 #define IPC_SYNC_MESSAGE_ROUTED1_3_EXTRA(msg_class, type1_in, type1_out, type2_o ut, type3_out)
283 #define IPC_SYNC_MESSAGE_ROUTED1_4_EXTRA(msg_class, type1_in, type1_out, type2_o ut, type3_out, type4_out)
284 #define IPC_SYNC_MESSAGE_ROUTED2_0_EXTRA(msg_class, type1_in, type2_in)
285 #define IPC_SYNC_MESSAGE_ROUTED2_1_EXTRA(msg_class, type1_in, type2_in, type1_ou t)
286 #define IPC_SYNC_MESSAGE_ROUTED2_2_EXTRA(msg_class, type1_in, type2_in, type1_ou t, type2_out)
287 #define IPC_SYNC_MESSAGE_ROUTED2_3_EXTRA(msg_class, type1_in, type2_in, type1_ou t, type2_out, type3_out)
288 #define IPC_SYNC_MESSAGE_ROUTED3_0_EXTRA(msg_class, type1_in, type2_in, type3_in )
289 #define IPC_SYNC_MESSAGE_ROUTED3_1_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out)
290 #define IPC_SYNC_MESSAGE_ROUTED3_2_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out, type2_out)
291 #define IPC_SYNC_MESSAGE_ROUTED3_3_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out, type2_out, type3_out)
292 #define IPC_SYNC_MESSAGE_ROUTED3_4_EXTRA(msg_class, type1_in, type2_in, type3_in , type1_out, type2_out, type3_out, type4_out)
293 #define IPC_SYNC_MESSAGE_ROUTED4_0_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in)
294 #define IPC_SYNC_MESSAGE_ROUTED4_1_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type1_out)
295 #define IPC_SYNC_MESSAGE_ROUTED4_2_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type1_out, type2_out)
296 #define IPC_SYNC_MESSAGE_ROUTED4_3_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type1_out, type2_out, type3_out)
297 #define IPC_SYNC_MESSAGE_ROUTED5_0_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in)
298 #define IPC_SYNC_MESSAGE_ROUTED5_1_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in, type1_out)
299 #define IPC_SYNC_MESSAGE_ROUTED5_2_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in, type1_out, type2_out)
300 #define IPC_SYNC_MESSAGE_ROUTED5_3_EXTRA(msg_class, type1_in, type2_in, type3_in , type4_in, type5_in, type1_out, type2_out, type3_out)
301
61 #endif 302 #endif
62 303
63 #ifndef IPC_MESSAGE_MACROS_INCLUDE_BLOCK 304 // Note: we currently use __LINE__ to give unique IDs to messages within a file.
64 #define IPC_MESSAGE_MACROS_INCLUDE_BLOCK 305 // They're globally unique since each file defines its own IPC_MESSAGE_START.
65 306 // Ideally, we wouldn't use line numbers, but instead use the __COUNTER__ macro,
66 // Multi-pass include of X_messages_internal.h. Preprocessor magic allows 307 // but it needs gcc 4.3 and xcode doesn't use it yet. When that happens, switch
67 // us to use 1 header to define the enums and classes for our render messages. 308 // to it.
68 #define IPC_MESSAGE_MACROS_ENUMS
69 #include MESSAGES_INTERNAL_FILE
70
71 #define IPC_MESSAGE_MACROS_CLASSES
72 #include MESSAGES_INTERNAL_FILE
73
74 #ifdef IPC_MESSAGE_MACROS_LOG_ENABLED
75 #define IPC_MESSAGE_MACROS_LOG
76 #include MESSAGES_INTERNAL_FILE
77 #endif
78
79 #undef MESSAGES_INTERNAL_FILE
80 #undef IPC_MESSAGE_MACROS_INCLUDE_BLOCK
81
82 #endif
83
84 #if defined(IPC_MESSAGE_MACROS_ENUMS)
85 #undef IPC_MESSAGE_MACROS_ENUMS
86
87
88 // Undefine the macros from the previous pass (if any).
89 #undef IPC_BEGIN_MESSAGES
90 #undef IPC_END_MESSAGES
91 #undef IPC_MESSAGE_CONTROL0
92 #undef IPC_MESSAGE_CONTROL1
93 #undef IPC_MESSAGE_CONTROL2
94 #undef IPC_MESSAGE_CONTROL3
95 #undef IPC_MESSAGE_CONTROL4
96 #undef IPC_MESSAGE_CONTROL5
97 #undef IPC_MESSAGE_ROUTED0
98 #undef IPC_MESSAGE_ROUTED1
99 #undef IPC_MESSAGE_ROUTED2
100 #undef IPC_MESSAGE_ROUTED3
101 #undef IPC_MESSAGE_ROUTED4
102 #undef IPC_MESSAGE_ROUTED5
103 #undef IPC_SYNC_MESSAGE_CONTROL0_0
104 #undef IPC_SYNC_MESSAGE_CONTROL0_1
105 #undef IPC_SYNC_MESSAGE_CONTROL0_2
106 #undef IPC_SYNC_MESSAGE_CONTROL0_3
107 #undef IPC_SYNC_MESSAGE_CONTROL1_0
108 #undef IPC_SYNC_MESSAGE_CONTROL1_1
109 #undef IPC_SYNC_MESSAGE_CONTROL1_2
110 #undef IPC_SYNC_MESSAGE_CONTROL1_3
111 #undef IPC_SYNC_MESSAGE_CONTROL2_0
112 #undef IPC_SYNC_MESSAGE_CONTROL2_1
113 #undef IPC_SYNC_MESSAGE_CONTROL2_2
114 #undef IPC_SYNC_MESSAGE_CONTROL2_3
115 #undef IPC_SYNC_MESSAGE_CONTROL3_1
116 #undef IPC_SYNC_MESSAGE_CONTROL3_2
117 #undef IPC_SYNC_MESSAGE_CONTROL3_3
118 #undef IPC_SYNC_MESSAGE_CONTROL3_4
119 #undef IPC_SYNC_MESSAGE_CONTROL4_1
120 #undef IPC_SYNC_MESSAGE_CONTROL4_2
121 #undef IPC_SYNC_MESSAGE_ROUTED0_0
122 #undef IPC_SYNC_MESSAGE_ROUTED0_1
123 #undef IPC_SYNC_MESSAGE_ROUTED0_2
124 #undef IPC_SYNC_MESSAGE_ROUTED0_3
125 #undef IPC_SYNC_MESSAGE_ROUTED1_0
126 #undef IPC_SYNC_MESSAGE_ROUTED1_1
127 #undef IPC_SYNC_MESSAGE_ROUTED1_2
128 #undef IPC_SYNC_MESSAGE_ROUTED1_3
129 #undef IPC_SYNC_MESSAGE_ROUTED1_4
130 #undef IPC_SYNC_MESSAGE_ROUTED2_0
131 #undef IPC_SYNC_MESSAGE_ROUTED2_1
132 #undef IPC_SYNC_MESSAGE_ROUTED2_2
133 #undef IPC_SYNC_MESSAGE_ROUTED2_3
134 #undef IPC_SYNC_MESSAGE_ROUTED3_0
135 #undef IPC_SYNC_MESSAGE_ROUTED3_1
136 #undef IPC_SYNC_MESSAGE_ROUTED3_2
137 #undef IPC_SYNC_MESSAGE_ROUTED3_3
138 #undef IPC_SYNC_MESSAGE_ROUTED3_4
139 #undef IPC_SYNC_MESSAGE_ROUTED4_0
140 #undef IPC_SYNC_MESSAGE_ROUTED4_1
141 #undef IPC_SYNC_MESSAGE_ROUTED4_2
142 #undef IPC_SYNC_MESSAGE_ROUTED4_3
143 #undef IPC_SYNC_MESSAGE_ROUTED5_0
144 #undef IPC_SYNC_MESSAGE_ROUTED5_1
145 #undef IPC_SYNC_MESSAGE_ROUTED5_2
146 #undef IPC_SYNC_MESSAGE_ROUTED5_3
147
148 // We're using the lowest 16 bits of type for the message id, and the highest
149 // 16 bits for the channel type.
150 //
151 // Do label##PreStart so that automation messages keep the same id as before.
152 #define IPC_BEGIN_MESSAGES(label) \
153 enum label##MsgType { \
154 label##Start = label##MsgStart << 16, \
155 label##PreStart = (label##MsgStart << 16) - 1,
156
157 #define IPC_END_MESSAGES(label) \
158 label##End \
159 };
160 309
161 #define IPC_MESSAGE_CONTROL0(msg_class) \ 310 #define IPC_MESSAGE_CONTROL0(msg_class) \
162 msg_class##__ID, 311 class msg_class : public IPC::Message { \
312 public: \
313 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
314 msg_class() \
315 : IPC::Message(MSG_ROUTING_CONTROL, \
316 ID, \
317 PRIORITY_NORMAL) {} \
318 }; \
319 IPC_MESSAGE_CONTROL0_EXTRA(msg_class)
163 320
164 #define IPC_MESSAGE_CONTROL1(msg_class, type1) \ 321 #define IPC_MESSAGE_CONTROL1(msg_class, type1) \
165 msg_class##__ID, 322 class msg_class : public IPC::MessageWithTuple< Tuple1<type1> > { \
166 323 public: \
167 #define IPC_MESSAGE_CONTROL2(msg_class, type1, type2) \ 324 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
168 msg_class##__ID, 325 msg_class(const type1& arg1); \
169 326 ~msg_class(); \
170 #define IPC_MESSAGE_CONTROL3(msg_class, type1, type2, type3) \ 327 static void Log(std::string* name, const Message* msg, std::string* l); \
171 msg_class##__ID, 328 }; \
172 329 IPC_MESSAGE_CONTROL1_EXTRA(msg_class, type1)
173 #define IPC_MESSAGE_CONTROL4(msg_class, type1, type2, type3, type4) \ 330
174 msg_class##__ID, 331 #define IPC_MESSAGE_CONTROL2(msg_class, type1, type2) \
332 class msg_class : public IPC::MessageWithTuple< Tuple2<type1, type2> > { \
333 public: \
334 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
335 msg_class(const type1& arg1, const type2& arg2); \
336 ~msg_class(); \
337 static void Log(std::string* name, const Message* msg, std::string* l); \
338 }; \
339 IPC_MESSAGE_CONTROL2_EXTRA(msg_class, type1, type2)
340
341 #define IPC_MESSAGE_CONTROL3(msg_class, type1, type2, type3) \
342 class msg_class : \
343 public IPC::MessageWithTuple< Tuple3<type1, type2, type3> > { \
344 public: \
345 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
346 msg_class(const type1& arg1, const type2& arg2, const type3& arg3); \
347 ~msg_class(); \
348 static void Log(std::string* name, const Message* msg, std::string* l); \
349 }; \
350 IPC_MESSAGE_CONTROL3_EXTRA(msg_class, type1, type2, type3)
351
352 #define IPC_MESSAGE_CONTROL4(msg_class, type1, type2, type3, type4) \
353 class msg_class : \
354 public IPC::MessageWithTuple< Tuple4<type1, type2, type3, type4> > { \
355 public: \
356 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
357 msg_class(const type1& arg1, const type2& arg2, const type3& arg3, \
358 const type4& arg4); \
359 ~msg_class(); \
360 static void Log(std::string* name, const Message* msg, std::string* l); \
361 }; \
362 IPC_MESSAGE_CONTROL4_EXTRA(msg_class, type1, type2, type3, type4)
175 363
176 #define IPC_MESSAGE_CONTROL5(msg_class, type1, type2, type3, type4, type5) \ 364 #define IPC_MESSAGE_CONTROL5(msg_class, type1, type2, type3, type4, type5) \
177 msg_class##__ID, 365 class msg_class : \
366 public IPC::MessageWithTuple< Tuple5<type1, type2, type3, type4, \
367 type5> > { \
368 public: \
369 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
370 msg_class(const type1& arg1, const type2& arg2, \
371 const type3& arg3, const type4& arg4, const type5& arg5); \
372 ~msg_class(); \
373 static void Log(std::string* name, const Message* msg, std::string* l); \
374 }; \
375 IPC_MESSAGE_CONTROL5_EXTRA(msg_class, type1, type2, type3, type4, type5)
178 376
179 #define IPC_MESSAGE_ROUTED0(msg_class) \ 377 #define IPC_MESSAGE_ROUTED0(msg_class) \
180 msg_class##__ID, 378 class msg_class : public IPC::Message { \
379 public: \
380 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
381 msg_class(int32 routing_id) \
382 : IPC::Message(routing_id, ID, PRIORITY_NORMAL) {} \
383 }; \
384 IPC_MESSAGE_ROUTED0_EXTRA(msg_class)
181 385
182 #define IPC_MESSAGE_ROUTED1(msg_class, type1) \ 386 #define IPC_MESSAGE_ROUTED1(msg_class, type1) \
183 msg_class##__ID, 387 class msg_class : public IPC::MessageWithTuple< Tuple1<type1> > { \
184 388 public: \
185 #define IPC_MESSAGE_ROUTED2(msg_class, type1, type2) \ 389 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
186 msg_class##__ID, 390 msg_class(int32 routing_id, const type1& arg1); \
187 391 ~msg_class(); \
188 #define IPC_MESSAGE_ROUTED3(msg_class, type1, type2, type3) \ 392 static void Log(std::string* name, const Message* msg, std::string* l); \
189 msg_class##__ID, 393 }; \
190 394 IPC_MESSAGE_ROUTED1_EXTRA(msg_class, type1)
191 #define IPC_MESSAGE_ROUTED4(msg_class, type1, type2, type3, type4) \ 395
192 msg_class##__ID, 396 #define IPC_MESSAGE_ROUTED2(msg_class, type1, type2) \
397 class msg_class \
398 : public IPC::MessageWithTuple< Tuple2<type1, type2> > { \
399 public: \
400 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
401 msg_class(int32 routing_id, const type1& arg1, const type2& arg2); \
402 ~msg_class(); \
403 static void Log(std::string* name, const Message* msg, std::string* l); \
404 }; \
405 IPC_MESSAGE_ROUTED2_EXTRA(msg_class, type1, type2)
406
407 #define IPC_MESSAGE_ROUTED3(msg_class, type1, type2, type3) \
408 class msg_class \
409 : public IPC::MessageWithTuple< Tuple3<type1, type2, type3> > { \
410 public: \
411 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
412 msg_class(int32 routing_id, const type1& arg1, const type2& arg2, \
413 const type3& arg3); \
414 ~msg_class(); \
415 static void Log(std::string* name, const Message* msg, std::string* l); \
416 }; \
417 IPC_MESSAGE_ROUTED3_EXTRA(msg_class, type1, type2, type3)
418
419 #define IPC_MESSAGE_ROUTED4(msg_class, type1, type2, type3, type4) \
420 class msg_class \
421 : public IPC::MessageWithTuple< Tuple4<type1, type2, type3, type4> > { \
422 public: \
423 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
424 msg_class(int32 routing_id, const type1& arg1, const type2& arg2, \
425 const type3& arg3, const type4& arg4); \
426 ~msg_class(); \
427 static void Log(std::string* name, const Message* msg, std::string* l); \
428 }; \
429 IPC_MESSAGE_ROUTED4_EXTRA(msg_class, type1, type2, type3, type4)
193 430
194 #define IPC_MESSAGE_ROUTED5(msg_class, type1, type2, type3, type4, type5) \ 431 #define IPC_MESSAGE_ROUTED5(msg_class, type1, type2, type3, type4, type5) \
195 msg_class##__ID, 432 class msg_class \
433 : public IPC::MessageWithTuple< Tuple5<type1, type2, type3, type4, \
434 type5> > { \
435 public: \
436 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
437 msg_class(int32 routing_id, const type1& arg1, const type2& arg2, \
438 const type3& arg3, const type4& arg4, const type5& arg5); \
439 ~msg_class(); \
440 static void Log(std::string* name, const Message* msg, std::string* l); \
441 }; \
442 IPC_MESSAGE_ROUTED5_EXTRA(msg_class, type1, type2, type3, type4, type5)
196 443
197 #define IPC_SYNC_MESSAGE_CONTROL0_0(msg_class) \ 444 #define IPC_SYNC_MESSAGE_CONTROL0_0(msg_class) \
198 msg_class##__ID, 445 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple0 > { \
199 446 public: \
200 #define IPC_SYNC_MESSAGE_CONTROL0_1(msg_class, type1_out) \ 447 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
201 msg_class##__ID, 448 msg_class(); \
449 ~msg_class(); \
450 static void Log(std::string* name, const Message* msg, std::string* l); \
451 }; \
452 IPC_SYNC_MESSAGE_CONTROL0_0_EXTRA(msg_class)
453
454 #define IPC_SYNC_MESSAGE_CONTROL0_1(msg_class, type1_out) \
455 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple1<type1_out&> > {\
456 public: \
457 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
458 msg_class(type1_out* arg1); \
459 ~msg_class(); \
460 static void Log(std::string* name, const Message* msg, std::string* l); \
461 }; \
462 IPC_SYNC_MESSAGE_CONTROL0_1_EXTRA(msg_class, type1_out)
202 463
203 #define IPC_SYNC_MESSAGE_CONTROL0_2(msg_class, type1_out, type2_out) \ 464 #define IPC_SYNC_MESSAGE_CONTROL0_2(msg_class, type1_out, type2_out) \
204 msg_class##__ID, 465 class msg_class : \
466 public IPC::MessageWithReply<Tuple0, Tuple2<type1_out&, type2_out&> > { \
467 public: \
468 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
469 msg_class(type1_out* arg1, type2_out* arg2); \
470 ~msg_class(); \
471 static void Log(std::string* name, const Message* msg, std::string* l); \
472 }; \
473 IPC_SYNC_MESSAGE_CONTROL0_2_EXTRA(msg_class, type1_out, type2_out)
205 474
206 #define IPC_SYNC_MESSAGE_CONTROL0_3(msg_class, type1_out, type2_out, type3_out) \ 475 #define IPC_SYNC_MESSAGE_CONTROL0_3(msg_class, type1_out, type2_out, type3_out) \
207 msg_class##__ID, 476 class msg_class : \
208 477 public IPC::MessageWithReply<Tuple0, \
209 #define IPC_SYNC_MESSAGE_CONTROL1_0(msg_class, type1_in) \ 478 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
210 msg_class##__ID, 479 public: \
211 480 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
212 #define IPC_SYNC_MESSAGE_CONTROL1_1(msg_class, type1_in, type1_out) \ 481 msg_class(type1_out* arg1, type2_out* arg2, type3_out* arg3); \
213 msg_class##__ID, 482 ~msg_class(); \
483 static void Log(std::string* name, const Message* msg, std::string* l); \
484 }; \
485 IPC_SYNC_MESSAGE_CONTROL0_3_EXTRA(msg_class, type1_out, type2_out, type3_out)
486
487 #define IPC_SYNC_MESSAGE_CONTROL1_0(msg_class, type1_in) \
488 class msg_class : \
489 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple0 > { \
490 public: \
491 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
492 msg_class(const type1_in& arg1); \
493 ~msg_class(); \
494 static void Log(std::string* name, const Message* msg, std::string* l); \
495 }; \
496 IPC_SYNC_MESSAGE_CONTROL1_0_EXTRA(msg_class, type1_in)
497
498 #define IPC_SYNC_MESSAGE_CONTROL1_1(msg_class, type1_in, type1_out) \
499 class msg_class : \
500 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple1<type1_out&> > { \
501 public: \
502 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
503 msg_class(const type1_in& arg1, type1_out* arg2); \
504 ~msg_class(); \
505 static void Log(std::string* name, const Message* msg, std::string* l); \
506 }; \
507 IPC_SYNC_MESSAGE_CONTROL1_1_EXTRA(msg_class, type1_in, type1_out)
214 508
215 #define IPC_SYNC_MESSAGE_CONTROL1_2(msg_class, type1_in, type1_out, type2_out) \ 509 #define IPC_SYNC_MESSAGE_CONTROL1_2(msg_class, type1_in, type1_out, type2_out) \
216 msg_class##__ID, 510 class msg_class : \
511 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple2<type1_out&, type2_ou t&> > { \
512 public: \
513 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
514 msg_class(const type1_in& arg1, type1_out* arg2, type2_out* arg3); \
515 ~msg_class(); \
516 static void Log(std::string* name, const Message* msg, std::string* l); \
517 }; \
518 IPC_SYNC_MESSAGE_CONTROL1_2_EXTRA(msg_class, type1_in, type1_out, type2_out)
217 519
218 #define IPC_SYNC_MESSAGE_CONTROL1_3(msg_class, type1_in, type1_out, type2_out, t ype3_out) \ 520 #define IPC_SYNC_MESSAGE_CONTROL1_3(msg_class, type1_in, type1_out, type2_out, t ype3_out) \
219 msg_class##__ID, 521 class msg_class : \
220 522 public IPC::MessageWithReply<Tuple1<type1_in>, \
221 #define IPC_SYNC_MESSAGE_CONTROL2_0(msg_class, type1_in, type2_in) \ 523 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
222 msg_class##__ID, 524 public: \
525 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
526 msg_class(const type1_in& arg1, type1_out* arg2, type2_out* arg3, type3_out* arg4); \
527 ~msg_class(); \
528 static void Log(std::string* name, const Message* msg, std::string* l); \
529 }; \
530 IPC_SYNC_MESSAGE_CONTROL1_3_EXTRA(msg_class, type1_in, type1_out, type2_out, t ype3_out)
531
532 #define IPC_SYNC_MESSAGE_CONTROL2_0(msg_class, type1_in, type2_in) \
533 class msg_class : \
534 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple0 > { \
535 public: \
536 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
537 msg_class(const type1_in& arg1, const type2_in& arg2); \
538 ~msg_class(); \
539 static void Log(std::string* name, const Message* msg, std::string* l); \
540 }; \
541 IPC_SYNC_MESSAGE_CONTROL2_0_EXTRA(msg_class, type1_in, type2_in)
223 542
224 #define IPC_SYNC_MESSAGE_CONTROL2_1(msg_class, type1_in, type2_in, type1_out) \ 543 #define IPC_SYNC_MESSAGE_CONTROL2_1(msg_class, type1_in, type2_in, type1_out) \
225 msg_class##__ID, 544 class msg_class : \
545 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple1<type1_out& > > { \
546 public: \
547 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
548 msg_class(const type1_in& arg1, const type2_in& arg2, type1_out* arg3); \
549 ~msg_class(); \
550 static void Log(std::string* name, const Message* msg, std::string* l); \
551 }; \
552 IPC_SYNC_MESSAGE_CONTROL2_1_EXTRA(msg_class, type1_in, type2_in, type1_out)
226 553
227 #define IPC_SYNC_MESSAGE_CONTROL2_2(msg_class, type1_in, type2_in, type1_out, ty pe2_out) \ 554 #define IPC_SYNC_MESSAGE_CONTROL2_2(msg_class, type1_in, type2_in, type1_out, ty pe2_out) \
228 msg_class##__ID, 555 class msg_class : \
556 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
557 Tuple2<type1_out&, type2_out&> > { \
558 public: \
559 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
560 msg_class(const type1_in& arg1, const type2_in& arg2, type1_out* arg3, type2 _out* arg4); \
561 ~msg_class(); \
562 static void Log(std::string* name, const Message* msg, std::string* l); \
563 }; \
564 IPC_SYNC_MESSAGE_CONTROL2_2_EXTRA(msg_class, type1_in, type2_in, type1_out, ty pe2_out)
229 565
230 #define IPC_SYNC_MESSAGE_CONTROL2_3(msg_class, type1_in, type2_in, type1_out, ty pe2_out, type3_out) \ 566 #define IPC_SYNC_MESSAGE_CONTROL2_3(msg_class, type1_in, type2_in, type1_out, ty pe2_out, type3_out) \
231 msg_class##__ID, 567 class msg_class : \
568 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
569 Tuple3<type1_out&, type2_out&, type3_out&> > { \
570 public: \
571 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
572 msg_class(const type1_in& arg1, const type2_in& arg2, type1_out* arg3, type2 _out* arg4, type3_out* arg5); \
573 ~msg_class(); \
574 static void Log(std::string* name, const Message* msg, std::string* l); \
575 }; \
576 IPC_SYNC_MESSAGE_CONTROL2_3_EXTRA(msg_class, type1_in, type2_in, type1_out, ty pe2_out, type3_out)
232 577
233 #define IPC_SYNC_MESSAGE_CONTROL3_1(msg_class, type1_in, type2_in, type3_in, typ e1_out) \ 578 #define IPC_SYNC_MESSAGE_CONTROL3_1(msg_class, type1_in, type2_in, type3_in, typ e1_out) \
234 msg_class##__ID, 579 class msg_class : \
580 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
581 Tuple1<type1_out&> > { \
582 public: \
583 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
584 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4); \
585 ~msg_class(); \
586 static void Log(std::string* name, const Message* msg, std::string* l); \
587 }; \
588 IPC_SYNC_MESSAGE_CONTROL3_1_EXTRA(msg_class, type1_in, type2_in, type3_in, typ e1_out)
235 589
236 #define IPC_SYNC_MESSAGE_CONTROL3_2(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out) \ 590 #define IPC_SYNC_MESSAGE_CONTROL3_2(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out) \
237 msg_class##__ID, 591 class msg_class : \
592 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
593 Tuple2<type1_out&, type2_out&> > { \
594 public: \
595 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
596 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4, type2_out* arg5); \
597 ~msg_class(); \
598 static void Log(std::string* name, const Message* msg, std::string* l); \
599 }; \
600 IPC_SYNC_MESSAGE_CONTROL3_2_EXTRA(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out)
238 601
239 #define IPC_SYNC_MESSAGE_CONTROL3_3(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out) \ 602 #define IPC_SYNC_MESSAGE_CONTROL3_3(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out) \
240 msg_class##__ID, 603 class msg_class : \
604 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
605 Tuple3<type1_out&, type2_out&, type3_out&> > { \
606 public: \
607 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
608 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4, type2_out* arg5, type3_out* arg6); \
609 ~msg_class(); \
610 static void Log(std::string* name, const Message* msg, std::string* l); \
611 }; \
612 IPC_SYNC_MESSAGE_CONTROL3_3_EXTRA(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out)
241 613
242 #define IPC_SYNC_MESSAGE_CONTROL3_4(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out, type4_out) \ 614 #define IPC_SYNC_MESSAGE_CONTROL3_4(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out, type4_out) \
243 msg_class##__ID, 615 class msg_class : \
616 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
617 Tuple4<type1_out&, type2_out&, type3_out&, type4_out&> > { \
618 public: \
619 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
620 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4, type2_out* arg5, type3_out* arg6, type4_out* arg7); \
621 ~msg_class(); \
622 static void Log(std::string* name, const Message* msg, std::string* l); \
623 }; \
624 IPC_SYNC_MESSAGE_CONTROL3_4_EXTRA(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out, type4_out)
244 625
245 #define IPC_SYNC_MESSAGE_CONTROL4_1(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out) \ 626 #define IPC_SYNC_MESSAGE_CONTROL4_1(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out) \
246 msg_class##__ID, 627 class msg_class : \
628 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
629 Tuple1<type1_out&> > { \
630 public: \
631 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
632 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, type1_out* arg6); \
633 ~msg_class(); \
634 static void Log(std::string* name, const Message* msg, std::string* l); \
635 }; \
636 IPC_SYNC_MESSAGE_CONTROL4_1_EXTRA(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out)
247 637
248 #define IPC_SYNC_MESSAGE_CONTROL4_2(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out, type2_out) \ 638 #define IPC_SYNC_MESSAGE_CONTROL4_2(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out, type2_out) \
249 msg_class##__ID, 639 class msg_class : \
640 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
641 Tuple2<type1_out&, type2_out&> > { \
642 public: \
643 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
644 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, type1_out* arg5, type2_out* arg6); \
645 ~msg_class(); \
646 static void Log(std::string* name, const Message* msg, std::string* l); \
647 }; \
648 IPC_SYNC_MESSAGE_CONTROL4_2_EXTRA(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out, type2_out)
250 649
251 #define IPC_SYNC_MESSAGE_ROUTED0_0(msg_class) \ 650 #define IPC_SYNC_MESSAGE_ROUTED0_0(msg_class) \
252 msg_class##__ID, 651 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple0 > { \
652 public: \
653 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
654 msg_class(int routing_id); \
655 ~msg_class(); \
656 static void Log(std::string* name, const Message* msg, std::string* l); \
657 }; \
658 IPC_SYNC_MESSAGE_ROUTED0_0_EXTRA(msg_class)
253 659
254 #define IPC_SYNC_MESSAGE_ROUTED0_1(msg_class, type1_out) \ 660 #define IPC_SYNC_MESSAGE_ROUTED0_1(msg_class, type1_out) \
255 msg_class##__ID, 661 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple1<type1_out&> > { \
662 public: \
663 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
664 msg_class(int routing_id, type1_out* arg1); \
665 ~msg_class(); \
666 static void Log(std::string* name, const Message* msg, std::string* l); \
667 }; \
668 IPC_SYNC_MESSAGE_ROUTED0_1_EXTRA(msg_class, type1_out)
256 669
257 #define IPC_SYNC_MESSAGE_ROUTED0_2(msg_class, type1_out, type2_out) \ 670 #define IPC_SYNC_MESSAGE_ROUTED0_2(msg_class, type1_out, type2_out) \
258 msg_class##__ID, 671 class msg_class : \
672 public IPC::MessageWithReply<Tuple0, Tuple2<type1_out&, type2_out&> > { \
673 public: \
674 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
675 msg_class(int routing_id, type1_out* arg1, type2_out* arg2); \
676 ~msg_class(); \
677 static void Log(std::string* name, const Message* msg, std::string* l); \
678 }; \
679 IPC_SYNC_MESSAGE_ROUTED0_2_EXTRA(msg_class, type1_out, type2_out)
259 680
260 #define IPC_SYNC_MESSAGE_ROUTED0_3(msg_class, type1_out, type2_out, type3_out) \ 681 #define IPC_SYNC_MESSAGE_ROUTED0_3(msg_class, type1_out, type2_out, type3_out) \
261 msg_class##__ID, 682 class msg_class : \
683 public IPC::MessageWithReply<Tuple0, \
684 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
685 public: \
686 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
687 msg_class(int routing_id, type1_out* arg1, type2_out* arg2, type3_out* arg3) ; \
688 ~msg_class(); \
689 static void Log(std::string* name, const Message* msg, std::string* l); \
690 }; \
691 IPC_SYNC_MESSAGE_ROUTED0_3_EXTRA(msg_class, type1_out, type2_out, type3_out)
262 692
263 #define IPC_SYNC_MESSAGE_ROUTED1_0(msg_class, type1_in) \ 693 #define IPC_SYNC_MESSAGE_ROUTED1_0(msg_class, type1_in) \
264 msg_class##__ID, 694 class msg_class : \
695 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple0 > { \
696 public: \
697 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
698 msg_class(int routing_id, const type1_in& arg1); \
699 ~msg_class(); \
700 static void Log(std::string* name, const Message* msg, std::string* l); \
701 }; \
702 IPC_SYNC_MESSAGE_ROUTED1_0_EXTRA(msg_class, type1_in)
265 703
266 #define IPC_SYNC_MESSAGE_ROUTED1_1(msg_class, type1_in, type1_out) \ 704 #define IPC_SYNC_MESSAGE_ROUTED1_1(msg_class, type1_in, type1_out) \
267 msg_class##__ID, 705 class msg_class : \
706 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple1<type1_out&> > { \
707 public: \
708 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
709 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2); \
710 ~msg_class(); \
711 static void Log(std::string* name, const Message* msg, std::string* l); \
712 }; \
713 IPC_SYNC_MESSAGE_ROUTED1_1_EXTRA(msg_class, type1_in, type1_out)
268 714
269 #define IPC_SYNC_MESSAGE_ROUTED1_2(msg_class, type1_in, type1_out, type2_out) \ 715 #define IPC_SYNC_MESSAGE_ROUTED1_2(msg_class, type1_in, type1_out, type2_out) \
270 msg_class##__ID, 716 class msg_class : \
717 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple2<type1_out&, type2_ou t&> > { \
718 public: \
719 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
720 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2, type2_out* arg3); \
721 ~msg_class(); \
722 static void Log(std::string* name, const Message* msg, std::string* l); \
723 }; \
724 IPC_SYNC_MESSAGE_ROUTED1_2_EXTRA(msg_class, type1_in, type1_out, type2_out)
271 725
272 #define IPC_SYNC_MESSAGE_ROUTED1_3(msg_class, type1_in, type1_out, type2_out, ty pe3_out) \ 726 #define IPC_SYNC_MESSAGE_ROUTED1_3(msg_class, type1_in, type1_out, type2_out, ty pe3_out) \
273 msg_class##__ID, 727 class msg_class : \
728 public IPC::MessageWithReply<Tuple1<type1_in>, \
729 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
730 public: \
731 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
732 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2, type2_out* arg3, type3_out* arg4); \
733 ~msg_class(); \
734 static void Log(std::string* name, const Message* msg, std::string* l); \
735 }; \
736 IPC_SYNC_MESSAGE_ROUTED1_3_EXTRA(msg_class, type1_in, type1_out, type2_out, ty pe3_out)
274 737
275 #define IPC_SYNC_MESSAGE_ROUTED1_4(msg_class, type1_in, type1_out, type2_out, ty pe3_out, type4_out) \ 738 #define IPC_SYNC_MESSAGE_ROUTED1_4(msg_class, type1_in, type1_out, type2_out, ty pe3_out, type4_out) \
276 msg_class##__ID, 739 class msg_class : \
740 public IPC::MessageWithReply<Tuple1<type1_in>, \
741 Tuple4<type1_out&, type2_out&, type3_out&, type4_out&> >{ \
742 public: \
743 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
744 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2, type2_out* arg3, type3_out* arg4, type4_out* arg5); \
745 ~msg_class(); \
746 static void Log(std::string* name, const Message* msg, std::string* l); \
747 }; \
748 IPC_SYNC_MESSAGE_ROUTED1_4_EXTRA(msg_class, type1_in, type1_out, type2_out, ty pe3_out, type4_out)
277 749
278 #define IPC_SYNC_MESSAGE_ROUTED2_0(msg_class, type1_in, type2_in) \ 750 #define IPC_SYNC_MESSAGE_ROUTED2_0(msg_class, type1_in, type2_in) \
279 msg_class##__ID, 751 class msg_class : \
752 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple0 > { \
753 public: \
754 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
755 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2); \
756 ~msg_class(); \
757 static void Log(std::string* name, const Message* msg, std::string* l); \
758 }; \
759 IPC_SYNC_MESSAGE_ROUTED2_0_EXTRA(msg_class, type1_in, type2_in)
280 760
281 #define IPC_SYNC_MESSAGE_ROUTED2_1(msg_class, type1_in, type2_in, type1_out) \ 761 #define IPC_SYNC_MESSAGE_ROUTED2_1(msg_class, type1_in, type2_in, type1_out) \
282 msg_class##__ID, 762 class msg_class : \
763 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple1<type1_out& > > { \
764 public: \
765 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
766 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, type1_ out* arg3); \
767 ~msg_class(); \
768 static void Log(std::string* name, const Message* msg, std::string* l); \
769 }; \
770 IPC_SYNC_MESSAGE_ROUTED2_1_EXTRA(msg_class, type1_in, type2_in, type1_out)
283 771
284 #define IPC_SYNC_MESSAGE_ROUTED2_2(msg_class, type1_in, type2_in, type1_out, typ e2_out) \ 772 #define IPC_SYNC_MESSAGE_ROUTED2_2(msg_class, type1_in, type2_in, type1_out, typ e2_out) \
285 msg_class##__ID, 773 class msg_class : \
774 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
775 Tuple2<type1_out&, type2_out&> > { \
776 public: \
777 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
778 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, type1_ out* arg3, type2_out* arg4); \
779 ~msg_class(); \
780 static void Log(std::string* name, const Message* msg, std::string* l); \
781 }; \
782 IPC_SYNC_MESSAGE_ROUTED2_2_EXTRA(msg_class, type1_in, type2_in, type1_out, typ e2_out)
286 783
287 #define IPC_SYNC_MESSAGE_ROUTED2_3(msg_class, type1_in, type2_in, type1_out, typ e2_out, type3_out) \ 784 #define IPC_SYNC_MESSAGE_ROUTED2_3(msg_class, type1_in, type2_in, type1_out, typ e2_out, type3_out) \
288 msg_class##__ID, 785 class msg_class : \
786 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
787 Tuple3<type1_out&, type2_out&, type3_out&> > { \
788 public: \
789 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
790 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, type1_ out* arg3, type2_out* arg4, type3_out* arg5); \
791 ~msg_class(); \
792 static void Log(std::string* name, const Message* msg, std::string* l); \
793 }; \
794 IPC_SYNC_MESSAGE_ROUTED2_3_EXTRA(msg_class, type1_in, type2_in, type1_out, typ e2_out, type3_out)
289 795
290 #define IPC_SYNC_MESSAGE_ROUTED3_0(msg_class, type1_in, type2_in, type3_in) \ 796 #define IPC_SYNC_MESSAGE_ROUTED3_0(msg_class, type1_in, type2_in, type3_in) \
291 msg_class##__ID, 797 class msg_class : \
798 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, Tuple0 > { \
799 public: \
800 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
801 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3); \
802 ~msg_class(); \
803 static void Log(std::string* name, const Message* msg, std::string* l); \
804 }; \
805 IPC_SYNC_MESSAGE_ROUTED3_0_EXTRA(msg_class, type1_in, type2_in, type3_in)
292 806
293 #define IPC_SYNC_MESSAGE_ROUTED3_1(msg_class, type1_in, type2_in, type3_in, type 1_out) \ 807 #define IPC_SYNC_MESSAGE_ROUTED3_1(msg_class, type1_in, type2_in, type3_in, type 1_out) \
294 msg_class##__ID, 808 class msg_class : \
809 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
810 Tuple1<type1_out&> > { \
811 public: \
812 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
813 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4); \
814 ~msg_class(); \
815 static void Log(std::string* name, const Message* msg, std::string* l); \
816 }; \
817 IPC_SYNC_MESSAGE_ROUTED3_1_EXTRA(msg_class, type1_in, type2_in, type3_in, type 1_out)
295 818
296 #define IPC_SYNC_MESSAGE_ROUTED3_2(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out) \ 819 #define IPC_SYNC_MESSAGE_ROUTED3_2(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out) \
297 msg_class##__ID, 820 class msg_class : \
821 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
822 Tuple2<type1_out&, type2_out&> > { \
823 public: \
824 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
825 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4, type2_out* arg5); \
826 ~msg_class(); \
827 static void Log(std::string* name, const Message* msg, std::string* l); \
828 }; \
829 IPC_SYNC_MESSAGE_ROUTED3_2_EXTRA(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out)
298 830
299 #define IPC_SYNC_MESSAGE_ROUTED3_3(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out) \ 831 #define IPC_SYNC_MESSAGE_ROUTED3_3(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out) \
300 msg_class##__ID, 832 class msg_class : \
833 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
834 Tuple3<type1_out&, type2_out&, type3_out&> > { \
835 public: \
836 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
837 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4, type2_out* arg5, type3_out* arg6); \
838 ~msg_class(); \
839 static void Log(std::string* name, const Message* msg, std::string* l); \
840 }; \
841 IPC_SYNC_MESSAGE_ROUTED3_3_EXTRA(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out)
301 842
302 #define IPC_SYNC_MESSAGE_ROUTED3_4(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out, type4_out) \ 843 #define IPC_SYNC_MESSAGE_ROUTED3_4(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out, type4_out) \
303 msg_class##__ID, 844 class msg_class : \
845 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
846 Tuple4<type1_out&, type2_out&, type3_out&, type4_out&> > { \
847 public: \
848 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
849 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, type1_out* arg4, type2_out* arg5, type3_out* arg6, type4_out* ar g7); \
850 ~msg_class(); \
851 static void Log(std::string* name, const Message* msg, std::string* l); \
852 }; \
853 IPC_SYNC_MESSAGE_ROUTED3_4_EXTRA(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out, type4_out)
304 854
305 #define IPC_SYNC_MESSAGE_ROUTED4_0(msg_class, type1_in, type2_in, type3_in, type 4_in) \ 855 #define IPC_SYNC_MESSAGE_ROUTED4_0(msg_class, type1_in, type2_in, type3_in, type 4_in) \
306 msg_class##__ID, 856 class msg_class : \
857 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
858 Tuple0 > { \
859 public: \
860 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
861 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4); \
862 ~msg_class(); \
863 static void Log(std::string* name, const Message* msg, std::string* l); \
864 }; \
865 IPC_SYNC_MESSAGE_ROUTED4_0_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in)
307 866
308 #define IPC_SYNC_MESSAGE_ROUTED4_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out) \ 867 #define IPC_SYNC_MESSAGE_ROUTED4_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out) \
309 msg_class##__ID, 868 class msg_class : \
869 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
870 Tuple1<type1_out&> > { \
871 public: \
872 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
873 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, type1_out* arg6); \
874 ~msg_class(); \
875 static void Log(std::string* name, const Message* msg, std::string* l); \
876 }; \
877 IPC_SYNC_MESSAGE_ROUTED4_1_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out)
310 878
311 #define IPC_SYNC_MESSAGE_ROUTED4_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out) \ 879 #define IPC_SYNC_MESSAGE_ROUTED4_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out) \
312 msg_class##__ID, 880 class msg_class : \
881 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
882 Tuple2<type1_out&, type2_out&> > { \
883 public: \
884 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
885 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, type1_out* arg5, type2_out* arg6); \
886 ~msg_class(); \
887 static void Log(std::string* name, const Message* msg, std::string* l); \
888 }; \
889 IPC_SYNC_MESSAGE_ROUTED4_2_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out)
313 890
314 #define IPC_SYNC_MESSAGE_ROUTED4_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out, type3_out) \ 891 #define IPC_SYNC_MESSAGE_ROUTED4_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out, type3_out) \
315 msg_class##__ID, 892 class msg_class : \
893 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
894 Tuple3<type1_out&, type2_out&, type3_out&> > { \
895 public: \
896 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
897 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, type1_out* arg5, type2_out* arg6, type3_ou t* arg7); \
898 ~msg_class(); \
899 static void Log(std::string* name, const Message* msg, std::string* l); \
900 }; \
901 IPC_SYNC_MESSAGE_ROUTED4_3_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out, type3_out)
316 902
317 #define IPC_SYNC_MESSAGE_ROUTED5_0(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in) \ 903 #define IPC_SYNC_MESSAGE_ROUTED5_0(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in) \
318 msg_class##__ID, 904 class msg_class : \
905 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
906 Tuple0 > { \
907 public: \
908 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
909 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, const type5_in& arg5); \
910 ~msg_class(); \
911 static void Log(std::string* name, const Message* msg, std::string* l); \
912 }; \
913 IPC_SYNC_MESSAGE_ROUTED5_0_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in)
319 914
320 #define IPC_SYNC_MESSAGE_ROUTED5_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out) \ 915 #define IPC_SYNC_MESSAGE_ROUTED5_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out) \
321 msg_class##__ID, 916 class msg_class : \
917 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
918 Tuple1<type1_out&> > { \
919 public: \
920 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
921 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, const type5_in& arg5, type1_out* arg6); \
922 ~msg_class(); \
923 static void Log(std::string* name, const Message* msg, std::string* l); \
924 }; \
925 IPC_SYNC_MESSAGE_ROUTED5_1_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out)
322 926
323 #define IPC_SYNC_MESSAGE_ROUTED5_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out) \ 927 #define IPC_SYNC_MESSAGE_ROUTED5_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out) \
324 msg_class##__ID, 928 class msg_class : \
929 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
930 Tuple2<type1_out&, type2_out&> > { \
931 public: \
932 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
933 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, const type4_in& arg5, type1_out* arg6, typ e2_out* arg7); \
934 ~msg_class(); \
935 static void Log(std::string* name, const Message* msg, std::string* l); \
936 }; \
937 IPC_SYNC_MESSAGE_ROUTED5_2_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out)
325 938
326 #define IPC_SYNC_MESSAGE_ROUTED5_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out, type3_out) \ 939 #define IPC_SYNC_MESSAGE_ROUTED5_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out, type3_out) \
327 msg_class##__ID, 940 class msg_class : \
941 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
942 Tuple3<type1_out&, type2_out&, type3_out&> > { \
943 public: \
944 enum { ID = (IPC_MESSAGE_START << 16) + __LINE__ }; \
945 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, const type4_in& arg4, const type4_in& arg5, type1_out* arg6, typ e2_out* arg7, type3_out* arg8); \
946 ~msg_class(); \
947 static void Log(std::string* name, const Message* msg, std::string* l); \
948 }; \
949 IPC_SYNC_MESSAGE_ROUTED5_3_EXTRA(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out, type3_out)
950
951
328 952
329 // Message crackers and handlers. 953 // Message crackers and handlers.
330 // Prefer to use the IPC_BEGIN_MESSAGE_MAP_EX to the older macros since they 954 // Prefer to use the IPC_BEGIN_MESSAGE_MAP_EX to the older macros since they
331 // allow you to detect when a message could not be de-serialized. Usage: 955 // allow you to detect when a message could not be de-serialized. Usage:
332 // 956 //
333 // void MyClass::OnMessageReceived(const IPC::Message& msg) { 957 // void MyClass::OnMessageReceived(const IPC::Message& msg) {
334 // bool msg_is_good = false; 958 // bool msg_is_good = false;
335 // IPC_BEGIN_MESSAGE_MAP_EX(MyClass, msg, msg_is_good) 959 // IPC_BEGIN_MESSAGE_MAP_EX(MyClass, msg, msg_is_good)
336 // IPC_MESSAGE_HANDLER(MsgClassOne, OnMsgClassOne) 960 // IPC_MESSAGE_HANDLER(MsgClassOne, OnMsgClassOne)
337 // ...more handlers here ... 961 // ...more handlers here ...
338 // IPC_MESSAGE_HANDLER(MsgClassTen, OnMsgClassTen) 962 // IPC_MESSAGE_HANDLER(MsgClassTen, OnMsgClassTen)
339 // IPC_END_MESSAGE_MAP_EX() 963 // IPC_END_MESSAGE_MAP_EX()
340 // if (!msg_is_good) { 964 // if (!msg_is_good) {
341 // // Signal error here or terminate offending process. 965 // // Signal error here or terminate offending process.
342 // } 966 // }
343 // } 967 // }
344 968
969
345 #define IPC_DEFINE_MESSAGE_MAP(class_name) \ 970 #define IPC_DEFINE_MESSAGE_MAP(class_name) \
346 void class_name::OnMessageReceived(const IPC::Message& msg) \ 971 void class_name::OnMessageReceived(const IPC::Message& msg) \
347 IPC_BEGIN_MESSAGE_MAP(class_name, msg) 972 IPC_BEGIN_MESSAGE_MAP(class_name, msg)
348 973
349 #define IPC_BEGIN_MESSAGE_MAP_EX(class_name, msg, msg_is_ok) \ 974 #define IPC_BEGIN_MESSAGE_MAP_EX(class_name, msg, msg_is_ok) \
350 { \ 975 { \
351 typedef class_name _IpcMessageHandlerClass; \ 976 typedef class_name _IpcMessageHandlerClass; \
352 const IPC::Message& ipc_message__ = msg; \ 977 const IPC::Message& ipc_message__ = msg; \
353 bool& msg_is_ok__ = msg_is_ok; \ 978 bool& msg_is_ok__ = msg_is_ok; \
354 switch (ipc_message__.type()) { \ 979 switch (ipc_message__.type()) { \
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 "Invalid message with type = " << \ 1023 "Invalid message with type = " << \
399 ipc_message__.type()) 1024 ipc_message__.type())
400 1025
401 #define IPC_END_MESSAGE_MAP() \ 1026 #define IPC_END_MESSAGE_MAP() \
402 DCHECK(msg_is_ok__); \ 1027 DCHECK(msg_is_ok__); \
403 } \ 1028 } \
404 } 1029 }
405 1030
406 #define IPC_END_MESSAGE_MAP_EX() \ 1031 #define IPC_END_MESSAGE_MAP_EX() \
407 } \ 1032 } \
408 } 1033 }
409
410 #elif defined(IPC_MESSAGE_MACROS_LOG)
411 #undef IPC_MESSAGE_MACROS_LOG
412
413
414 // Undefine the macros from the previous pass (if any).
415 #undef IPC_BEGIN_MESSAGES
416 #undef IPC_END_MESSAGES
417 #undef IPC_MESSAGE_CONTROL0
418 #undef IPC_MESSAGE_CONTROL1
419 #undef IPC_MESSAGE_CONTROL2
420 #undef IPC_MESSAGE_CONTROL3
421 #undef IPC_MESSAGE_CONTROL4
422 #undef IPC_MESSAGE_CONTROL5
423 #undef IPC_MESSAGE_ROUTED0
424 #undef IPC_MESSAGE_ROUTED1
425 #undef IPC_MESSAGE_ROUTED2
426 #undef IPC_MESSAGE_ROUTED3
427 #undef IPC_MESSAGE_ROUTED4
428 #undef IPC_MESSAGE_ROUTED5
429 #undef IPC_SYNC_MESSAGE_CONTROL0_0
430 #undef IPC_SYNC_MESSAGE_CONTROL0_1
431 #undef IPC_SYNC_MESSAGE_CONTROL0_2
432 #undef IPC_SYNC_MESSAGE_CONTROL0_3
433 #undef IPC_SYNC_MESSAGE_CONTROL1_0
434 #undef IPC_SYNC_MESSAGE_CONTROL1_1
435 #undef IPC_SYNC_MESSAGE_CONTROL1_2
436 #undef IPC_SYNC_MESSAGE_CONTROL1_3
437 #undef IPC_SYNC_MESSAGE_CONTROL2_0
438 #undef IPC_SYNC_MESSAGE_CONTROL2_1
439 #undef IPC_SYNC_MESSAGE_CONTROL2_2
440 #undef IPC_SYNC_MESSAGE_CONTROL2_3
441 #undef IPC_SYNC_MESSAGE_CONTROL3_1
442 #undef IPC_SYNC_MESSAGE_CONTROL3_2
443 #undef IPC_SYNC_MESSAGE_CONTROL3_3
444 #undef IPC_SYNC_MESSAGE_CONTROL3_4
445 #undef IPC_SYNC_MESSAGE_CONTROL4_1
446 #undef IPC_SYNC_MESSAGE_CONTROL4_2
447 #undef IPC_SYNC_MESSAGE_ROUTED0_0
448 #undef IPC_SYNC_MESSAGE_ROUTED0_1
449 #undef IPC_SYNC_MESSAGE_ROUTED0_2
450 #undef IPC_SYNC_MESSAGE_ROUTED0_3
451 #undef IPC_SYNC_MESSAGE_ROUTED1_0
452 #undef IPC_SYNC_MESSAGE_ROUTED1_1
453 #undef IPC_SYNC_MESSAGE_ROUTED1_2
454 #undef IPC_SYNC_MESSAGE_ROUTED1_3
455 #undef IPC_SYNC_MESSAGE_ROUTED1_4
456 #undef IPC_SYNC_MESSAGE_ROUTED2_0
457 #undef IPC_SYNC_MESSAGE_ROUTED2_1
458 #undef IPC_SYNC_MESSAGE_ROUTED2_2
459 #undef IPC_SYNC_MESSAGE_ROUTED2_3
460 #undef IPC_SYNC_MESSAGE_ROUTED3_0
461 #undef IPC_SYNC_MESSAGE_ROUTED3_1
462 #undef IPC_SYNC_MESSAGE_ROUTED3_2
463 #undef IPC_SYNC_MESSAGE_ROUTED3_3
464 #undef IPC_SYNC_MESSAGE_ROUTED3_4
465 #undef IPC_SYNC_MESSAGE_ROUTED4_0
466 #undef IPC_SYNC_MESSAGE_ROUTED4_1
467 #undef IPC_SYNC_MESSAGE_ROUTED4_2
468 #undef IPC_SYNC_MESSAGE_ROUTED4_3
469 #undef IPC_SYNC_MESSAGE_ROUTED5_0
470 #undef IPC_SYNC_MESSAGE_ROUTED5_1
471 #undef IPC_SYNC_MESSAGE_ROUTED5_2
472 #undef IPC_SYNC_MESSAGE_ROUTED5_3
473
474 #ifndef IPC_LOG_TABLE_CREATED
475 #define IPC_LOG_TABLE_CREATED
476 typedef void (*LogFunction)(uint32 type,
477 std::string* name,
478 const IPC::Message* msg,
479 std::string* params);
480
481 LogFunction g_log_function_mapping[LastMsgIndex];
482 #endif
483
484
485 #define IPC_BEGIN_MESSAGES(label) \
486 void label##MsgLog(uint32 type, std::string* name, const IPC::Message* msg, \
487 std::string* params) { \
488 switch (type) {
489
490 #define IPC_END_MESSAGES(label) \
491 default: \
492 if (name) \
493 *name = "[UNKNOWN " #label " MSG]"; \
494 } \
495 } \
496 class LoggerRegisterHelper##label { \
497 public: \
498 LoggerRegisterHelper##label() { \
499 g_log_function_mapping[label##MsgStart] = label##MsgLog; \
500 } \
501 }; \
502 LoggerRegisterHelper##label g_LoggerRegisterHelper##label;
503
504 #define IPC_MESSAGE_LOG(msg_class) \
505 case msg_class##__ID: \
506 if (name) \
507 *name = #msg_class; \
508 if (msg && params) \
509 msg_class::Log(msg, params); \
510 break;
511
512 #define IPC_MESSAGE_CONTROL0(msg_class) \
513 IPC_MESSAGE_LOG(msg_class)
514
515 #define IPC_MESSAGE_CONTROL1(msg_class, type1) \
516 IPC_MESSAGE_LOG(msg_class)
517
518 #define IPC_MESSAGE_CONTROL2(msg_class, type1, type2) \
519 IPC_MESSAGE_LOG(msg_class)
520
521 #define IPC_MESSAGE_CONTROL3(msg_class, type1, type2, type3) \
522 IPC_MESSAGE_LOG(msg_class)
523
524 #define IPC_MESSAGE_CONTROL4(msg_class, type1, type2, type3, type4) \
525 IPC_MESSAGE_LOG(msg_class)
526
527 #define IPC_MESSAGE_CONTROL5(msg_class, type1, type2, type3, type4, type5) \
528 IPC_MESSAGE_LOG(msg_class)
529
530 #define IPC_MESSAGE_ROUTED0(msg_class) \
531 IPC_MESSAGE_LOG(msg_class)
532
533 #define IPC_MESSAGE_ROUTED1(msg_class, type1) \
534 IPC_MESSAGE_LOG(msg_class)
535
536 #define IPC_MESSAGE_ROUTED2(msg_class, type1, type2) \
537 IPC_MESSAGE_LOG(msg_class)
538
539 #define IPC_MESSAGE_ROUTED3(msg_class, type1, type2, type3) \
540 IPC_MESSAGE_LOG(msg_class)
541
542 #define IPC_MESSAGE_ROUTED4(msg_class, type1, type2, type3, type4) \
543 IPC_MESSAGE_LOG(msg_class)
544
545 #define IPC_MESSAGE_ROUTED5(msg_class, type1, type2, type3, type4, type5) \
546 IPC_MESSAGE_LOG(msg_class)
547
548 #define IPC_SYNC_MESSAGE_CONTROL0_0(msg_class) \
549 IPC_MESSAGE_LOG(msg_class)
550
551 #define IPC_SYNC_MESSAGE_CONTROL0_1(msg_class, type1_out) \
552 IPC_MESSAGE_LOG(msg_class)
553
554 #define IPC_SYNC_MESSAGE_CONTROL0_2(msg_class, type1_out, type2_out) \
555 IPC_MESSAGE_LOG(msg_class)
556
557 #define IPC_SYNC_MESSAGE_CONTROL0_3(msg_class, type1_out, type2_out, type3_out) \
558 IPC_MESSAGE_LOG(msg_class)
559
560 #define IPC_SYNC_MESSAGE_CONTROL1_0(msg_class, type1_in) \
561 IPC_MESSAGE_LOG(msg_class)
562
563 #define IPC_SYNC_MESSAGE_CONTROL1_1(msg_class, type1_in, type1_out) \
564 IPC_MESSAGE_LOG(msg_class)
565
566 #define IPC_SYNC_MESSAGE_CONTROL1_2(msg_class, type1_in, type1_out, type2_out) \
567 IPC_MESSAGE_LOG(msg_class)
568
569 #define IPC_SYNC_MESSAGE_CONTROL1_3(msg_class, type1_in, type1_out, type2_out, t ype3_out) \
570 IPC_MESSAGE_LOG(msg_class)
571
572 #define IPC_SYNC_MESSAGE_CONTROL2_0(msg_class, type1_in, type2_in) \
573 IPC_MESSAGE_LOG(msg_class)
574
575 #define IPC_SYNC_MESSAGE_CONTROL2_1(msg_class, type1_in, type2_in, type1_out) \
576 IPC_MESSAGE_LOG(msg_class)
577
578 #define IPC_SYNC_MESSAGE_CONTROL2_2(msg_class, type1_in, type2_in, type1_out, ty pe2_out) \
579 IPC_MESSAGE_LOG(msg_class)
580
581 #define IPC_SYNC_MESSAGE_CONTROL2_3(msg_class, type1_in, type2_in, type1_out, ty pe2_out, type3_out) \
582 IPC_MESSAGE_LOG(msg_class)
583
584 #define IPC_SYNC_MESSAGE_CONTROL3_1(msg_class, type1_in, type2_in, type3_in, typ e1_out) \
585 IPC_MESSAGE_LOG(msg_class)
586
587 #define IPC_SYNC_MESSAGE_CONTROL3_2(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out) \
588 IPC_MESSAGE_LOG(msg_class)
589
590 #define IPC_SYNC_MESSAGE_CONTROL3_3(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out) \
591 IPC_MESSAGE_LOG(msg_class)
592
593 #define IPC_SYNC_MESSAGE_CONTROL3_4(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out, type4_out) \
594 IPC_MESSAGE_LOG(msg_class)
595
596 #define IPC_SYNC_MESSAGE_CONTROL4_1(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out) \
597 IPC_MESSAGE_LOG(msg_class)
598
599 #define IPC_SYNC_MESSAGE_CONTROL4_2(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out, type2_out) \
600 IPC_MESSAGE_LOG(msg_class)
601
602 #define IPC_SYNC_MESSAGE_ROUTED0_0(msg_class) \
603 IPC_MESSAGE_LOG(msg_class)
604
605 #define IPC_SYNC_MESSAGE_ROUTED0_1(msg_class, type1_out) \
606 IPC_MESSAGE_LOG(msg_class)
607
608 #define IPC_SYNC_MESSAGE_ROUTED0_2(msg_class, type1_out, type2_out) \
609 IPC_MESSAGE_LOG(msg_class)
610
611 #define IPC_SYNC_MESSAGE_ROUTED0_3(msg_class, type1_out, type2_out, type3_out) \
612 IPC_MESSAGE_LOG(msg_class)
613
614 #define IPC_SYNC_MESSAGE_ROUTED1_0(msg_class, type1_in) \
615 IPC_MESSAGE_LOG(msg_class)
616
617 #define IPC_SYNC_MESSAGE_ROUTED1_1(msg_class, type1_in, type1_out) \
618 IPC_MESSAGE_LOG(msg_class)
619
620 #define IPC_SYNC_MESSAGE_ROUTED1_2(msg_class, type1_in, type1_out, type2_out) \
621 IPC_MESSAGE_LOG(msg_class)
622
623 #define IPC_SYNC_MESSAGE_ROUTED1_3(msg_class, type1_in, type1_out, type2_out, ty pe3_out) \
624 IPC_MESSAGE_LOG(msg_class)
625
626 #define IPC_SYNC_MESSAGE_ROUTED1_4(msg_class, type1_in, type1_out, type2_out, ty pe3_out, type4_out) \
627 IPC_MESSAGE_LOG(msg_class)
628
629 #define IPC_SYNC_MESSAGE_ROUTED2_0(msg_class, type1_in, type2_in) \
630 IPC_MESSAGE_LOG(msg_class)
631
632 #define IPC_SYNC_MESSAGE_ROUTED2_1(msg_class, type1_in, type2_in, type1_out) \
633 IPC_MESSAGE_LOG(msg_class)
634
635 #define IPC_SYNC_MESSAGE_ROUTED2_2(msg_class, type1_in, type2_in, type1_out, typ e2_out) \
636 IPC_MESSAGE_LOG(msg_class)
637
638 #define IPC_SYNC_MESSAGE_ROUTED2_3(msg_class, type1_in, type2_in, type1_out, typ e2_out, type3_out) \
639 IPC_MESSAGE_LOG(msg_class)
640
641 #define IPC_SYNC_MESSAGE_ROUTED3_0(msg_class, type1_in, type2_in, type3_in) \
642 IPC_MESSAGE_LOG(msg_class)
643
644 #define IPC_SYNC_MESSAGE_ROUTED3_1(msg_class, type1_in, type2_in, type3_in, type 1_out) \
645 IPC_MESSAGE_LOG(msg_class)
646
647 #define IPC_SYNC_MESSAGE_ROUTED3_2(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out) \
648 IPC_MESSAGE_LOG(msg_class)
649
650 #define IPC_SYNC_MESSAGE_ROUTED3_3(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out) \
651 IPC_MESSAGE_LOG(msg_class)
652
653 #define IPC_SYNC_MESSAGE_ROUTED3_4(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out, type4_out) \
654 IPC_MESSAGE_LOG(msg_class)
655
656 #define IPC_SYNC_MESSAGE_ROUTED4_0(msg_class, type1_in, type2_in, type3_in, type 4_in) \
657 IPC_MESSAGE_LOG(msg_class)
658
659 #define IPC_SYNC_MESSAGE_ROUTED4_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out) \
660 IPC_MESSAGE_LOG(msg_class)
661
662 #define IPC_SYNC_MESSAGE_ROUTED4_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out) \
663 IPC_MESSAGE_LOG(msg_class)
664
665 #define IPC_SYNC_MESSAGE_ROUTED4_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out, type3_out) \
666 IPC_MESSAGE_LOG(msg_class)
667
668 #define IPC_SYNC_MESSAGE_ROUTED5_0(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in) \
669 IPC_MESSAGE_LOG(msg_class)
670
671 #define IPC_SYNC_MESSAGE_ROUTED5_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out) \
672 IPC_MESSAGE_LOG(msg_class)
673
674 #define IPC_SYNC_MESSAGE_ROUTED5_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out) \
675 IPC_MESSAGE_LOG(msg_class)
676
677 #define IPC_SYNC_MESSAGE_ROUTED5_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out, type3_out) \
678 IPC_MESSAGE_LOG(msg_class)
679
680 #elif defined(IPC_MESSAGE_MACROS_CLASSES)
681 #undef IPC_MESSAGE_MACROS_CLASSES
682
683
684 // Undefine the macros from the previous pass (if any).
685 #undef IPC_BEGIN_MESSAGES
686 #undef IPC_END_MESSAGES
687 #undef IPC_MESSAGE_CONTROL0
688 #undef IPC_MESSAGE_CONTROL1
689 #undef IPC_MESSAGE_CONTROL2
690 #undef IPC_MESSAGE_CONTROL3
691 #undef IPC_MESSAGE_CONTROL4
692 #undef IPC_MESSAGE_CONTROL5
693 #undef IPC_MESSAGE_ROUTED0
694 #undef IPC_MESSAGE_ROUTED1
695 #undef IPC_MESSAGE_ROUTED2
696 #undef IPC_MESSAGE_ROUTED3
697 #undef IPC_MESSAGE_ROUTED4
698 #undef IPC_MESSAGE_ROUTED5
699 #undef IPC_SYNC_MESSAGE_CONTROL0_0
700 #undef IPC_SYNC_MESSAGE_CONTROL0_1
701 #undef IPC_SYNC_MESSAGE_CONTROL0_2
702 #undef IPC_SYNC_MESSAGE_CONTROL0_3
703 #undef IPC_SYNC_MESSAGE_CONTROL1_0
704 #undef IPC_SYNC_MESSAGE_CONTROL1_1
705 #undef IPC_SYNC_MESSAGE_CONTROL1_2
706 #undef IPC_SYNC_MESSAGE_CONTROL1_3
707 #undef IPC_SYNC_MESSAGE_CONTROL2_0
708 #undef IPC_SYNC_MESSAGE_CONTROL2_1
709 #undef IPC_SYNC_MESSAGE_CONTROL2_2
710 #undef IPC_SYNC_MESSAGE_CONTROL2_3
711 #undef IPC_SYNC_MESSAGE_CONTROL3_1
712 #undef IPC_SYNC_MESSAGE_CONTROL3_2
713 #undef IPC_SYNC_MESSAGE_CONTROL3_3
714 #undef IPC_SYNC_MESSAGE_CONTROL3_4
715 #undef IPC_SYNC_MESSAGE_CONTROL4_1
716 #undef IPC_SYNC_MESSAGE_CONTROL4_2
717 #undef IPC_SYNC_MESSAGE_ROUTED0_0
718 #undef IPC_SYNC_MESSAGE_ROUTED0_1
719 #undef IPC_SYNC_MESSAGE_ROUTED0_2
720 #undef IPC_SYNC_MESSAGE_ROUTED0_3
721 #undef IPC_SYNC_MESSAGE_ROUTED1_0
722 #undef IPC_SYNC_MESSAGE_ROUTED1_1
723 #undef IPC_SYNC_MESSAGE_ROUTED1_2
724 #undef IPC_SYNC_MESSAGE_ROUTED1_3
725 #undef IPC_SYNC_MESSAGE_ROUTED1_4
726 #undef IPC_SYNC_MESSAGE_ROUTED2_0
727 #undef IPC_SYNC_MESSAGE_ROUTED2_1
728 #undef IPC_SYNC_MESSAGE_ROUTED2_2
729 #undef IPC_SYNC_MESSAGE_ROUTED2_3
730 #undef IPC_SYNC_MESSAGE_ROUTED3_0
731 #undef IPC_SYNC_MESSAGE_ROUTED3_1
732 #undef IPC_SYNC_MESSAGE_ROUTED3_2
733 #undef IPC_SYNC_MESSAGE_ROUTED3_3
734 #undef IPC_SYNC_MESSAGE_ROUTED3_4
735 #undef IPC_SYNC_MESSAGE_ROUTED4_0
736 #undef IPC_SYNC_MESSAGE_ROUTED4_1
737 #undef IPC_SYNC_MESSAGE_ROUTED4_2
738 #undef IPC_SYNC_MESSAGE_ROUTED4_3
739 #undef IPC_SYNC_MESSAGE_ROUTED5_0
740 #undef IPC_SYNC_MESSAGE_ROUTED5_1
741 #undef IPC_SYNC_MESSAGE_ROUTED5_2
742 #undef IPC_SYNC_MESSAGE_ROUTED5_3
743
744 #define IPC_BEGIN_MESSAGES(label)
745 #define IPC_END_MESSAGES(label)
746
747 #define IPC_MESSAGE_CONTROL0(msg_class) \
748 class msg_class : public IPC::Message { \
749 public: \
750 enum { ID = msg_class##__ID }; \
751 msg_class() \
752 : IPC::Message(MSG_ROUTING_CONTROL, \
753 ID, \
754 PRIORITY_NORMAL) {} \
755 };
756
757 #define IPC_MESSAGE_CONTROL1(msg_class, type1) \
758 class msg_class : public IPC::MessageWithTuple< Tuple1<type1> > { \
759 public: \
760 enum { ID = msg_class##__ID }; \
761 msg_class(const type1& arg1); \
762 ~msg_class(); \
763 static void Log(const Message* msg, std::string* l); \
764 };
765
766 #define IPC_MESSAGE_CONTROL2(msg_class, type1, type2) \
767 class msg_class : public IPC::MessageWithTuple< Tuple2<type1, type2> > { \
768 public: \
769 enum { ID = msg_class##__ID }; \
770 msg_class(const type1& arg1, const type2& arg2); \
771 ~msg_class(); \
772 static void Log(const Message* msg, std::string* l); \
773 };
774
775 #define IPC_MESSAGE_CONTROL3(msg_class, type1, type2, type3) \
776 class msg_class : \
777 public IPC::MessageWithTuple< Tuple3<type1, type2, type3> > { \
778 public: \
779 enum { ID = msg_class##__ID }; \
780 msg_class(const type1& arg1, const type2& arg2, const type3& arg3); \
781 ~msg_class(); \
782 static void Log(const Message* msg, std::string* l); \
783 };
784
785 #define IPC_MESSAGE_CONTROL4(msg_class, type1, type2, type3, type4) \
786 class msg_class : \
787 public IPC::MessageWithTuple< Tuple4<type1, type2, type3, type4> > { \
788 public: \
789 enum { ID = msg_class##__ID }; \
790 msg_class(const type1& arg1, const type2& arg2, const type3& arg3, \
791 const type4& arg4); \
792 ~msg_class(); \
793 static void Log(const Message* msg, std::string* l); \
794 };
795
796 #define IPC_MESSAGE_CONTROL5(msg_class, type1, type2, type3, type4, type5) \
797 class msg_class : \
798 public IPC::MessageWithTuple< Tuple5<type1, type2, type3, type4, \
799 type5> > { \
800 public: \
801 enum { ID = msg_class##__ID }; \
802 msg_class(const type1& arg1, const type2& arg2, \
803 const type3& arg3, const type4& arg4, const type5& arg5); \
804 ~msg_class(); \
805 static void Log(const Message* msg, std::string* l); \
806 };
807
808 #define IPC_MESSAGE_ROUTED0(msg_class) \
809 class msg_class : public IPC::Message { \
810 public: \
811 enum { ID = msg_class##__ID }; \
812 msg_class(int32 routing_id) \
813 : IPC::Message(routing_id, ID, PRIORITY_NORMAL) {} \
814 };
815
816 #define IPC_MESSAGE_ROUTED1(msg_class, type1) \
817 class msg_class : public IPC::MessageWithTuple< Tuple1<type1> > { \
818 public: \
819 enum { ID = msg_class##__ID }; \
820 msg_class(int32 routing_id, const type1& arg1); \
821 ~msg_class(); \
822 static void Log(const Message* msg, std::string* l); \
823 };
824
825 #define IPC_MESSAGE_ROUTED2(msg_class, type1, type2) \
826 class msg_class \
827 : public IPC::MessageWithTuple< Tuple2<type1, type2> > { \
828 public: \
829 enum { ID = msg_class##__ID }; \
830 msg_class(int32 routing_id, const type1& arg1, const type2& arg2); \
831 ~msg_class(); \
832 static void Log(const Message* msg, std::string* l); \
833 };
834
835 #define IPC_MESSAGE_ROUTED3(msg_class, type1, type2, type3) \
836 class msg_class \
837 : public IPC::MessageWithTuple< Tuple3<type1, type2, type3> > { \
838 public: \
839 enum { ID = msg_class##__ID }; \
840 msg_class(int32 routing_id, const type1& arg1, const type2& arg2, \
841 const type3& arg3); \
842 ~msg_class(); \
843 static void Log(const Message* msg, std::string* l); \
844 };
845
846 #define IPC_MESSAGE_ROUTED4(msg_class, type1, type2, type3, type4) \
847 class msg_class \
848 : public IPC::MessageWithTuple< Tuple4<type1, type2, type3, type4> > { \
849 public: \
850 enum { ID = msg_class##__ID }; \
851 msg_class(int32 routing_id, const type1& arg1, const type2& arg2, \
852 const type3& arg3, const type4& arg4); \
853 ~msg_class(); \
854 static void Log(const Message* msg, std::string* l); \
855 };
856
857 #define IPC_MESSAGE_ROUTED5(msg_class, type1, type2, type3, type4, type5) \
858 class msg_class \
859 : public IPC::MessageWithTuple< Tuple5<type1, type2, type3, type4, \
860 type5> > { \
861 public: \
862 enum { ID = msg_class##__ID }; \
863 msg_class(int32 routing_id, const type1& arg1, const type2& arg2, \
864 const type3& arg3, const type4& arg4, const type5& arg5); \
865 ~msg_class(); \
866 static void Log(const Message* msg, std::string* l); \
867 };
868
869 #define IPC_SYNC_MESSAGE_CONTROL0_0(msg_class) \
870 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple0 > { \
871 public: \
872 enum { ID = msg_class##__ID }; \
873 msg_class(); \
874 ~msg_class(); \
875 static void Log(const Message* msg, std::string* l); \
876 };
877
878 #define IPC_SYNC_MESSAGE_CONTROL0_1(msg_class, type1_out) \
879 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple1<type1_out&> > {\
880 public: \
881 enum { ID = msg_class##__ID }; \
882 msg_class(type1_out* arg1); \
883 ~msg_class(); \
884 static void Log(const Message* msg, std::string* l); \
885 };
886
887 #define IPC_SYNC_MESSAGE_CONTROL0_2(msg_class, type1_out, type2_out) \
888 class msg_class : \
889 public IPC::MessageWithReply<Tuple0, Tuple2<type1_out&, type2_out&> > { \
890 public: \
891 enum { ID = msg_class##__ID }; \
892 msg_class(type1_out* arg1, type2_out* arg2); \
893 ~msg_class(); \
894 static void Log(const Message* msg, std::string* l); \
895 };
896
897 #define IPC_SYNC_MESSAGE_CONTROL0_3(msg_class, type1_out, type2_out, type3_out) \
898 class msg_class : \
899 public IPC::MessageWithReply<Tuple0, \
900 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
901 public: \
902 enum { ID = msg_class##__ID }; \
903 msg_class(type1_out* arg1, type2_out* arg2, type3_out* arg3); \
904 ~msg_class(); \
905 static void Log(const Message* msg, std::string* l); \
906 };
907
908 #define IPC_SYNC_MESSAGE_CONTROL1_0(msg_class, type1_in) \
909 class msg_class : \
910 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple0 > { \
911 public: \
912 enum { ID = msg_class##__ID }; \
913 msg_class(const type1_in& arg1); \
914 ~msg_class(); \
915 static void Log(const Message* msg, std::string* l); \
916 };
917
918 #define IPC_SYNC_MESSAGE_CONTROL1_1(msg_class, type1_in, type1_out) \
919 class msg_class : \
920 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple1<type1_out&> > { \
921 public: \
922 enum { ID = msg_class##__ID }; \
923 msg_class(const type1_in& arg1, type1_out* arg2); \
924 ~msg_class(); \
925 static void Log(const Message* msg, std::string* l); \
926 };
927
928 #define IPC_SYNC_MESSAGE_CONTROL1_2(msg_class, type1_in, type1_out, type2_out) \
929 class msg_class : \
930 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple2<type1_out&, type2_ou t&> > { \
931 public: \
932 enum { ID = msg_class##__ID }; \
933 msg_class(const type1_in& arg1, type1_out* arg2, type2_out* arg3); \
934 ~msg_class(); \
935 static void Log(const Message* msg, std::string* l); \
936 };
937
938 #define IPC_SYNC_MESSAGE_CONTROL1_3(msg_class, type1_in, type1_out, type2_out, t ype3_out) \
939 class msg_class : \
940 public IPC::MessageWithReply<Tuple1<type1_in>, \
941 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
942 public: \
943 enum { ID = msg_class##__ID }; \
944 msg_class(const type1_in& arg1, type1_out* arg2, type2_out* arg3, type3_out* arg4); \
945 ~msg_class(); \
946 static void Log(const Message* msg, std::string* l); \
947 };
948
949 #define IPC_SYNC_MESSAGE_CONTROL2_0(msg_class, type1_in, type2_in) \
950 class msg_class : \
951 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple0 > { \
952 public: \
953 enum { ID = msg_class##__ID }; \
954 msg_class(const type1_in& arg1, const type2_in& arg2); \
955 ~msg_class(); \
956 static void Log(const Message* msg, std::string* l); \
957 };
958
959 #define IPC_SYNC_MESSAGE_CONTROL2_1(msg_class, type1_in, type2_in, type1_out) \
960 class msg_class : \
961 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple1<type1_out& > > { \
962 public: \
963 enum { ID = msg_class##__ID }; \
964 msg_class(const type1_in& arg1, const type2_in& arg2, type1_out* arg3); \
965 ~msg_class(); \
966 static void Log(const Message* msg, std::string* l); \
967 };
968
969 #define IPC_SYNC_MESSAGE_CONTROL2_2(msg_class, type1_in, type2_in, type1_out, ty pe2_out) \
970 class msg_class : \
971 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
972 Tuple2<type1_out&, type2_out&> > { \
973 public: \
974 enum { ID = msg_class##__ID }; \
975 msg_class(const type1_in& arg1, const type2_in& arg2, type1_out* arg3, type2_ out* arg4); \
976 ~msg_class(); \
977 static void Log(const Message* msg, std::string* l); \
978 };
979
980 #define IPC_SYNC_MESSAGE_CONTROL2_3(msg_class, type1_in, type2_in, type1_out, ty pe2_out, type3_out) \
981 class msg_class : \
982 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
983 Tuple3<type1_out&, type2_out&, type3_out&> > { \
984 public: \
985 enum { ID = msg_class##__ID }; \
986 msg_class(const type1_in& arg1, const type2_in& arg2, type1_out* arg3, type2_ out* arg4, type3_out* arg5); \
987 ~msg_class(); \
988 static void Log(const Message* msg, std::string* l); \
989 };
990
991 #define IPC_SYNC_MESSAGE_CONTROL3_1(msg_class, type1_in, type2_in, type3_in, typ e1_out) \
992 class msg_class : \
993 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
994 Tuple1<type1_out&> > { \
995 public: \
996 enum { ID = msg_class##__ID }; \
997 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, t ype1_out* arg4); \
998 ~msg_class(); \
999 static void Log(const Message* msg, std::string* l); \
1000 };
1001
1002 #define IPC_SYNC_MESSAGE_CONTROL3_2(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out) \
1003 class msg_class : \
1004 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1005 Tuple2<type1_out&, type2_out&> > { \
1006 public: \
1007 enum { ID = msg_class##__ID }; \
1008 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, t ype1_out* arg4, type2_out* arg5); \
1009 ~msg_class(); \
1010 static void Log(const Message* msg, std::string* l); \
1011 };
1012
1013 #define IPC_SYNC_MESSAGE_CONTROL3_3(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out) \
1014 class msg_class : \
1015 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1016 Tuple3<type1_out&, type2_out&, type3_out&> > { \
1017 public: \
1018 enum { ID = msg_class##__ID }; \
1019 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, t ype1_out* arg4, type2_out* arg5, type3_out* arg6); \
1020 ~msg_class(); \
1021 static void Log(const Message* msg, std::string* l); \
1022 };
1023
1024 #define IPC_SYNC_MESSAGE_CONTROL3_4(msg_class, type1_in, type2_in, type3_in, typ e1_out, type2_out, type3_out, type4_out) \
1025 class msg_class : \
1026 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1027 Tuple4<type1_out&, type2_out&, type3_out&, type4_out&> > { \
1028 public: \
1029 enum { ID = msg_class##__ID }; \
1030 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, t ype1_out* arg4, type2_out* arg5, type3_out* arg6, type4_out* arg7); \
1031 ~msg_class(); \
1032 static void Log(const Message* msg, std::string* l); \
1033 };
1034
1035 #define IPC_SYNC_MESSAGE_CONTROL4_1(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out) \
1036 class msg_class : \
1037 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
1038 Tuple1<type1_out&> > { \
1039 public: \
1040 enum { ID = msg_class##__ID }; \
1041 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, c onst type4_in& arg4, type1_out* arg6); \
1042 ~msg_class(); \
1043 static void Log(const Message* msg, std::string* l); \
1044 };
1045
1046 #define IPC_SYNC_MESSAGE_CONTROL4_2(msg_class, type1_in, type2_in, type3_in, typ e4_in, type1_out, type2_out) \
1047 class msg_class : \
1048 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
1049 Tuple2<type1_out&, type2_out&> > { \
1050 public: \
1051 enum { ID = msg_class##__ID }; \
1052 msg_class(const type1_in& arg1, const type2_in& arg2, const type3_in& arg3, c onst type4_in& arg4, type1_out* arg5, type2_out* arg6); \
1053 ~msg_class(); \
1054 static void Log(const Message* msg, std::string* l); \
1055 };
1056
1057 #define IPC_SYNC_MESSAGE_ROUTED0_0(msg_class) \
1058 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple0 > { \
1059 public: \
1060 enum { ID = msg_class##__ID }; \
1061 msg_class(int routing_id); \
1062 ~msg_class(); \
1063 static void Log(const Message* msg, std::string* l); \
1064 };
1065
1066 #define IPC_SYNC_MESSAGE_ROUTED0_1(msg_class, type1_out) \
1067 class msg_class : public IPC::MessageWithReply<Tuple0, Tuple1<type1_out&> > { \
1068 public: \
1069 enum { ID = msg_class##__ID }; \
1070 msg_class(int routing_id, type1_out* arg1); \
1071 ~msg_class(); \
1072 static void Log(const Message* msg, std::string* l); \
1073 };
1074
1075 #define IPC_SYNC_MESSAGE_ROUTED0_2(msg_class, type1_out, type2_out) \
1076 class msg_class : \
1077 public IPC::MessageWithReply<Tuple0, Tuple2<type1_out&, type2_out&> > { \
1078 public: \
1079 enum { ID = msg_class##__ID }; \
1080 msg_class(int routing_id, type1_out* arg1, type2_out* arg2); \
1081 ~msg_class(); \
1082 static void Log(const Message* msg, std::string* l); \
1083 };
1084
1085 #define IPC_SYNC_MESSAGE_ROUTED0_3(msg_class, type1_out, type2_out, type3_out) \
1086 class msg_class : \
1087 public IPC::MessageWithReply<Tuple0, \
1088 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
1089 public: \
1090 enum { ID = msg_class##__ID }; \
1091 msg_class(int routing_id, type1_out* arg1, type2_out* arg2, type3_out* arg3); \
1092 ~msg_class(); \
1093 static void Log(const Message* msg, std::string* l); \
1094 };
1095
1096 #define IPC_SYNC_MESSAGE_ROUTED1_0(msg_class, type1_in) \
1097 class msg_class : \
1098 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple0 > { \
1099 public: \
1100 enum { ID = msg_class##__ID }; \
1101 msg_class(int routing_id, const type1_in& arg1); \
1102 ~msg_class(); \
1103 static void Log(const Message* msg, std::string* l); \
1104 };
1105
1106 #define IPC_SYNC_MESSAGE_ROUTED1_1(msg_class, type1_in, type1_out) \
1107 class msg_class : \
1108 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple1<type1_out&> > { \
1109 public: \
1110 enum { ID = msg_class##__ID }; \
1111 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2); \
1112 ~msg_class(); \
1113 static void Log(const Message* msg, std::string* l); \
1114 };
1115
1116 #define IPC_SYNC_MESSAGE_ROUTED1_2(msg_class, type1_in, type1_out, type2_out) \
1117 class msg_class : \
1118 public IPC::MessageWithReply<Tuple1<type1_in>, Tuple2<type1_out&, type2_ou t&> > { \
1119 public: \
1120 enum { ID = msg_class##__ID }; \
1121 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2, type2_out* a rg3); \
1122 ~msg_class(); \
1123 static void Log(const Message* msg, std::string* l); \
1124 };
1125
1126 #define IPC_SYNC_MESSAGE_ROUTED1_3(msg_class, type1_in, type1_out, type2_out, ty pe3_out) \
1127 class msg_class : \
1128 public IPC::MessageWithReply<Tuple1<type1_in>, \
1129 Tuple3<type1_out&, type2_out&, type3_out&> >{ \
1130 public: \
1131 enum { ID = msg_class##__ID }; \
1132 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2, type2_out* a rg3, type3_out* arg4); \
1133 ~msg_class(); \
1134 static void Log(const Message* msg, std::string* l); \
1135 };
1136
1137 #define IPC_SYNC_MESSAGE_ROUTED1_4(msg_class, type1_in, type1_out, type2_out, ty pe3_out, type4_out) \
1138 class msg_class : \
1139 public IPC::MessageWithReply<Tuple1<type1_in>, \
1140 Tuple4<type1_out&, type2_out&, type3_out&, type4_out&> >{ \
1141 public: \
1142 enum { ID = msg_class##__ID }; \
1143 msg_class(int routing_id, const type1_in& arg1, type1_out* arg2, type2_out* a rg3, type3_out* arg4, type4_out* arg5); \
1144 ~msg_class(); \
1145 static void Log(const Message* msg, std::string* l); \
1146 };
1147
1148 #define IPC_SYNC_MESSAGE_ROUTED2_0(msg_class, type1_in, type2_in) \
1149 class msg_class : \
1150 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple0 > { \
1151 public: \
1152 enum { ID = msg_class##__ID }; \
1153 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2); \
1154 ~msg_class(); \
1155 static void Log(const Message* msg, std::string* l); \
1156 };
1157
1158 #define IPC_SYNC_MESSAGE_ROUTED2_1(msg_class, type1_in, type2_in, type1_out) \
1159 class msg_class : \
1160 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, Tuple1<type1_out& > > { \
1161 public: \
1162 enum { ID = msg_class##__ID }; \
1163 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, type1_o ut* arg3); \
1164 ~msg_class(); \
1165 static void Log(const Message* msg, std::string* l); \
1166 };
1167
1168 #define IPC_SYNC_MESSAGE_ROUTED2_2(msg_class, type1_in, type2_in, type1_out, typ e2_out) \
1169 class msg_class : \
1170 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
1171 Tuple2<type1_out&, type2_out&> > { \
1172 public: \
1173 enum { ID = msg_class##__ID }; \
1174 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, type1_o ut* arg3, type2_out* arg4); \
1175 ~msg_class(); \
1176 static void Log(const Message* msg, std::string* l); \
1177 };
1178
1179 #define IPC_SYNC_MESSAGE_ROUTED2_3(msg_class, type1_in, type2_in, type1_out, typ e2_out, type3_out) \
1180 class msg_class : \
1181 public IPC::MessageWithReply<Tuple2<type1_in, type2_in>, \
1182 Tuple3<type1_out&, type2_out&, type3_out&> > { \
1183 public: \
1184 enum { ID = msg_class##__ID }; \
1185 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, type1_o ut* arg3, type2_out* arg4, type3_out* arg5); \
1186 ~msg_class(); \
1187 static void Log(const Message* msg, std::string* l); \
1188 };
1189
1190 #define IPC_SYNC_MESSAGE_ROUTED3_0(msg_class, type1_in, type2_in, type3_in) \
1191 class msg_class : \
1192 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, Tuple0 > { \
1193 public: \
1194 enum { ID = msg_class##__ID }; \
1195 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3); \
1196 ~msg_class(); \
1197 static void Log(const Message* msg, std::string* l); \
1198 };
1199
1200 #define IPC_SYNC_MESSAGE_ROUTED3_1(msg_class, type1_in, type2_in, type3_in, type 1_out) \
1201 class msg_class : \
1202 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1203 Tuple1<type1_out&> > { \
1204 public: \
1205 enum { ID = msg_class##__ID }; \
1206 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, type1_out* arg4); \
1207 ~msg_class(); \
1208 static void Log(const Message* msg, std::string* l); \
1209 };
1210
1211 #define IPC_SYNC_MESSAGE_ROUTED3_2(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out) \
1212 class msg_class : \
1213 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1214 Tuple2<type1_out&, type2_out&> > { \
1215 public: \
1216 enum { ID = msg_class##__ID }; \
1217 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, type1_out* arg4, type2_out* arg5); \
1218 ~msg_class(); \
1219 static void Log(const Message* msg, std::string* l); \
1220 };
1221
1222 #define IPC_SYNC_MESSAGE_ROUTED3_3(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out) \
1223 class msg_class : \
1224 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1225 Tuple3<type1_out&, type2_out&, type3_out&> > { \
1226 public: \
1227 enum { ID = msg_class##__ID }; \
1228 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, type1_out* arg4, type2_out* arg5, type3_out* arg6); \
1229 ~msg_class(); \
1230 static void Log(const Message* msg, std::string* l); \
1231 };
1232
1233 #define IPC_SYNC_MESSAGE_ROUTED3_4(msg_class, type1_in, type2_in, type3_in, type 1_out, type2_out, type3_out, type4_out) \
1234 class msg_class : \
1235 public IPC::MessageWithReply<Tuple3<type1_in, type2_in, type3_in>, \
1236 Tuple4<type1_out&, type2_out&, type3_out&, type4_out&> > { \
1237 public: \
1238 enum { ID = msg_class##__ID }; \
1239 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, type1_out* arg4, type2_out* arg5, type3_out* arg6, type4_out* arg 7); \
1240 ~msg_class(); \
1241 static void Log(const Message* msg, std::string* l); \
1242 };
1243
1244 #define IPC_SYNC_MESSAGE_ROUTED4_0(msg_class, type1_in, type2_in, type3_in, type 4_in) \
1245 class msg_class : \
1246 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
1247 Tuple0 > { \
1248 public: \
1249 enum { ID = msg_class##__ID }; \
1250 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4); \
1251 ~msg_class(); \
1252 static void Log(const Message* msg, std::string* l); \
1253 };
1254
1255 #define IPC_SYNC_MESSAGE_ROUTED4_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out) \
1256 class msg_class : \
1257 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
1258 Tuple1<type1_out&> > { \
1259 public: \
1260 enum { ID = msg_class##__ID }; \
1261 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, type1_out* arg6); \
1262 ~msg_class(); \
1263 static void Log(const Message* msg, std::string* l); \
1264 };
1265
1266 #define IPC_SYNC_MESSAGE_ROUTED4_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out) \
1267 class msg_class : \
1268 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
1269 Tuple2<type1_out&, type2_out&> > { \
1270 public: \
1271 enum { ID = msg_class##__ID }; \
1272 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, type1_out* arg5, type2_out* arg6); \
1273 ~msg_class(); \
1274 static void Log(const Message* msg, std::string* l); \
1275 };
1276
1277 #define IPC_SYNC_MESSAGE_ROUTED4_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type1_out, type2_out, type3_out) \
1278 class msg_class : \
1279 public IPC::MessageWithReply<Tuple4<type1_in, type2_in, type3_in, type4_in >, \
1280 Tuple3<type1_out&, type2_out&, type3_out&> > { \
1281 public: \
1282 enum { ID = msg_class##__ID }; \
1283 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, type1_out* arg5, type2_out* arg6, type3_out * arg7); \
1284 ~msg_class(); \
1285 static void Log(const Message* msg, std::string* l); \
1286 };
1287
1288 #define IPC_SYNC_MESSAGE_ROUTED5_0(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in) \
1289 class msg_class : \
1290 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
1291 Tuple0 > { \
1292 public: \
1293 enum { ID = msg_class##__ID }; \
1294 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, const type5_in& arg5); \
1295 ~msg_class(); \
1296 static void Log(const Message* msg, std::string* l); \
1297 };
1298
1299 #define IPC_SYNC_MESSAGE_ROUTED5_1(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out) \
1300 class msg_class : \
1301 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
1302 Tuple1<type1_out&> > { \
1303 public: \
1304 enum { ID = msg_class##__ID }; \
1305 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, const type5_in& arg5, type1_out* arg6); \
1306 ~msg_class(); \
1307 static void Log(const Message* msg, std::string* l); \
1308 };
1309
1310 #define IPC_SYNC_MESSAGE_ROUTED5_2(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out) \
1311 class msg_class : \
1312 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
1313 Tuple2<type1_out&, type2_out&> > { \
1314 public: \
1315 enum { ID = msg_class##__ID }; \
1316 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, const type4_in& arg5, type1_out* arg6, type 2_out* arg7); \
1317 ~msg_class(); \
1318 static void Log(const Message* msg, std::string* l); \
1319 };
1320
1321 #define IPC_SYNC_MESSAGE_ROUTED5_3(msg_class, type1_in, type2_in, type3_in, type 4_in, type5_in, type1_out, type2_out, type3_out) \
1322 class msg_class : \
1323 public IPC::MessageWithReply<Tuple5<type1_in, type2_in, type3_in, type4_in , type5_in>, \
1324 Tuple3<type1_out&, type2_out&, type3_out&> > { \
1325 public: \
1326 enum { ID = msg_class##__ID }; \
1327 msg_class(int routing_id, const type1_in& arg1, const type2_in& arg2, const t ype3_in& arg3, const type4_in& arg4, const type4_in& arg5, type1_out* arg6, type 2_out* arg7, type3_out* arg8); \
1328 ~msg_class(); \
1329 static void Log(const Message* msg, std::string* l); \
1330 };
1331
1332 #endif // #if defined()
OLDNEW
« no previous file with comments | « ipc/ipc_message_impl_macros.h ('k') | ipc/ipc_message_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698