1 | // Protocol Buffers - Google's data interchange format |
2 | // Copyright 2008 Google Inc. All rights reserved. |
3 | // http://code.google.com/p/protobuf/ |
4 | // |
5 | // Redistribution and use in source and binary forms, with or without |
6 | // modification, are permitted provided that the following conditions are |
7 | // met: |
8 | // |
9 | // * Redistributions of source code must retain the above copyright |
10 | // notice, this list of conditions and the following disclaimer. |
11 | // * Redistributions in binary form must reproduce the above |
12 | // copyright notice, this list of conditions and the following disclaimer |
13 | // in the documentation and/or other materials provided with the |
14 | // distribution. |
15 | // * Neither the name of Google Inc. nor the names of its |
16 | // contributors may be used to endorse or promote products derived from |
17 | // this software without specific prior written permission. |
18 | // |
19 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
20 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
21 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
22 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
23 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
24 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
25 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
29 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 | |
31 | // Author: [email protected] (Kenton Varda) and others |
32 | // |
33 | // Contains basic types and utilities used by the rest of the library. |
34 | |
35 | // The code in this file is modified from google/protobuf/stubs/common.h |
36 | // in protobuf-2.4, mainly for creating closures. We need to separate |
37 | // the code because protobuf 3.0 moves NewCallback into internal namespace. |
38 | // Another reason is that we add more overloads to the function which is |
39 | // probably widely used throughout baidu. When user's callback creation |
40 | // code breaks in protobuf 3.0, they can simply replace |
41 | // google::protobuf::NewCallback with brpc::NewCallback. |
42 | |
43 | #ifndef BRPC_CALLBACK_H |
44 | #define BRPC_CALLBACK_H |
45 | |
46 | #include <google/protobuf/stubs/common.h> // Closure |
47 | #if GOOGLE_PROTOBUF_VERSION >= 3007000 |
48 | // After protobuf 3.7.0, callback.h is removed from common.h, we need to explicitly |
49 | // include this file. |
50 | #include <google/protobuf/stubs/callback.h> |
51 | #endif |
52 | |
53 | namespace brpc { |
54 | |
55 | // Abstract interface for a callback. When calling an RPC, you must provide |
56 | // a Closure to call when the procedure completes. See the Service interface |
57 | // in service.h. |
58 | // |
59 | // To automatically construct a Closure which calls a particular function or |
60 | // method with a particular set of parameters, use the NewCallback() function. |
61 | // Example: |
62 | // void FooDone(const FooResponse* response) { |
63 | // ... |
64 | // } |
65 | // |
66 | // void CallFoo() { |
67 | // ... |
68 | // // When done, call FooDone() and pass it a pointer to the response. |
69 | // Closure* callback = NewCallback(&FooDone, response); |
70 | // // Make the call. |
71 | // service->Foo(controller, request, response, callback); |
72 | // } |
73 | // |
74 | // Example that calls a method: |
75 | // class Handler { |
76 | // public: |
77 | // ... |
78 | // |
79 | // void FooDone(const FooResponse* response) { |
80 | // ... |
81 | // } |
82 | // |
83 | // void CallFoo() { |
84 | // ... |
85 | // // When done, call FooDone() and pass it a pointer to the response. |
86 | // Closure* callback = NewCallback(this, &Handler::FooDone, response); |
87 | // // Make the call. |
88 | // service->Foo(controller, request, response, callback); |
89 | // } |
90 | // }; |
91 | // |
92 | // Currently NewCallback() supports binding zero, one, or two arguments. |
93 | // |
94 | // Callbacks created with NewCallback() automatically delete themselves when |
95 | // executed. They should be used when a callback is to be called exactly |
96 | // once (usually the case with RPC callbacks). If a callback may be called |
97 | // a different number of times (including zero), create it with |
98 | // NewPermanentCallback() instead. You are then responsible for deleting the |
99 | // callback (using the "delete" keyword as normal). |
100 | // |
101 | // Note that NewCallback() is a bit touchy regarding argument types. Generally, |
102 | // the values you provide for the parameter bindings must exactly match the |
103 | // types accepted by the callback function. For example: |
104 | // void Foo(string s); |
105 | // NewCallback(&Foo, "foo"); // WON'T WORK: const char* != string |
106 | // NewCallback(&Foo, string("foo")); // WORKS |
107 | // Also note that the arguments cannot be references: |
108 | // void Foo(const string& s); |
109 | // string my_str; |
110 | // NewCallback(&Foo, my_str); // WON'T WORK: Can't use referecnes. |
111 | // However, correctly-typed pointers will work just fine. |
112 | |
113 | namespace internal { |
114 | |
115 | template <typename T> |
116 | inline T* get_pointer(T* p) { |
117 | return p; |
118 | } |
119 | |
120 | class FunctionClosure0 : public ::google::protobuf::Closure { |
121 | public: |
122 | typedef void (*FunctionType)(); |
123 | |
124 | FunctionClosure0(FunctionType function, bool self_deleting) |
125 | : function_(function), self_deleting_(self_deleting) {} |
126 | ~FunctionClosure0() {} |
127 | |
128 | void Run() override { |
129 | bool needs_delete = self_deleting_; // read in case callback deletes |
130 | function_(); |
131 | if (needs_delete) delete this; |
132 | } |
133 | |
134 | private: |
135 | FunctionType function_; |
136 | bool self_deleting_; |
137 | }; |
138 | |
139 | template <typename Class, typename Pointer> |
140 | class MethodClosure0 : public ::google::protobuf::Closure { |
141 | public: |
142 | typedef void (Class::*MethodType)(); |
143 | |
144 | MethodClosure0(const Pointer& object, MethodType method, bool self_deleting) |
145 | : object_(object), method_(method), self_deleting_(self_deleting) {} |
146 | ~MethodClosure0() {} |
147 | |
148 | void Run() { |
149 | bool needs_delete = self_deleting_; // read in case callback deletes |
150 | (get_pointer(object_)->*method_)(); |
151 | if (needs_delete) delete this; |
152 | } |
153 | |
154 | private: |
155 | Pointer object_; |
156 | MethodType method_; |
157 | bool self_deleting_; |
158 | }; |
159 | |
160 | template <typename Arg1> |
161 | class FunctionClosure1 : public ::google::protobuf::Closure { |
162 | public: |
163 | typedef void (*FunctionType)(Arg1 arg1); |
164 | |
165 | FunctionClosure1(FunctionType function, bool self_deleting, |
166 | Arg1 arg1) |
167 | : function_(function), self_deleting_(self_deleting), |
168 | arg1_(arg1) {} |
169 | ~FunctionClosure1() {} |
170 | |
171 | void Run() { |
172 | bool needs_delete = self_deleting_; // read in case callback deletes |
173 | function_(arg1_); |
174 | if (needs_delete) delete this; |
175 | } |
176 | |
177 | private: |
178 | FunctionType function_; |
179 | bool self_deleting_; |
180 | Arg1 arg1_; |
181 | }; |
182 | |
183 | template <typename Class, typename Pointer, typename Arg1> |
184 | class MethodClosure1 : public ::google::protobuf::Closure { |
185 | public: |
186 | typedef void (Class::*MethodType)(Arg1 arg1); |
187 | |
188 | MethodClosure1(const Pointer& object, MethodType method, bool self_deleting, |
189 | Arg1 arg1) |
190 | : object_(object), method_(method), self_deleting_(self_deleting), |
191 | arg1_(arg1) {} |
192 | ~MethodClosure1() {} |
193 | |
194 | void Run() { |
195 | bool needs_delete = self_deleting_; // read in case callback deletes |
196 | (get_pointer(object_)->*method_)(arg1_); |
197 | if (needs_delete) delete this; |
198 | } |
199 | |
200 | private: |
201 | Pointer object_; |
202 | MethodType method_; |
203 | bool self_deleting_; |
204 | Arg1 arg1_; |
205 | }; |
206 | |
207 | template <typename Arg1, typename Arg2> |
208 | class FunctionClosure2 : public ::google::protobuf::Closure { |
209 | public: |
210 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2); |
211 | |
212 | FunctionClosure2(FunctionType function, bool self_deleting, |
213 | Arg1 arg1, Arg2 arg2) |
214 | : function_(function), self_deleting_(self_deleting), |
215 | arg1_(arg1), arg2_(arg2) {} |
216 | ~FunctionClosure2() {} |
217 | |
218 | void Run() { |
219 | bool needs_delete = self_deleting_; // read in case callback deletes |
220 | function_(arg1_, arg2_); |
221 | if (needs_delete) delete this; |
222 | } |
223 | |
224 | private: |
225 | FunctionType function_; |
226 | bool self_deleting_; |
227 | Arg1 arg1_; |
228 | Arg2 arg2_; |
229 | }; |
230 | |
231 | template <typename Class, typename Pointer, typename Arg1, typename Arg2> |
232 | class MethodClosure2 : public ::google::protobuf::Closure { |
233 | public: |
234 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2); |
235 | |
236 | MethodClosure2(const Pointer& object, MethodType method, bool self_deleting, |
237 | Arg1 arg1, Arg2 arg2) |
238 | : object_(object), method_(method), self_deleting_(self_deleting), |
239 | arg1_(arg1), arg2_(arg2) {} |
240 | ~MethodClosure2() {} |
241 | |
242 | void Run() { |
243 | bool needs_delete = self_deleting_; // read in case callback deletes |
244 | (get_pointer(object_)->*method_)(arg1_, arg2_); |
245 | if (needs_delete) delete this; |
246 | } |
247 | |
248 | private: |
249 | Pointer object_; |
250 | MethodType method_; |
251 | bool self_deleting_; |
252 | Arg1 arg1_; |
253 | Arg2 arg2_; |
254 | }; |
255 | |
256 | template <typename Arg1, typename Arg2, typename Arg3> |
257 | class FunctionClosure3 : public ::google::protobuf::Closure { |
258 | public: |
259 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3); |
260 | |
261 | FunctionClosure3(FunctionType function, bool self_deleting, |
262 | Arg1 arg1, Arg2 arg2, Arg3 arg3) |
263 | : function_(function), self_deleting_(self_deleting), |
264 | arg1_(arg1), arg2_(arg2), arg3_(arg3) {} |
265 | ~FunctionClosure3() {} |
266 | |
267 | void Run() { |
268 | bool needs_delete = self_deleting_; // read in case callback deletes |
269 | function_(arg1_, arg2_, arg3_); |
270 | if (needs_delete) delete this; |
271 | } |
272 | |
273 | private: |
274 | FunctionType function_; |
275 | bool self_deleting_; |
276 | Arg1 arg1_; |
277 | Arg2 arg2_; |
278 | Arg3 arg3_; |
279 | }; |
280 | |
281 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3> |
282 | class MethodClosure3 : public ::google::protobuf::Closure { |
283 | public: |
284 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3); |
285 | |
286 | MethodClosure3(const Pointer& object, MethodType method, bool self_deleting, |
287 | Arg1 arg1, Arg2 arg2, Arg3 arg3) |
288 | : object_(object), method_(method), self_deleting_(self_deleting), |
289 | arg1_(arg1), arg2_(arg2),arg3_(arg3) {} |
290 | ~MethodClosure3() {} |
291 | |
292 | void Run() { |
293 | bool needs_delete = self_deleting_; // read in case callback deletes |
294 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_); |
295 | if (needs_delete) delete this; |
296 | } |
297 | |
298 | private: |
299 | Pointer object_; |
300 | MethodType method_; |
301 | bool self_deleting_; |
302 | Arg1 arg1_; |
303 | Arg2 arg2_; |
304 | Arg3 arg3_; |
305 | }; |
306 | |
307 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
308 | class FunctionClosure4 : public ::google::protobuf::Closure { |
309 | public: |
310 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4); |
311 | |
312 | FunctionClosure4(FunctionType function, bool self_deleting, |
313 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) |
314 | : function_(function), self_deleting_(self_deleting), |
315 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4) {} |
316 | ~FunctionClosure4() {} |
317 | |
318 | void Run() { |
319 | bool needs_delete = self_deleting_; // read in case callback deletes |
320 | function_(arg1_, arg2_, arg3_, arg4_); |
321 | if (needs_delete) delete this; |
322 | } |
323 | |
324 | private: |
325 | FunctionType function_; |
326 | bool self_deleting_; |
327 | Arg1 arg1_; |
328 | Arg2 arg2_; |
329 | Arg3 arg3_; |
330 | Arg4 arg4_; |
331 | }; |
332 | |
333 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
334 | class MethodClosure4 : public ::google::protobuf::Closure { |
335 | public: |
336 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4); |
337 | |
338 | MethodClosure4(const Pointer& object, MethodType method, bool self_deleting, |
339 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) |
340 | : object_(object), method_(method), self_deleting_(self_deleting), |
341 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4) {} |
342 | ~MethodClosure4() {} |
343 | |
344 | void Run() { |
345 | bool needs_delete = self_deleting_; // read in case callback deletes |
346 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_); |
347 | if (needs_delete) delete this; |
348 | } |
349 | |
350 | private: |
351 | Pointer object_; |
352 | MethodType method_; |
353 | bool self_deleting_; |
354 | Arg1 arg1_; |
355 | Arg2 arg2_; |
356 | Arg3 arg3_; |
357 | Arg4 arg4_; |
358 | }; |
359 | |
360 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> |
361 | class FunctionClosure5 : public ::google::protobuf::Closure { |
362 | public: |
363 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5); |
364 | |
365 | FunctionClosure5(FunctionType function, bool self_deleting, |
366 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) |
367 | : function_(function), self_deleting_(self_deleting), |
368 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5) {} |
369 | ~FunctionClosure5() {} |
370 | |
371 | void Run() { |
372 | bool needs_delete = self_deleting_; // read in case callback deletes |
373 | function_(arg1_, arg2_, arg3_, arg4_, arg5_); |
374 | if (needs_delete) delete this; |
375 | } |
376 | |
377 | private: |
378 | FunctionType function_; |
379 | bool self_deleting_; |
380 | Arg1 arg1_; |
381 | Arg2 arg2_; |
382 | Arg3 arg3_; |
383 | Arg4 arg4_; |
384 | Arg5 arg5_; |
385 | }; |
386 | |
387 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> |
388 | class MethodClosure5 : public ::google::protobuf::Closure { |
389 | public: |
390 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5); |
391 | |
392 | MethodClosure5(const Pointer& object, MethodType method, bool self_deleting, |
393 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) |
394 | : object_(object), method_(method), self_deleting_(self_deleting), |
395 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4),arg5_(arg5) {} |
396 | ~MethodClosure5() {} |
397 | |
398 | void Run() { |
399 | bool needs_delete = self_deleting_; // read in case callback deletes |
400 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_,arg5_); |
401 | if (needs_delete) delete this; |
402 | } |
403 | |
404 | private: |
405 | Pointer object_; |
406 | MethodType method_; |
407 | bool self_deleting_; |
408 | Arg1 arg1_; |
409 | Arg2 arg2_; |
410 | Arg3 arg3_; |
411 | Arg4 arg4_; |
412 | Arg5 arg5_; |
413 | }; |
414 | |
415 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> |
416 | class FunctionClosure6 : public ::google::protobuf::Closure { |
417 | public: |
418 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6); |
419 | |
420 | FunctionClosure6(FunctionType function, bool self_deleting, |
421 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) |
422 | : function_(function), self_deleting_(self_deleting), |
423 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5), arg6_(arg6) {} |
424 | ~FunctionClosure6() {} |
425 | |
426 | void Run() { |
427 | bool needs_delete = self_deleting_; // read in case callback deletes |
428 | function_(arg1_, arg2_, arg3_, arg4_, arg5_, arg6_); |
429 | if (needs_delete) delete this; |
430 | } |
431 | |
432 | private: |
433 | FunctionType function_; |
434 | bool self_deleting_; |
435 | Arg1 arg1_; |
436 | Arg2 arg2_; |
437 | Arg3 arg3_; |
438 | Arg4 arg4_; |
439 | Arg5 arg5_; |
440 | Arg6 arg6_; |
441 | }; |
442 | |
443 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> |
444 | class MethodClosure6 : public ::google::protobuf::Closure { |
445 | public: |
446 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6); |
447 | |
448 | MethodClosure6(const Pointer& object, MethodType method, bool self_deleting, |
449 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) |
450 | : object_(object), method_(method), self_deleting_(self_deleting), |
451 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4),arg5_(arg5),arg6_(arg6) {} |
452 | ~MethodClosure6() {} |
453 | |
454 | void Run() { |
455 | bool needs_delete = self_deleting_; // read in case callback deletes |
456 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_,arg5_,arg6_); |
457 | if (needs_delete) delete this; |
458 | } |
459 | |
460 | private: |
461 | Pointer object_; |
462 | MethodType method_; |
463 | bool self_deleting_; |
464 | Arg1 arg1_; |
465 | Arg2 arg2_; |
466 | Arg3 arg3_; |
467 | Arg4 arg4_; |
468 | Arg5 arg5_; |
469 | Arg6 arg6_; |
470 | }; |
471 | |
472 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> |
473 | class FunctionClosure7 : public ::google::protobuf::Closure { |
474 | public: |
475 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7); |
476 | |
477 | FunctionClosure7(FunctionType function, bool self_deleting, |
478 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) |
479 | : function_(function), self_deleting_(self_deleting), |
480 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5), arg6_(arg6), arg7_(arg7) {} |
481 | ~FunctionClosure7() {} |
482 | |
483 | void Run() { |
484 | bool needs_delete = self_deleting_; // read in case callback deletes |
485 | function_(arg1_, arg2_, arg3_, arg4_, arg5_, arg6_, arg7_); |
486 | if (needs_delete) delete this; |
487 | } |
488 | |
489 | private: |
490 | FunctionType function_; |
491 | bool self_deleting_; |
492 | Arg1 arg1_; |
493 | Arg2 arg2_; |
494 | Arg3 arg3_; |
495 | Arg4 arg4_; |
496 | Arg5 arg5_; |
497 | Arg6 arg6_; |
498 | Arg7 arg7_; |
499 | }; |
500 | |
501 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> |
502 | class MethodClosure7 : public ::google::protobuf::Closure { |
503 | public: |
504 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7); |
505 | |
506 | MethodClosure7(const Pointer& object, MethodType method, bool self_deleting, |
507 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) |
508 | : object_(object), method_(method), self_deleting_(self_deleting), |
509 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4),arg5_(arg5),arg6_(arg6),arg7_(arg7) {} |
510 | ~MethodClosure7() {} |
511 | |
512 | void Run() { |
513 | bool needs_delete = self_deleting_; // read in case callback deletes |
514 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_,arg5_,arg6_,arg7_); |
515 | if (needs_delete) delete this; |
516 | } |
517 | |
518 | private: |
519 | Pointer object_; |
520 | MethodType method_; |
521 | bool self_deleting_; |
522 | Arg1 arg1_; |
523 | Arg2 arg2_; |
524 | Arg3 arg3_; |
525 | Arg4 arg4_; |
526 | Arg5 arg5_; |
527 | Arg6 arg6_; |
528 | Arg7 arg7_; |
529 | }; |
530 | |
531 | |
532 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> |
533 | class FunctionClosure8 : public ::google::protobuf::Closure { |
534 | public: |
535 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8); |
536 | |
537 | FunctionClosure8(FunctionType function, bool self_deleting, |
538 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) |
539 | : function_(function), self_deleting_(self_deleting), |
540 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5), arg6_(arg6), arg7_(arg7), arg8_(arg8) {} |
541 | ~FunctionClosure8() {} |
542 | |
543 | void Run() { |
544 | bool needs_delete = self_deleting_; // read in case callback deletes |
545 | function_(arg1_, arg2_, arg3_, arg4_, arg5_, arg6_, arg7_,arg8_); |
546 | if (needs_delete) delete this; |
547 | } |
548 | |
549 | private: |
550 | FunctionType function_; |
551 | bool self_deleting_; |
552 | Arg1 arg1_; |
553 | Arg2 arg2_; |
554 | Arg3 arg3_; |
555 | Arg4 arg4_; |
556 | Arg5 arg5_; |
557 | Arg6 arg6_; |
558 | Arg7 arg7_; |
559 | Arg8 arg8_; |
560 | }; |
561 | |
562 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> |
563 | class MethodClosure8 : public ::google::protobuf::Closure { |
564 | public: |
565 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8); |
566 | |
567 | MethodClosure8(const Pointer& object, MethodType method, bool self_deleting, |
568 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) |
569 | : object_(object), method_(method), self_deleting_(self_deleting), |
570 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4),arg5_(arg5),arg6_(arg6),arg7_(arg7),arg8_(arg8) {} |
571 | ~MethodClosure8() {} |
572 | |
573 | void Run() { |
574 | bool needs_delete = self_deleting_; // read in case callback deletes |
575 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_,arg5_,arg6_,arg7_,arg8_); |
576 | if (needs_delete) delete this; |
577 | } |
578 | |
579 | private: |
580 | Pointer object_; |
581 | MethodType method_; |
582 | bool self_deleting_; |
583 | Arg1 arg1_; |
584 | Arg2 arg2_; |
585 | Arg3 arg3_; |
586 | Arg4 arg4_; |
587 | Arg5 arg5_; |
588 | Arg6 arg6_; |
589 | Arg7 arg7_; |
590 | Arg8 arg8_; |
591 | }; |
592 | |
593 | |
594 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> |
595 | class FunctionClosure9 : public ::google::protobuf::Closure { |
596 | public: |
597 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9); |
598 | |
599 | FunctionClosure9(FunctionType function, bool self_deleting, |
600 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9) |
601 | : function_(function), self_deleting_(self_deleting), |
602 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5), arg6_(arg6), arg7_(arg7), arg8_(arg8), arg9_(arg9) {} |
603 | ~FunctionClosure9() {} |
604 | |
605 | void Run() { |
606 | bool needs_delete = self_deleting_; // read in case callback deletes |
607 | function_(arg1_, arg2_, arg3_, arg4_, arg5_, arg6_, arg7_,arg8_,arg9_); |
608 | if (needs_delete) delete this; |
609 | } |
610 | |
611 | private: |
612 | FunctionType function_; |
613 | bool self_deleting_; |
614 | Arg1 arg1_; |
615 | Arg2 arg2_; |
616 | Arg3 arg3_; |
617 | Arg4 arg4_; |
618 | Arg5 arg5_; |
619 | Arg6 arg6_; |
620 | Arg7 arg7_; |
621 | Arg8 arg8_; |
622 | Arg9 arg9_; |
623 | }; |
624 | |
625 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> |
626 | class MethodClosure9 : public ::google::protobuf::Closure { |
627 | public: |
628 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9); |
629 | |
630 | MethodClosure9(const Pointer& object, MethodType method, bool self_deleting, |
631 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9) |
632 | : object_(object), method_(method), self_deleting_(self_deleting), |
633 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4),arg5_(arg5),arg6_(arg6),arg7_(arg7),arg8_(arg8),arg9_(arg9) {} |
634 | ~MethodClosure9() {} |
635 | |
636 | void Run() { |
637 | bool needs_delete = self_deleting_; // read in case callback deletes |
638 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_,arg5_,arg6_,arg7_,arg8_,arg9_); |
639 | if (needs_delete) delete this; |
640 | } |
641 | |
642 | private: |
643 | Pointer object_; |
644 | MethodType method_; |
645 | bool self_deleting_; |
646 | Arg1 arg1_; |
647 | Arg2 arg2_; |
648 | Arg3 arg3_; |
649 | Arg4 arg4_; |
650 | Arg5 arg5_; |
651 | Arg6 arg6_; |
652 | Arg7 arg7_; |
653 | Arg8 arg8_; |
654 | Arg9 arg9_; |
655 | }; |
656 | |
657 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9, typename Arg10> |
658 | class FunctionClosure10 : public ::google::protobuf::Closure { |
659 | public: |
660 | typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10); |
661 | |
662 | FunctionClosure10(FunctionType function, bool self_deleting, |
663 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10) |
664 | : function_(function), self_deleting_(self_deleting), |
665 | arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5), arg6_(arg6), arg7_(arg7), arg8_(arg8), arg9_(arg9), arg10_(arg10) {} |
666 | ~FunctionClosure10() {} |
667 | |
668 | void Run() { |
669 | bool needs_delete = self_deleting_; // read in case callback deletes |
670 | function_(arg1_, arg2_, arg3_, arg4_, arg5_, arg6_, arg7_,arg8_,arg9_,arg10_); |
671 | if (needs_delete) delete this; |
672 | } |
673 | |
674 | private: |
675 | FunctionType function_; |
676 | bool self_deleting_; |
677 | Arg1 arg1_; |
678 | Arg2 arg2_; |
679 | Arg3 arg3_; |
680 | Arg4 arg4_; |
681 | Arg5 arg5_; |
682 | Arg6 arg6_; |
683 | Arg7 arg7_; |
684 | Arg8 arg8_; |
685 | Arg9 arg9_; |
686 | Arg10 arg10_; |
687 | }; |
688 | |
689 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9, typename Arg10> |
690 | class MethodClosure10 : public ::google::protobuf::Closure { |
691 | public: |
692 | typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10); |
693 | |
694 | MethodClosure10(const Pointer& object, MethodType method, bool self_deleting, |
695 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10) |
696 | : object_(object), method_(method), self_deleting_(self_deleting), |
697 | arg1_(arg1), arg2_(arg2),arg3_(arg3),arg4_(arg4),arg5_(arg5),arg6_(arg6),arg7_(arg7),arg8_(arg8),arg9_(arg9),arg10_(arg10) {} |
698 | ~MethodClosure10() {} |
699 | |
700 | void Run() { |
701 | bool needs_delete = self_deleting_; // read in case callback deletes |
702 | (get_pointer(object_)->*method_)(arg1_, arg2_,arg3_,arg4_,arg5_,arg6_,arg7_,arg8_,arg9_,arg10_); |
703 | if (needs_delete) delete this; |
704 | } |
705 | |
706 | private: |
707 | Pointer object_; |
708 | MethodType method_; |
709 | bool self_deleting_; |
710 | Arg1 arg1_; |
711 | Arg2 arg2_; |
712 | Arg3 arg3_; |
713 | Arg4 arg4_; |
714 | Arg5 arg5_; |
715 | Arg6 arg6_; |
716 | Arg7 arg7_; |
717 | Arg8 arg8_; |
718 | Arg9 arg9_; |
719 | Arg10 arg10_; |
720 | }; |
721 | |
722 | } // namespace internal |
723 | |
724 | // See Closure. |
725 | inline ::google::protobuf::Closure* NewCallback(void (*function)()) { |
726 | return new internal::FunctionClosure0(function, true); |
727 | } |
728 | |
729 | // See Closure. |
730 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)()) { |
731 | return new internal::FunctionClosure0(function, false); |
732 | } |
733 | |
734 | // See Closure. |
735 | template <typename Class, typename Pointer> |
736 | inline ::google::protobuf::Closure* NewCallback(const Pointer& object, void (Class::*method)()) { |
737 | return new internal::MethodClosure0<Class, Pointer>(object, method, true); |
738 | } |
739 | |
740 | // See Closure. |
741 | template <typename Class, typename Pointer> |
742 | inline ::google::protobuf::Closure* NewPermanentCallback(const Pointer& object, void (Class::*method)()) { |
743 | return new internal::MethodClosure0<Class, Pointer>(object, method, false); |
744 | } |
745 | |
746 | // See Closure. |
747 | template <typename Arg1> |
748 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1), |
749 | Arg1 arg1) { |
750 | return new internal::FunctionClosure1<Arg1>(function, true, arg1); |
751 | } |
752 | |
753 | // See Closure. |
754 | template <typename Arg1> |
755 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1), |
756 | Arg1 arg1) { |
757 | return new internal::FunctionClosure1<Arg1>(function, false, arg1); |
758 | } |
759 | |
760 | // See Closure. |
761 | template <typename Class, typename Pointer, typename Arg1> |
762 | inline ::google::protobuf::Closure* NewCallback(const Pointer& object, void (Class::*method)(Arg1), |
763 | Arg1 arg1) { |
764 | return new internal::MethodClosure1<Class, Pointer, Arg1>(object, method, true, arg1); |
765 | } |
766 | |
767 | // See Closure. |
768 | template <typename Class, typename Pointer, typename Arg1> |
769 | inline ::google::protobuf::Closure* NewPermanentCallback(const Pointer& object, void (Class::*method)(Arg1), |
770 | Arg1 arg1) { |
771 | return new internal::MethodClosure1<Class, Pointer, Arg1>(object, method, false, arg1); |
772 | } |
773 | |
774 | // See Closure. |
775 | template <typename Arg1, typename Arg2> |
776 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2), |
777 | Arg1 arg1, Arg2 arg2) { |
778 | return new internal::FunctionClosure2<Arg1, Arg2>( |
779 | function, true, arg1, arg2); |
780 | } |
781 | |
782 | // See Closure. |
783 | template <typename Arg1, typename Arg2> |
784 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2), |
785 | Arg1 arg1, Arg2 arg2) { |
786 | return new internal::FunctionClosure2<Arg1, Arg2>( |
787 | function, false, arg1, arg2); |
788 | } |
789 | |
790 | // See Closure. |
791 | template <typename Class, typename Pointer, typename Arg1, typename Arg2> |
792 | inline ::google::protobuf::Closure* NewCallback(const Pointer& object, void (Class::*method)(Arg1, Arg2), |
793 | Arg1 arg1, Arg2 arg2) { |
794 | return new internal::MethodClosure2<Class, Pointer, Arg1, Arg2>( |
795 | object, method, true, arg1, arg2); |
796 | } |
797 | |
798 | // See Closure. |
799 | template <typename Class, typename Pointer, typename Arg1, typename Arg2> |
800 | inline ::google::protobuf::Closure* NewPermanentCallback( |
801 | const Pointer& object, void (Class::*method)(Arg1, Arg2), |
802 | Arg1 arg1, Arg2 arg2) { |
803 | return new internal::MethodClosure2<Class, Pointer, Arg1, Arg2>( |
804 | object, method, false, arg1, arg2); |
805 | } |
806 | |
807 | // See Closure. |
808 | template <typename Arg1, typename Arg2, typename Arg3> |
809 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3), |
810 | Arg1 arg1, Arg2 arg2, Arg3 arg3) { |
811 | return new internal::FunctionClosure3<Arg1, Arg2, Arg3>( |
812 | function, true, arg1, arg2, arg3); |
813 | } |
814 | |
815 | // See Closure. |
816 | template <typename Arg1, typename Arg2, typename Arg3> |
817 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3), |
818 | Arg1 arg1, Arg2 arg2, Arg3 arg3) { |
819 | return new internal::FunctionClosure3<Arg1, Arg2, Arg3>( |
820 | function, false, arg1, arg2, arg3); |
821 | } |
822 | |
823 | // See Closure |
824 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3> |
825 | inline ::google::protobuf::Closure* NewCallback( |
826 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3), |
827 | Arg1 arg1, Arg2 arg2, Arg3 arg3) { |
828 | return new internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>( |
829 | object, method, true, arg1, arg2, arg3); |
830 | } |
831 | |
832 | // See Closure |
833 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3> |
834 | inline ::google::protobuf::Closure* NewPermanentCallback( |
835 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3), |
836 | Arg1 arg1, Arg2 arg2, Arg3 arg3) { |
837 | return new internal::MethodClosure3<Class, Pointer, Arg1, Arg2, Arg3>( |
838 | object, method, false, arg1, arg2, arg3); |
839 | } |
840 | |
841 | // See Closure. |
842 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
843 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4), |
844 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { |
845 | return new internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>( |
846 | function, true, arg1, arg2, arg3, arg4); |
847 | } |
848 | |
849 | // See Closure. |
850 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
851 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4), |
852 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { |
853 | return new internal::FunctionClosure4<Arg1, Arg2, Arg3, Arg4>( |
854 | function, false, arg1, arg2, arg3, arg4); |
855 | } |
856 | |
857 | // See Closure. |
858 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
859 | inline ::google::protobuf::Closure* NewCallback( |
860 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4), |
861 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { |
862 | return new internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>( |
863 | object, method, true, arg1, arg2, arg3, arg4); |
864 | } |
865 | |
866 | // See Closure. |
867 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4> |
868 | inline ::google::protobuf::Closure* NewPermanentCallback( |
869 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4), |
870 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { |
871 | return new internal::MethodClosure4<Class, Pointer, Arg1, Arg2, Arg3, Arg4>( |
872 | object, method, false, arg1, arg2, arg3, arg4); |
873 | } |
874 | |
875 | // See Closure. |
876 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> |
877 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5), |
878 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { |
879 | return new internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>( |
880 | function, true, arg1, arg2, arg3, arg4, arg5); |
881 | } |
882 | |
883 | // See Closure. |
884 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> |
885 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5), |
886 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { |
887 | return new internal::FunctionClosure5<Arg1, Arg2, Arg3, Arg4, Arg5>( |
888 | function, false, arg1, arg2, arg3, arg4, arg5); |
889 | } |
890 | |
891 | // See Closure |
892 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> |
893 | inline ::google::protobuf::Closure* NewCallback( |
894 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5), |
895 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { |
896 | return new internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>( |
897 | object, method, true, arg1, arg2, arg3, arg4, arg5); |
898 | } |
899 | |
900 | // See Closure |
901 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> |
902 | inline ::google::protobuf::Closure* NewPermanentCallback( |
903 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5), |
904 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { |
905 | return new internal::MethodClosure5<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5>( |
906 | object, method, false, arg1, arg2, arg3, arg4, arg5); |
907 | } |
908 | |
909 | // See Closure. |
910 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> |
911 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), |
912 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) { |
913 | return new internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>( |
914 | function, true, arg1, arg2, arg3, arg4, arg5, arg6); |
915 | } |
916 | |
917 | // See Closure. |
918 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> |
919 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), |
920 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) { |
921 | return new internal::FunctionClosure6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>( |
922 | function, false, arg1, arg2, arg3, arg4, arg5, arg6); |
923 | } |
924 | |
925 | // See Closure |
926 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> |
927 | inline ::google::protobuf::Closure* NewCallback( |
928 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), |
929 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) { |
930 | return new internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>( |
931 | object, method, true, arg1, arg2, arg3, arg4, arg5, arg6); |
932 | } |
933 | |
934 | // See Closure |
935 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> |
936 | inline ::google::protobuf::Closure* NewPermanentCallback( |
937 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), |
938 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) { |
939 | return new internal::MethodClosure6<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>( |
940 | object, method, false, arg1, arg2, arg3, arg4, arg5, arg6); |
941 | } |
942 | |
943 | // See Closure |
944 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> |
945 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), |
946 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) { |
947 | return new internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>( |
948 | function, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7); |
949 | } |
950 | |
951 | // See Closure. |
952 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> |
953 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), |
954 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) { |
955 | return new internal::FunctionClosure7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>( |
956 | function, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7); |
957 | } |
958 | |
959 | |
960 | // See Closure |
961 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> |
962 | inline ::google::protobuf::Closure* NewCallback( |
963 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), |
964 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) { |
965 | return new internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>( |
966 | object, method, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7); |
967 | } |
968 | |
969 | |
970 | // See Closure |
971 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> |
972 | inline ::google::protobuf::Closure* NewPermanentCallback( |
973 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), |
974 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) { |
975 | return new internal::MethodClosure7<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>( |
976 | object, method, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7); |
977 | } |
978 | |
979 | |
980 | |
981 | // See Closure. |
982 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> |
983 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), |
984 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) { |
985 | return new internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>( |
986 | function, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); |
987 | } |
988 | |
989 | |
990 | // See Closure. |
991 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> |
992 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), |
993 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) { |
994 | return new internal::FunctionClosure8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>( |
995 | function, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); |
996 | } |
997 | |
998 | |
999 | |
1000 | // See Closure |
1001 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> |
1002 | inline ::google::protobuf::Closure* NewCallback( |
1003 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), |
1004 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) { |
1005 | return new internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>( |
1006 | object, method, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); |
1007 | } |
1008 | |
1009 | |
1010 | // See Closure |
1011 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> |
1012 | inline ::google::protobuf::Closure* NewPermanentCallback( |
1013 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), |
1014 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) { |
1015 | return new internal::MethodClosure8<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>( |
1016 | object, method, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); |
1017 | } |
1018 | |
1019 | |
1020 | // See Closure. |
1021 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> |
1022 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), |
1023 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9) { |
1024 | return new internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>( |
1025 | function, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); |
1026 | } |
1027 | |
1028 | |
1029 | // See Closure. |
1030 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> |
1031 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), |
1032 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9) { |
1033 | return new internal::FunctionClosure9<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>( |
1034 | function, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); |
1035 | } |
1036 | |
1037 | |
1038 | // See Closure |
1039 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> |
1040 | inline ::google::protobuf::Closure* NewCallback( |
1041 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), |
1042 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9) { |
1043 | return new internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>( |
1044 | object, method, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); |
1045 | } |
1046 | |
1047 | |
1048 | // See Closure |
1049 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> |
1050 | inline ::google::protobuf::Closure* NewPermanentCallback( |
1051 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), |
1052 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9) { |
1053 | return new internal::MethodClosure9<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9>( |
1054 | object, method, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); |
1055 | } |
1056 | |
1057 | // See Closure. |
1058 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9, typename Arg10> |
1059 | inline ::google::protobuf::Closure* NewCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10), |
1060 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10) { |
1061 | return new internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>( |
1062 | function, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); |
1063 | } |
1064 | |
1065 | |
1066 | // See Closure. |
1067 | template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9, typename Arg10> |
1068 | inline ::google::protobuf::Closure* NewPermanentCallback(void (*function)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10), |
1069 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10) { |
1070 | return new internal::FunctionClosure10<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>( |
1071 | function, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); |
1072 | } |
1073 | |
1074 | |
1075 | // See Closure |
1076 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9, typename Arg10> |
1077 | inline ::google::protobuf::Closure* NewCallback( |
1078 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10), |
1079 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10) { |
1080 | return new internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>( |
1081 | object, method, true, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); |
1082 | } |
1083 | |
1084 | |
1085 | // See Closure |
1086 | template <typename Class, typename Pointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9, typename Arg10> |
1087 | inline ::google::protobuf::Closure* NewPermanentCallback( |
1088 | const Pointer& object, void (Class::*method)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10), |
1089 | Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9, Arg10 arg10) { |
1090 | return new internal::MethodClosure10<Class, Pointer, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10>( |
1091 | object, method, false, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); |
1092 | } |
1093 | |
1094 | } // namespace brpc |
1095 | |
1096 | |
1097 | #endif // BRPC_CALLBACK_H |
1098 | |