CLOSED TREE: TraceMonkey merge head. (a=blockers)
[mozilla-central.git] / xpcom / glue / nsIClassInfoImpl.h
blobc85b876159f3ec895cf55853582036c7671bd377
1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
14 * The Original Code is XPCOM.
16 * The Initial Developer of the Original Code is Netscape Communications Corp.
17 * Portions created by the Initial Developer are Copyright (C) 2001
18 * the Initial Developer. All Rights Reserved.
20 * Contributor(s):
22 * Alternatively, the contents of this file may be used under the terms of
23 * either the GNU General Public License Version 2 or later (the "GPL"), or
24 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
25 * in which case the provisions of the GPL or the LGPL are applicable instead
26 * of those above. If you wish to allow use of your version of this file only
27 * under the terms of either the GPL or the LGPL, and not to allow others to
28 * use your version of this file under the terms of the MPL, indicate your
29 * decision by deleting the provisions above and replace them with the notice
30 * and other provisions required by the GPL or the LGPL. If you do not delete
31 * the provisions above, a recipient may use your version of this file under
32 * the terms of any one of the MPL, the GPL or the LGPL.
34 * ***** END LICENSE BLOCK ***** */
36 #ifndef nsIClassInfoImpl_h__
37 #define nsIClassInfoImpl_h__
39 #include "nsIClassInfo.h"
40 #include "nsISupportsImpl.h"
42 #include NEW_H
44 class NS_COM_GLUE GenericClassInfo : public nsIClassInfo
46 public:
47 struct ClassInfoData
49 typedef NS_CALLBACK(GetInterfacesProc)(PRUint32* NS_OUTPARAM countp,
50 nsIID*** NS_OUTPARAM array);
51 typedef NS_CALLBACK(GetLanguageHelperProc)(PRUint32 language,
52 nsISupports** helper);
54 GetInterfacesProc getinterfaces;
55 GetLanguageHelperProc getlanguagehelper;
56 PRUint32 flags;
57 nsCID cid;
60 NS_DECL_ISUPPORTS_INHERITED
61 NS_DECL_NSICLASSINFO
63 GenericClassInfo(const ClassInfoData* data)
64 : mData(data)
65 { }
67 private:
68 const ClassInfoData* mData;
71 #define NS_CLASSINFO_NAME(_class) g##_class##_classInfoGlobal
72 #define NS_CI_INTERFACE_GETTER_NAME(_class) _class##_GetInterfacesHelper
73 #define NS_DECL_CI_INTERFACE_GETTER(_class) \
74 extern NS_IMETHODIMP NS_CI_INTERFACE_GETTER_NAME(_class) \
75 (PRUint32 * NS_OUTPARAM, nsIID *** NS_OUTPARAM);
77 #define NS_IMPL_CLASSINFO(_class, _getlanguagehelper, _flags, _cid) \
78 NS_DECL_CI_INTERFACE_GETTER(_class) \
79 static const GenericClassInfo::ClassInfoData k##_class##ClassInfoData = { \
80 NS_CI_INTERFACE_GETTER_NAME(_class), \
81 _getlanguagehelper, \
82 _flags, \
83 _cid, \
84 }; \
85 static char k##_class##ClassInfoDataPlace[sizeof(GenericClassInfo)]; \
86 nsIClassInfo* NS_CLASSINFO_NAME(_class) = NULL;
88 #define NS_IMPL_QUERY_CLASSINFO(_class) \
89 if ( aIID.Equals(NS_GET_IID(nsIClassInfo)) ) { \
90 if (!NS_CLASSINFO_NAME(_class)) \
91 NS_CLASSINFO_NAME(_class) = new (k##_class##ClassInfoDataPlace) \
92 GenericClassInfo(&k##_class##ClassInfoData); \
93 foundInterface = NS_CLASSINFO_NAME(_class); \
94 } else
96 #define NS_CLASSINFO_HELPER_BEGIN(_class, _c) \
97 NS_IMETHODIMP \
98 NS_CI_INTERFACE_GETTER_NAME(_class)(PRUint32 *count NS_OUTPARAM, \
99 nsIID ***array NS_OUTPARAM) \
101 *count = _c; \
102 *array = (nsIID **)nsMemory::Alloc(sizeof (nsIID *) * _c);
104 #define NS_CLASSINFO_HELPER_ENTRY(_i, _interface) \
105 (*array)[_i] = (nsIID *)nsMemory::Clone(&NS_GET_IID(_interface), \
106 sizeof(nsIID));
108 #define NS_CLASSINFO_HELPER_END \
109 return NS_OK; \
112 #define NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface) \
113 NS_CLASSINFO_HELPER_BEGIN(_class, 1) \
114 NS_CLASSINFO_HELPER_ENTRY(0, _interface) \
115 NS_CLASSINFO_HELPER_END
117 #define NS_IMPL_QUERY_INTERFACE1_CI(_class, _i1) \
118 NS_INTERFACE_MAP_BEGIN(_class) \
119 NS_INTERFACE_MAP_ENTRY(_i1) \
120 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
121 NS_IMPL_QUERY_CLASSINFO(_class) \
122 NS_INTERFACE_MAP_END
124 #define NS_IMPL_ISUPPORTS1_CI(_class, _interface) \
125 NS_IMPL_ADDREF(_class) \
126 NS_IMPL_RELEASE(_class) \
127 NS_IMPL_QUERY_INTERFACE1_CI(_class, _interface) \
128 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
130 #define NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2) \
131 NS_CLASSINFO_HELPER_BEGIN(_class, 2) \
132 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
133 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
134 NS_CLASSINFO_HELPER_END
136 #define NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
137 NS_INTERFACE_MAP_BEGIN(_class) \
138 NS_INTERFACE_MAP_ENTRY(_i1) \
139 NS_INTERFACE_MAP_ENTRY(_i2) \
140 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
141 NS_IMPL_QUERY_CLASSINFO(_class) \
142 NS_INTERFACE_MAP_END
144 #define NS_IMPL_ISUPPORTS2_CI(_class, _i1, _i2) \
145 NS_IMPL_ADDREF(_class) \
146 NS_IMPL_RELEASE(_class) \
147 NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
148 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
150 #define NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3) \
151 NS_CLASSINFO_HELPER_BEGIN(_class, 3) \
152 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
153 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
154 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
155 NS_CLASSINFO_HELPER_END
157 #define NS_IMPL_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
158 NS_INTERFACE_MAP_BEGIN(_class) \
159 NS_INTERFACE_MAP_ENTRY(_i1) \
160 NS_INTERFACE_MAP_ENTRY(_i2) \
161 NS_INTERFACE_MAP_ENTRY(_i3) \
162 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
163 NS_IMPL_QUERY_CLASSINFO(_class) \
164 NS_INTERFACE_MAP_END
166 #define NS_IMPL_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
167 NS_IMPL_ADDREF(_class) \
168 NS_IMPL_RELEASE(_class) \
169 NS_IMPL_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
170 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
172 #define NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4) \
173 NS_CLASSINFO_HELPER_BEGIN(_class, 4) \
174 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
175 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
176 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
177 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
178 NS_CLASSINFO_HELPER_END
180 #define NS_IMPL_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
181 NS_INTERFACE_MAP_BEGIN(_class) \
182 NS_INTERFACE_MAP_ENTRY(_i1) \
183 NS_INTERFACE_MAP_ENTRY(_i2) \
184 NS_INTERFACE_MAP_ENTRY(_i3) \
185 NS_INTERFACE_MAP_ENTRY(_i4) \
186 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
187 NS_IMPL_QUERY_CLASSINFO(_class) \
188 NS_INTERFACE_MAP_END
190 #define NS_IMPL_ISUPPORTS4_CI(_class, _i1, _i2, _i3, _i4) \
191 NS_IMPL_ADDREF(_class) \
192 NS_IMPL_RELEASE(_class) \
193 NS_IMPL_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
194 NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4)
196 #define NS_IMPL_CI_INTERFACE_GETTER5(_class, _i1, _i2, _i3, _i4, _i5) \
197 NS_CLASSINFO_HELPER_BEGIN(_class, 5) \
198 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
199 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
200 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
201 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
202 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
203 NS_CLASSINFO_HELPER_END
205 #define NS_IMPL_QUERY_INTERFACE5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
206 NS_INTERFACE_MAP_BEGIN(_class) \
207 NS_INTERFACE_MAP_ENTRY(_i1) \
208 NS_INTERFACE_MAP_ENTRY(_i2) \
209 NS_INTERFACE_MAP_ENTRY(_i3) \
210 NS_INTERFACE_MAP_ENTRY(_i4) \
211 NS_INTERFACE_MAP_ENTRY(_i5) \
212 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
213 NS_IMPL_QUERY_CLASSINFO(_class) \
214 NS_INTERFACE_MAP_END
216 #define NS_IMPL_ISUPPORTS5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
217 NS_IMPL_ADDREF(_class) \
218 NS_IMPL_RELEASE(_class) \
219 NS_IMPL_QUERY_INTERFACE5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
220 NS_IMPL_CI_INTERFACE_GETTER5(_class, _i1, _i2, _i3, _i4, _i5)
222 #define NS_IMPL_CI_INTERFACE_GETTER6(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
223 NS_CLASSINFO_HELPER_BEGIN(_class, 6) \
224 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
225 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
226 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
227 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
228 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
229 NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
230 NS_CLASSINFO_HELPER_END
232 #define NS_IMPL_QUERY_INTERFACE6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
233 NS_INTERFACE_MAP_BEGIN(_class) \
234 NS_INTERFACE_MAP_ENTRY(_i1) \
235 NS_INTERFACE_MAP_ENTRY(_i2) \
236 NS_INTERFACE_MAP_ENTRY(_i3) \
237 NS_INTERFACE_MAP_ENTRY(_i4) \
238 NS_INTERFACE_MAP_ENTRY(_i5) \
239 NS_INTERFACE_MAP_ENTRY(_i6) \
240 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
241 NS_IMPL_QUERY_CLASSINFO(_class) \
242 NS_INTERFACE_MAP_END
244 #define NS_IMPL_ISUPPORTS6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
245 NS_IMPL_ADDREF(_class) \
246 NS_IMPL_RELEASE(_class) \
247 NS_IMPL_QUERY_INTERFACE6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
248 NS_IMPL_CI_INTERFACE_GETTER6(_class, _i1, _i2, _i3, _i4, _i5, _i6)
250 #define NS_IMPL_CI_INTERFACE_GETTER7(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
251 _i7) \
252 NS_CLASSINFO_HELPER_BEGIN(_class, 7) \
253 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
254 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
255 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
256 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
257 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
258 NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
259 NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
260 NS_CLASSINFO_HELPER_END
262 #define NS_IMPL_QUERY_INTERFACE7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
263 _i7) \
264 NS_INTERFACE_MAP_BEGIN(_class) \
265 NS_INTERFACE_MAP_ENTRY(_i1) \
266 NS_INTERFACE_MAP_ENTRY(_i2) \
267 NS_INTERFACE_MAP_ENTRY(_i3) \
268 NS_INTERFACE_MAP_ENTRY(_i4) \
269 NS_INTERFACE_MAP_ENTRY(_i5) \
270 NS_INTERFACE_MAP_ENTRY(_i6) \
271 NS_INTERFACE_MAP_ENTRY(_i7) \
272 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
273 NS_IMPL_QUERY_CLASSINFO(_class) \
274 NS_INTERFACE_MAP_END
276 #define NS_IMPL_ISUPPORTS7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
277 NS_IMPL_ADDREF(_class) \
278 NS_IMPL_RELEASE(_class) \
279 NS_IMPL_QUERY_INTERFACE7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
280 NS_IMPL_CI_INTERFACE_GETTER7(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7)
282 #define NS_IMPL_CI_INTERFACE_GETTER8(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
283 _i7, _i8) \
284 NS_CLASSINFO_HELPER_BEGIN(_class, 8) \
285 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
286 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
287 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
288 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
289 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
290 NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
291 NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
292 NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
293 NS_CLASSINFO_HELPER_END
295 #define NS_IMPL_QUERY_INTERFACE8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
296 _i7, _i8) \
297 NS_INTERFACE_MAP_BEGIN(_class) \
298 NS_INTERFACE_MAP_ENTRY(_i1) \
299 NS_INTERFACE_MAP_ENTRY(_i2) \
300 NS_INTERFACE_MAP_ENTRY(_i3) \
301 NS_INTERFACE_MAP_ENTRY(_i4) \
302 NS_INTERFACE_MAP_ENTRY(_i5) \
303 NS_INTERFACE_MAP_ENTRY(_i6) \
304 NS_INTERFACE_MAP_ENTRY(_i7) \
305 NS_INTERFACE_MAP_ENTRY(_i8) \
306 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
307 NS_IMPL_QUERY_CLASSINFO(_class) \
308 NS_INTERFACE_MAP_END
310 #define NS_IMPL_ISUPPORTS8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8) \
311 NS_IMPL_ADDREF(_class) \
312 NS_IMPL_RELEASE(_class) \
313 NS_IMPL_QUERY_INTERFACE8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8) \
314 NS_IMPL_CI_INTERFACE_GETTER8(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8)
316 #define NS_IMPL_CI_INTERFACE_GETTER9(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
317 _i7, _i8, _i9) \
318 NS_CLASSINFO_HELPER_BEGIN(_class, 9) \
319 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
320 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
321 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
322 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
323 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
324 NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
325 NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
326 NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
327 NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
328 NS_CLASSINFO_HELPER_END
330 #define NS_IMPL_QUERY_INTERFACE9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
331 _i7, _i8, _i9) \
332 NS_INTERFACE_MAP_BEGIN(_class) \
333 NS_INTERFACE_MAP_ENTRY(_i1) \
334 NS_INTERFACE_MAP_ENTRY(_i2) \
335 NS_INTERFACE_MAP_ENTRY(_i3) \
336 NS_INTERFACE_MAP_ENTRY(_i4) \
337 NS_INTERFACE_MAP_ENTRY(_i5) \
338 NS_INTERFACE_MAP_ENTRY(_i6) \
339 NS_INTERFACE_MAP_ENTRY(_i7) \
340 NS_INTERFACE_MAP_ENTRY(_i8) \
341 NS_INTERFACE_MAP_ENTRY(_i9) \
342 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
343 NS_IMPL_QUERY_CLASSINFO(_class) \
344 NS_INTERFACE_MAP_END
346 #define NS_IMPL_ISUPPORTS9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
347 _i8, _i9) \
348 NS_IMPL_ADDREF(_class) \
349 NS_IMPL_RELEASE(_class) \
350 NS_IMPL_QUERY_INTERFACE9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
351 _i8, _i9) \
352 NS_IMPL_CI_INTERFACE_GETTER9(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
353 _i8, _i9)
355 #define NS_IMPL_CI_INTERFACE_GETTER10(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
356 _i7, _i8, _i9, _i10) \
357 NS_CLASSINFO_HELPER_BEGIN(_class, 10) \
358 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
359 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
360 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
361 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
362 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
363 NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
364 NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
365 NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
366 NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
367 NS_CLASSINFO_HELPER_ENTRY(9, _i10) \
368 NS_CLASSINFO_HELPER_END
370 #define NS_IMPL_CI_INTERFACE_GETTER11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
371 _i7, _i8, _i9, _i10, _i11) \
372 NS_CLASSINFO_HELPER_BEGIN(_class, 11) \
373 NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
374 NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
375 NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
376 NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
377 NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
378 NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
379 NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
380 NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
381 NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
382 NS_CLASSINFO_HELPER_ENTRY(9, _i10) \
383 NS_CLASSINFO_HELPER_ENTRY(10, _i11) \
384 NS_CLASSINFO_HELPER_END
386 #define NS_IMPL_QUERY_INTERFACE10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
387 _i7, _i8, _i9, _i10) \
388 NS_INTERFACE_MAP_BEGIN(_class) \
389 NS_INTERFACE_MAP_ENTRY(_i1) \
390 NS_INTERFACE_MAP_ENTRY(_i2) \
391 NS_INTERFACE_MAP_ENTRY(_i3) \
392 NS_INTERFACE_MAP_ENTRY(_i4) \
393 NS_INTERFACE_MAP_ENTRY(_i5) \
394 NS_INTERFACE_MAP_ENTRY(_i6) \
395 NS_INTERFACE_MAP_ENTRY(_i7) \
396 NS_INTERFACE_MAP_ENTRY(_i8) \
397 NS_INTERFACE_MAP_ENTRY(_i9) \
398 NS_INTERFACE_MAP_ENTRY(_i10) \
399 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
400 NS_IMPL_QUERY_CLASSINFO(_class) \
401 NS_INTERFACE_MAP_END
403 #define NS_IMPL_QUERY_INTERFACE11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
404 _i7, _i8, _i9, _i10, _i11) \
405 NS_INTERFACE_MAP_BEGIN(_class) \
406 NS_INTERFACE_MAP_ENTRY(_i1) \
407 NS_INTERFACE_MAP_ENTRY(_i2) \
408 NS_INTERFACE_MAP_ENTRY(_i3) \
409 NS_INTERFACE_MAP_ENTRY(_i4) \
410 NS_INTERFACE_MAP_ENTRY(_i5) \
411 NS_INTERFACE_MAP_ENTRY(_i6) \
412 NS_INTERFACE_MAP_ENTRY(_i7) \
413 NS_INTERFACE_MAP_ENTRY(_i8) \
414 NS_INTERFACE_MAP_ENTRY(_i9) \
415 NS_INTERFACE_MAP_ENTRY(_i10) \
416 NS_INTERFACE_MAP_ENTRY(_i11) \
417 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
418 NS_IMPL_QUERY_CLASSINFO(_class) \
419 NS_INTERFACE_MAP_END
421 #define NS_IMPL_ISUPPORTS10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
422 _i8, _i9, _i10) \
423 NS_IMPL_ADDREF(_class) \
424 NS_IMPL_RELEASE(_class) \
425 NS_IMPL_QUERY_INTERFACE10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
426 _i8, _i9, _i10) \
427 NS_IMPL_CI_INTERFACE_GETTER10(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
428 _i8, _i9, _i10)
430 #define NS_IMPL_ISUPPORTS11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
431 _i8, _i9, _i10, _i11) \
432 NS_IMPL_ADDREF(_class) \
433 NS_IMPL_RELEASE(_class) \
434 NS_IMPL_QUERY_INTERFACE11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
435 _i8, _i9, _i10, _i11) \
436 NS_IMPL_CI_INTERFACE_GETTER11(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
437 _i8, _i9, _i10, _i11)
439 #endif // nsIClassInfoImpl_h__