xref: /AOO41X/main/framework/inc/macros/xinterface.hxx (revision f8e07b45f7e1fb69563504f404bb0b75210f0be6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef __FRAMEWORK_MACROS_XINTERFACE_HXX_
25 #define __FRAMEWORK_MACROS_XINTERFACE_HXX_
26 
27 //_________________________________________________________________________________________________________________
28 //  my own includes
29 //_________________________________________________________________________________________________________________
30 
31 //_________________________________________________________________________________________________________________
32 //  interface includes
33 //_________________________________________________________________________________________________________________
34 
35 #include <com/sun/star/uno/RuntimeException.hpp>
36 
37 //_________________________________________________________________________________________________________________
38 //  other includes
39 //_________________________________________________________________________________________________________________
40 #include <com/sun/star/uno/Any.hxx>
41 #include <com/sun/star/uno/Reference.hxx>
42 #include <com/sun/star/uno/Type.hxx>
43 #include <cppuhelper/queryinterface.hxx>
44 #include <rtl/ustring.hxx>
45 
46 //_________________________________________________________________________________________________________________
47 //  namespace
48 //_________________________________________________________________________________________________________________
49 
50 namespace framework{
51 
52 /*_________________________________________________________________________________________________________________
53 
54     macros for declaration and definition of XInterface
55     Please use follow public macros only!
56 
57     1)  DEFINE_XINTERFACE                                                               => use it in header to declare XInterface and his methods
58     2)  DIRECT_INTERFACE( INTERFACE )                                                   => use it as parameter INTERFACEx at 4) if interface not ambigous
59     3)  DERIVED_INTERFACE( BASEINTERFACE, DERIVEDINTERFACE )                            => use it as parameter INTERFACEx at 4) if interface can be ambigous
60     4)  DECLARE_XINTERFACE_0( CLASS, BASECLASS )                                        => use it to define implementation of XInterface for 0 additional interface to baseclass
61         DECLARE_XINTERFACE_1( CLASS, BASECLASS, INTERFACE1 )                            => use it to define implementation of XInterface for 1 additional interface to baseclass
62         ...
63         DECLARE_XINTERFACE_16( CLASS, BASECLASS, INTERFACE1, ... , INTERFACE16 )
64 
65 _________________________________________________________________________________________________________________*/
66 
67 //*****************************************************************************************************************
68 //  private
69 //  implementation of   XInterface::aquire()
70 //                      XInterface::release()
71 //*****************************************************************************************************************
72 #define PRIVATE_DEFINE_XINTERFACE_AQUIRE_RELEASE( CLASS, BASECLASS )                                                                                        \
73     void SAL_CALL CLASS::acquire() throw()                                                                          \
74     {                                                                                                                                                       \
75         /* Don't use mutex in methods of XInterface! */                                                                                                     \
76         BASECLASS::acquire();                                                                                                                               \
77     }                                                                                                                                                       \
78                                                                                                                                                             \
79     void SAL_CALL CLASS::release() throw()                                                                          \
80     {                                                                                                                                                       \
81         /* Don't use mutex in methods of XInterface! */                                                                                                     \
82         BASECLASS::release();                                                                                                                               \
83     }
84 
85 //*****************************************************************************************************************
86 //  private
87 //  implementation of XInterface::queryInterface() without any other interfaces!
88 //*****************************************************************************************************************
89 #define PRIVATE_DEFINE_XINTERFACE_QUERYINTERFACE_PURE( CLASS, BASECLASS )                                                                                   \
90     ::com::sun::star::uno::Any SAL_CALL CLASS::queryInterface( const ::com::sun::star::uno::Type& aType ) throw( ::com::sun::star::uno::RuntimeException )  \
91     {                                                                                                                                                       \
92         /* Attention: Don't use mutex or guard in this method!!! Is a method of XInterface. */                                                              \
93         /* I have no own supported interfaces ...                                           */                                                              \
94         /* ... ask baseclass for interfaces!                                                */                                                              \
95         return BASECLASS::queryInterface( aType );                                                                                                          \
96     }
97 
98 //*****************************************************************************************************************
99 //  private
100 //  implementation of XInterface::queryInterface() with max. 12 other interfaces!
101 //*****************************************************************************************************************
102 #define PRIVATE_DEFINE_XINTERFACE_QUERYINTERFACE( CLASS, BASECLASS, INTERFACES )                                                                            \
103     ::com::sun::star::uno::Any SAL_CALL CLASS::queryInterface( const ::com::sun::star::uno::Type& aType ) throw( ::com::sun::star::uno::RuntimeException )  \
104     {                                                                                                                                                       \
105         /* Attention: Don't use mutex or guard in this method!!! Is a method of XInterface. */                                                              \
106         /* Ask for my own supported interfaces ...                                          */                                                              \
107         ::com::sun::star::uno::Any aReturn  ( ::cppu::queryInterface INTERFACES                                                                             \
108                                             );                                                                                                              \
109         /* If searched interface not supported by this class ... */                                                                                         \
110         if ( aReturn.hasValue() == sal_False )                                                                                                              \
111         {                                                                                                                                                   \
112             /* ... ask baseclass for interfaces! */                                                                                                         \
113             aReturn = BASECLASS::queryInterface( aType );                                                                                                   \
114         }                                                                                                                                                   \
115         /* Return result of this search. */                                                                                                                 \
116         return aReturn;                                                                                                                                     \
117     }
118 
119 //*****************************************************************************************************************
120 //  private
121 //  implementation of XInterface::queryInterface() with more then 12 other interfaces!
122 //*****************************************************************************************************************
123 #define PRIVATE_DEFINE_XINTERFACE_QUERYINTERFACE_LARGE( CLASS, BASECLASS, INTERFACES_FIRST, INTERFACES_SECOND )                                             \
124     ::com::sun::star::uno::Any SAL_CALL CLASS::queryInterface( const ::com::sun::star::uno::Type& aType ) throw( ::com::sun::star::uno::RuntimeException )  \
125     {                                                                                                                                                       \
126         /* Attention: Don't use mutex or guard in this method!!! Is a method of XInterface. */                                                              \
127         /* Ask for my own supported interfaces ...                                          */                                                              \
128         ::com::sun::star::uno::Any aReturn  ( ::cppu::queryInterface INTERFACES_FIRST                                                                       \
129                                             );                                                                                                              \
130         /* If searched interface not supported by first group ... */                                                                                        \
131         if ( aReturn.hasValue() == sal_False )                                                                                                              \
132         {                                                                                                                                                   \
133             /* ... search in second group. (cppuhelper support 12 items only!) */                                                                           \
134             aReturn = ::cppu::queryInterface INTERFACES_SECOND ;                                                                                            \
135             /* If searched interface not supported by this class ... */                                                                                     \
136             if ( aReturn.hasValue() == sal_False )                                                                                                          \
137             {                                                                                                                                               \
138                 /* ... ask baseclass for interfaces! */                                                                                                     \
139                 aReturn = BASECLASS::queryInterface( aType );                                                                                               \
140             }                                                                                                                                               \
141         }                                                                                                                                                   \
142         /* Return result of this search. */                                                                                                                 \
143         return aReturn;                                                                                                                                     \
144     }
145 
146 //*****************************************************************************************************************
147 //  private
148 //  complete implementation of XInterface for different use cases
149 //*****************************************************************************************************************
150 #define PRIVATE_DEFINE_XINTERFACE_PURE( CLASS, BASECLASS )                                                                                                  \
151     PRIVATE_DEFINE_XINTERFACE_AQUIRE_RELEASE( CLASS, BASECLASS )                                                                                            \
152     PRIVATE_DEFINE_XINTERFACE_QUERYINTERFACE_PURE( CLASS, BASECLASS )
153 
154 #define PRIVATE_DEFINE_XINTERFACE( CLASS, BASECLASS, INTERFACES )                                                                                           \
155     PRIVATE_DEFINE_XINTERFACE_AQUIRE_RELEASE( CLASS, BASECLASS )                                                                                            \
156     PRIVATE_DEFINE_XINTERFACE_QUERYINTERFACE( CLASS, BASECLASS, INTERFACES )
157 
158 #define PRIVATE_DEFINE_XINTERFACE_LARGE( CLASS, BASECLASS, INTERFACES_FIRST, INTERFACES_SECOND )                                                            \
159     PRIVATE_DEFINE_XINTERFACE_AQUIRE_RELEASE( CLASS, BASECLASS )                                                                                            \
160     PRIVATE_DEFINE_XINTERFACE_QUERYINTERFACE_LARGE( CLASS, BASECLASS, INTERFACES_FIRST, INTERFACES_SECOND )
161 
162 //*****************************************************************************************************************
163 //  private
164 //  help macros to replace INTERFACES in queryInterface() [see before]
165 //*****************************************************************************************************************
166 /*
167 #ifdef ENABLE_SERVICEDEBUG
168     #define PRIVATE_DEFINE_INTERFACE_1( INTERFACE1 )     \
169         static_cast< XSPECIALDEBUGINTERFACE##* >( this ), \
170         INTERFACE1
171 #else
172 */
173     #define PRIVATE_DEFINE_INTERFACE_1( INTERFACE1 )                                                                                                                                                    \
174         INTERFACE1
175 //#endif // #ifdef ENABLE_SERVICEDEBUG
176 
177 #define PRIVATE_DEFINE_INTERFACE_2( INTERFACE1, INTERFACE2 )                                                                                                                                            \
178     PRIVATE_DEFINE_INTERFACE_1( INTERFACE1 ),                                                                                                                                                           \
179     INTERFACE2
180 
181 #define PRIVATE_DEFINE_INTERFACE_3( INTERFACE1, INTERFACE2, INTERFACE3 )                                                                                                                                \
182     PRIVATE_DEFINE_INTERFACE_2( INTERFACE1, INTERFACE2 ),                                                                                                                                               \
183     INTERFACE3
184 
185 #define PRIVATE_DEFINE_INTERFACE_4( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4 )                                                                                                                    \
186     PRIVATE_DEFINE_INTERFACE_3( INTERFACE1, INTERFACE2, INTERFACE3 ),                                                                                                                                   \
187     INTERFACE4
188 
189 #define PRIVATE_DEFINE_INTERFACE_5( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5 )                                                                                                        \
190     PRIVATE_DEFINE_INTERFACE_4( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4 ),                                                                                                                       \
191     INTERFACE5
192 
193 #define PRIVATE_DEFINE_INTERFACE_6( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6 )                                                                                            \
194     PRIVATE_DEFINE_INTERFACE_5( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5 ),                                                                                                           \
195     INTERFACE6
196 
197 #define PRIVATE_DEFINE_INTERFACE_7( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7 )                                                                                \
198     PRIVATE_DEFINE_INTERFACE_6( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6 ),                                                                                               \
199     INTERFACE7
200 
201 #define PRIVATE_DEFINE_INTERFACE_8( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8 )                                                                    \
202     PRIVATE_DEFINE_INTERFACE_7( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7 ),                                                                                   \
203     INTERFACE8
204 
205 #define PRIVATE_DEFINE_INTERFACE_9( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9 )                                                        \
206     PRIVATE_DEFINE_INTERFACE_8( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8 ),                                                                       \
207     INTERFACE9
208 
209 #define PRIVATE_DEFINE_INTERFACE_10( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10 )                                          \
210     PRIVATE_DEFINE_INTERFACE_9( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9 ),                                                           \
211     INTERFACE10
212 
213 #define PRIVATE_DEFINE_INTERFACE_11( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11 )                             \
214     PRIVATE_DEFINE_INTERFACE_10( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10 ),                                             \
215     INTERFACE11
216 
217 //*****************************************************************************************************************
218 //  public
219 //  help macros for follow XInterface definitions
220 //*****************************************************************************************************************
221 
222 //  Use it as parameter for DEFINE_XINTERFACE_X(), if you CAN use an interface directly in queryInterface()!
223 #define DIRECT_INTERFACE( INTERFACE ) \
224     static_cast< INTERFACE* >( this )
225 
226 //  Use it as parameter for DEFINE_XINTERFACE_X(), if you CAN'T use an interface directly in queryInterface()!
227 //  (zB at ambigous errors!)
228 #define DERIVED_INTERFACE( BASEINTERFACE, DERIVEDINTERFACE ) \
229     static_cast< BASEINTERFACE* >( static_cast< DERIVEDINTERFACE* >( this ) )
230 
231 //*****************************************************************************************************************
232 //  public
233 //  declaration of XInterface
234 //*****************************************************************************************************************
235 #define FWK_DECLARE_XINTERFACE                                                                                                                                      \
236     virtual ::com::sun::star::uno::Any  SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType   ) throw( ::com::sun::star::uno::RuntimeException ); \
237     virtual void                        SAL_CALL acquire       (                                            ) throw();  \
238     virtual void                        SAL_CALL release       (                                            ) throw();
239 
240 //*****************************************************************************************************************
241 //  public
242 //  implementation of XInterface
243 //*****************************************************************************************************************
244 
245 //  implementation of XInterface with 0 additional interface for queryInterface()
246 #define DEFINE_XINTERFACE_0( CLASS, BASECLASS )                                                                     \
247     PRIVATE_DEFINE_XINTERFACE_PURE  (   CLASS,                                                                      \
248                                         BASECLASS                                                                   \
249                                     )
250 
251 //  implementation of XInterface with 1 additional interface for queryInterface()
252 #define DEFINE_XINTERFACE_1( CLASS, BASECLASS, INTERFACE1 )                                                         \
253     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
254                                     BASECLASS,                                                                      \
255                                     ( aType, PRIVATE_DEFINE_INTERFACE_1 (   INTERFACE1                              \
256                                                                         )                                           \
257                                     )                                                                               \
258                                 )
259 
260 //  implementation of XInterface with 2 additional interfaces for queryInterface()
261 #define DEFINE_XINTERFACE_2( CLASS, BASECLASS, INTERFACE1, INTERFACE2 )                                             \
262     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
263                                     BASECLASS,                                                                      \
264                                     ( aType, PRIVATE_DEFINE_INTERFACE_2 (   INTERFACE1  ,                           \
265                                                                             INTERFACE2                              \
266                                                                         )                                           \
267                                     )                                                                               \
268                                 )
269 
270 //  implementation of XInterface with 3 additional interfaces for queryInterface()
271 #define DEFINE_XINTERFACE_3( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3 )                                 \
272     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
273                                     BASECLASS,                                                                      \
274                                     ( aType, PRIVATE_DEFINE_INTERFACE_3 (   INTERFACE1  ,                           \
275                                                                             INTERFACE2  ,                           \
276                                                                             INTERFACE3                              \
277                                                                         )                                           \
278                                     )                                                                               \
279                                 )
280 
281 //  implementation of XInterface with 4 additional interfaces for queryInterface()
282 #define DEFINE_XINTERFACE_4( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4 )                     \
283     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
284                                     BASECLASS,                                                                      \
285                                     ( aType, PRIVATE_DEFINE_INTERFACE_4 (   INTERFACE1  ,                           \
286                                                                             INTERFACE2  ,                           \
287                                                                             INTERFACE3  ,                           \
288                                                                             INTERFACE4                              \
289                                                                         )                                           \
290                                     )                                                                               \
291                                 )
292 
293 //  implementation of XInterface with 5 additional interfaces for queryInterface()
294 #define DEFINE_XINTERFACE_5( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5 )         \
295     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
296                                     BASECLASS,                                                                      \
297                                     ( aType, PRIVATE_DEFINE_INTERFACE_5 (   INTERFACE1  ,                           \
298                                                                             INTERFACE2  ,                           \
299                                                                             INTERFACE3  ,                           \
300                                                                             INTERFACE4  ,                           \
301                                                                             INTERFACE5                              \
302                                                                         )                                           \
303                                     )                                                                               \
304                                 )
305 
306 //  implementation of XInterface with 6 additional interfaces for queryInterface()
307 #define DEFINE_XINTERFACE_6( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6 ) \
308     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
309                                     BASECLASS,                                                                      \
310                                     ( aType, PRIVATE_DEFINE_INTERFACE_6 (   INTERFACE1  ,                           \
311                                                                             INTERFACE2  ,                           \
312                                                                             INTERFACE3  ,                           \
313                                                                             INTERFACE4  ,                           \
314                                                                             INTERFACE5  ,                           \
315                                                                             INTERFACE6                              \
316                                                                         )                                           \
317                                     )                                                                               \
318                                 )
319 
320 //  implementation of XInterface with 7 additional interfaces for queryInterface()
321 #define DEFINE_XINTERFACE_7( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7 ) \
322     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
323                                     BASECLASS,                                                                      \
324                                     ( aType, PRIVATE_DEFINE_INTERFACE_7 (   INTERFACE1  ,                           \
325                                                                             INTERFACE2  ,                           \
326                                                                             INTERFACE3  ,                           \
327                                                                             INTERFACE4  ,                           \
328                                                                             INTERFACE5  ,                           \
329                                                                             INTERFACE6  ,                           \
330                                                                             INTERFACE7                              \
331                                                                         )                                           \
332                                     )                                                                               \
333                                 )
334 
335 //  implementation of XInterface with 8 additional interfaces for queryInterface()
336 #define DEFINE_XINTERFACE_8( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8 ) \
337     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
338                                     BASECLASS,                                                                      \
339                                     ( aType, PRIVATE_DEFINE_INTERFACE_8 (   INTERFACE1  ,                           \
340                                                                             INTERFACE2  ,                           \
341                                                                             INTERFACE3  ,                           \
342                                                                             INTERFACE4  ,                           \
343                                                                             INTERFACE5  ,                           \
344                                                                             INTERFACE6  ,                           \
345                                                                             INTERFACE7  ,                           \
346                                                                             INTERFACE8                              \
347                                                                         )                                           \
348                                     )                                                                               \
349                                 )
350 
351 //  implementation of XInterface with 9 additional interfaces for queryInterface()
352 #define DEFINE_XINTERFACE_9( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9 ) \
353     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
354                                     BASECLASS,                                                                      \
355                                     ( aType, PRIVATE_DEFINE_INTERFACE_9 (   INTERFACE1  ,                           \
356                                                                             INTERFACE2  ,                           \
357                                                                             INTERFACE3  ,                           \
358                                                                             INTERFACE4  ,                           \
359                                                                             INTERFACE5  ,                           \
360                                                                             INTERFACE6  ,                           \
361                                                                             INTERFACE7  ,                           \
362                                                                             INTERFACE8  ,                           \
363                                                                             INTERFACE9                              \
364                                                                         )                                           \
365                                     )                                                                               \
366                                 )
367 
368 //  implementation of XInterface with 10 additional interfaces for queryInterface()
369 #define DEFINE_XINTERFACE_10( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10 )   \
370     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
371                                     BASECLASS,                                                                      \
372                                     ( aType, PRIVATE_DEFINE_INTERFACE_10    (   INTERFACE1  ,                       \
373                                                                                 INTERFACE2  ,                       \
374                                                                                 INTERFACE3  ,                       \
375                                                                                 INTERFACE4  ,                       \
376                                                                                 INTERFACE5  ,                       \
377                                                                                 INTERFACE6  ,                       \
378                                                                                 INTERFACE7  ,                       \
379                                                                                 INTERFACE8  ,                       \
380                                                                                 INTERFACE9  ,                       \
381                                                                                 INTERFACE10                         \
382                                                                             )                                       \
383                                     )                                                                               \
384                                 )
385 
386 //  implementation of XInterface with 11 additional interfaces for queryInterface()
387 #define DEFINE_XINTERFACE_11( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11 )  \
388     PRIVATE_DEFINE_XINTERFACE   (   CLASS,                                                                          \
389                                     BASECLASS,                                                                      \
390                                     ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                       \
391                                                                                 INTERFACE2  ,                       \
392                                                                                 INTERFACE3  ,                       \
393                                                                                 INTERFACE4  ,                       \
394                                                                                 INTERFACE5  ,                       \
395                                                                                 INTERFACE6  ,                       \
396                                                                                 INTERFACE7  ,                       \
397                                                                                 INTERFACE8  ,                       \
398                                                                                 INTERFACE9  ,                       \
399                                                                                 INTERFACE10 ,                       \
400                                                                                 INTERFACE11                         \
401                                                                             )                                       \
402                                     )                                                                               \
403                                 )
404 
405 //  implementation of XInterface with 12 additional interfaces for queryInterface()
406 #define DEFINE_XINTERFACE_12( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12 ) \
407     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
408                                         BASECLASS,                                                                  \
409                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
410                                                                                     INTERFACE2  ,                   \
411                                                                                     INTERFACE3  ,                   \
412                                                                                     INTERFACE4  ,                   \
413                                                                                     INTERFACE5  ,                   \
414                                                                                     INTERFACE6  ,                   \
415                                                                                     INTERFACE7  ,                   \
416                                                                                     INTERFACE8  ,                   \
417                                                                                     INTERFACE9  ,                   \
418                                                                                     INTERFACE10 ,                   \
419                                                                                     INTERFACE11                     \
420                                                                                 )                                   \
421                                         ),                                                                          \
422                                         ( aType, PRIVATE_DEFINE_INTERFACE_1     (   INTERFACE12                     \
423                                                                                 )                                   \
424                                         )                                                                           \
425                                     )
426 
427 //  implementation of XInterface with 13 additional interfaces for queryInterface()
428 #define DEFINE_XINTERFACE_13( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13 )    \
429     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
430                                         BASECLASS,                                                                  \
431                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
432                                                                                     INTERFACE2  ,                   \
433                                                                                     INTERFACE3  ,                   \
434                                                                                     INTERFACE4  ,                   \
435                                                                                     INTERFACE5  ,                   \
436                                                                                     INTERFACE6  ,                   \
437                                                                                     INTERFACE7  ,                   \
438                                                                                     INTERFACE8  ,                   \
439                                                                                     INTERFACE9  ,                   \
440                                                                                     INTERFACE10 ,                   \
441                                                                                     INTERFACE11                     \
442                                                                                 )                                   \
443                                         ),                                                                          \
444                                         ( aType, PRIVATE_DEFINE_INTERFACE_2     (   INTERFACE12 ,                   \
445                                                                                     INTERFACE13                     \
446                                                                                 )                                   \
447                                         )                                                                           \
448                                     )
449 
450 //  implementation of XInterface with 14 additional interfaces for queryInterface()
451 #define DEFINE_XINTERFACE_14( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14 )   \
452     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
453                                         BASECLASS,                                                                  \
454                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
455                                                                                     INTERFACE2  ,                   \
456                                                                                     INTERFACE3  ,                   \
457                                                                                     INTERFACE4  ,                   \
458                                                                                     INTERFACE5  ,                   \
459                                                                                     INTERFACE6  ,                   \
460                                                                                     INTERFACE7  ,                   \
461                                                                                     INTERFACE8  ,                   \
462                                                                                     INTERFACE9  ,                   \
463                                                                                     INTERFACE10 ,                   \
464                                                                                     INTERFACE11                     \
465                                                                                 )                                   \
466                                         ),                                                                          \
467                                         ( aType, PRIVATE_DEFINE_INTERFACE_3     (   INTERFACE12 ,                   \
468                                                                                     INTERFACE13 ,                   \
469                                                                                     INTERFACE14                     \
470                                                                                 )                                   \
471                                         )                                                                           \
472                                     )
473 
474 //  implementation of XInterface with 15 additional interfaces for queryInterface()
475 #define DEFINE_XINTERFACE_15( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15 )  \
476     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
477                                         BASECLASS,                                                                  \
478                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
479                                                                                     INTERFACE2  ,                   \
480                                                                                     INTERFACE3  ,                   \
481                                                                                     INTERFACE4  ,                   \
482                                                                                     INTERFACE5  ,                   \
483                                                                                     INTERFACE6  ,                   \
484                                                                                     INTERFACE7  ,                   \
485                                                                                     INTERFACE8  ,                   \
486                                                                                     INTERFACE9  ,                   \
487                                                                                     INTERFACE10 ,                   \
488                                                                                     INTERFACE11                     \
489                                                                                 )                                   \
490                                         ),                                                                          \
491                                         ( aType, PRIVATE_DEFINE_INTERFACE_4     (   INTERFACE12 ,                   \
492                                                                                     INTERFACE13 ,                   \
493                                                                                     INTERFACE14 ,                   \
494                                                                                     INTERFACE15                     \
495                                                                                 )                                   \
496                                         )                                                                           \
497                                     )
498 
499 //  implementation of XInterface with 16 additional interfaces for queryInterface()
500 #define DEFINE_XINTERFACE_16( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16 ) \
501     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
502                                         BASECLASS,                                                                  \
503                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
504                                                                                     INTERFACE2  ,                   \
505                                                                                     INTERFACE3  ,                   \
506                                                                                     INTERFACE4  ,                   \
507                                                                                     INTERFACE5  ,                   \
508                                                                                     INTERFACE6  ,                   \
509                                                                                     INTERFACE7  ,                   \
510                                                                                     INTERFACE8  ,                   \
511                                                                                     INTERFACE9  ,                   \
512                                                                                     INTERFACE10 ,                   \
513                                                                                     INTERFACE11                     \
514                                                                                 )                                   \
515                                         ),                                                                          \
516                                         ( aType, PRIVATE_DEFINE_INTERFACE_5     (   INTERFACE12 ,                   \
517                                                                                     INTERFACE13 ,                   \
518                                                                                     INTERFACE14 ,                   \
519                                                                                     INTERFACE15 ,                   \
520                                                                                     INTERFACE16                     \
521                                                                                 )                                   \
522                                         )                                                                           \
523                                     )
524 
525 //  implementation of XInterface with 17 additional interfaces for queryInterface()
526 #define DEFINE_XINTERFACE_17( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16, INTERFACE17 ) \
527     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
528                                         BASECLASS,                                                                  \
529                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
530                                                                                     INTERFACE2  ,                   \
531                                                                                     INTERFACE3  ,                   \
532                                                                                     INTERFACE4  ,                   \
533                                                                                     INTERFACE5  ,                   \
534                                                                                     INTERFACE6  ,                   \
535                                                                                     INTERFACE7  ,                   \
536                                                                                     INTERFACE8  ,                   \
537                                                                                     INTERFACE9  ,                   \
538                                                                                     INTERFACE10 ,                   \
539                                                                                     INTERFACE11                     \
540                                                                                 )                                   \
541                                         ),                                                                          \
542                                         ( aType, PRIVATE_DEFINE_INTERFACE_6     (   INTERFACE12 ,                   \
543                                                                                     INTERFACE13 ,                   \
544                                                                                     INTERFACE14 ,                   \
545                                                                                     INTERFACE15 ,                   \
546                                                                                     INTERFACE16 ,                   \
547                                                                                     INTERFACE17                     \
548                                                                                 )                                   \
549                                         )                                                                           \
550                                     )
551 
552 //  implementation of XInterface with 18 additional interfaces for queryInterface()
553 #define DEFINE_XINTERFACE_18( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16, INTERFACE17, INTERFACE18 ) \
554     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
555                                         BASECLASS,                                                                  \
556                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
557                                                                                     INTERFACE2  ,                   \
558                                                                                     INTERFACE3  ,                   \
559                                                                                     INTERFACE4  ,                   \
560                                                                                     INTERFACE5  ,                   \
561                                                                                     INTERFACE6  ,                   \
562                                                                                     INTERFACE7  ,                   \
563                                                                                     INTERFACE8  ,                   \
564                                                                                     INTERFACE9  ,                   \
565                                                                                     INTERFACE10 ,                   \
566                                                                                     INTERFACE11                     \
567                                                                                 )                                   \
568                                         ),                                                                          \
569                                         ( aType, PRIVATE_DEFINE_INTERFACE_7     (   INTERFACE12 ,                   \
570                                                                                     INTERFACE13 ,                   \
571                                                                                     INTERFACE14 ,                   \
572                                                                                     INTERFACE15 ,                   \
573                                                                                     INTERFACE16 ,                   \
574                                                                                     INTERFACE17 ,                   \
575                                                                                     INTERFACE18                     \
576                                                                                 )                                   \
577                                         )                                                                           \
578                                     )
579 
580 //  implementation of XInterface with 19 additional interfaces for queryInterface()
581 #define DEFINE_XINTERFACE_19( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16, INTERFACE17, INTERFACE18, INTERFACE19 ) \
582     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
583                                         BASECLASS,                                                                  \
584                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
585                                                                                     INTERFACE2  ,                   \
586                                                                                     INTERFACE3  ,                   \
587                                                                                     INTERFACE4  ,                   \
588                                                                                     INTERFACE5  ,                   \
589                                                                                     INTERFACE6  ,                   \
590                                                                                     INTERFACE7  ,                   \
591                                                                                     INTERFACE8  ,                   \
592                                                                                     INTERFACE9  ,                   \
593                                                                                     INTERFACE10 ,                   \
594                                                                                     INTERFACE11                     \
595                                                                                 )                                   \
596                                         ),                                                                          \
597                                         ( aType, PRIVATE_DEFINE_INTERFACE_8     (   INTERFACE12 ,                   \
598                                                                                     INTERFACE13 ,                   \
599                                                                                     INTERFACE14 ,                   \
600                                                                                     INTERFACE15 ,                   \
601                                                                                     INTERFACE16 ,                   \
602                                                                                     INTERFACE17 ,                   \
603                                                                                     INTERFACE18 ,                   \
604                                                                                     INTERFACE19                     \
605                                                                                 )                                   \
606                                         )                                                                           \
607                                     )
608 
609 //  implementation of XInterface with 20 additional interfaces for queryInterface()
610 #define DEFINE_XINTERFACE_20( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16, INTERFACE17, INTERFACE18, INTERFACE19, INTERFACE20 ) \
611     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
612                                         BASECLASS,                                                                  \
613                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
614                                                                                     INTERFACE2  ,                   \
615                                                                                     INTERFACE3  ,                   \
616                                                                                     INTERFACE4  ,                   \
617                                                                                     INTERFACE5  ,                   \
618                                                                                     INTERFACE6  ,                   \
619                                                                                     INTERFACE7  ,                   \
620                                                                                     INTERFACE8  ,                   \
621                                                                                     INTERFACE9  ,                   \
622                                                                                     INTERFACE10 ,                   \
623                                                                                     INTERFACE11                     \
624                                                                                 )                                   \
625                                         ),                                                                          \
626                                         ( aType, PRIVATE_DEFINE_INTERFACE_9     (   INTERFACE12 ,                   \
627                                                                                     INTERFACE13 ,                   \
628                                                                                     INTERFACE14 ,                   \
629                                                                                     INTERFACE15 ,                   \
630                                                                                     INTERFACE16 ,                   \
631                                                                                     INTERFACE17 ,                   \
632                                                                                     INTERFACE18 ,                   \
633                                                                                     INTERFACE19 ,                   \
634                                                                                     INTERFACE20                     \
635                                                                                 )                                   \
636                                         )                                                                           \
637                                     )
638 
639 //  implementation of XInterface with 21 additional interfaces for queryInterface()
640 #define DEFINE_XINTERFACE_21( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16, INTERFACE17, INTERFACE18, INTERFACE19, INTERFACE20, INTERFACE21 ) \
641     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
642                                         BASECLASS,                                                                  \
643                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
644                                                                                     INTERFACE2  ,                   \
645                                                                                     INTERFACE3  ,                   \
646                                                                                     INTERFACE4  ,                   \
647                                                                                     INTERFACE5  ,                   \
648                                                                                     INTERFACE6  ,                   \
649                                                                                     INTERFACE7  ,                   \
650                                                                                     INTERFACE8  ,                   \
651                                                                                     INTERFACE9  ,                   \
652                                                                                     INTERFACE10 ,                   \
653                                                                                     INTERFACE11                     \
654                                                                                 )                                   \
655                                         ),                                                                          \
656                                         ( aType, PRIVATE_DEFINE_INTERFACE_10    (   INTERFACE12 ,                   \
657                                                                                     INTERFACE13 ,                   \
658                                                                                     INTERFACE14 ,                   \
659                                                                                     INTERFACE15 ,                   \
660                                                                                     INTERFACE16 ,                   \
661                                                                                     INTERFACE17 ,                   \
662                                                                                     INTERFACE18 ,                   \
663                                                                                     INTERFACE19 ,                   \
664                                                                                     INTERFACE20 ,                   \
665                                                                                     INTERFACE21                     \
666                                                                                 )                                   \
667                                         )                                                                           \
668                                     )
669 
670 //  implementation of XInterface with 22 additional interfaces for queryInterface()
671 #define DEFINE_XINTERFACE_22( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11, INTERFACE12, INTERFACE13, INTERFACE14, INTERFACE15, INTERFACE16, INTERFACE17, INTERFACE18, INTERFACE19, INTERFACE20, INTERFACE21, INTERFACE22 ) \
672     PRIVATE_DEFINE_XINTERFACE_LARGE (   CLASS,                                                                      \
673                                         BASECLASS,                                                                  \
674                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE1  ,                   \
675                                                                                     INTERFACE2  ,                   \
676                                                                                     INTERFACE3  ,                   \
677                                                                                     INTERFACE4  ,                   \
678                                                                                     INTERFACE5  ,                   \
679                                                                                     INTERFACE6  ,                   \
680                                                                                     INTERFACE7  ,                   \
681                                                                                     INTERFACE8  ,                   \
682                                                                                     INTERFACE9  ,                   \
683                                                                                     INTERFACE10 ,                   \
684                                                                                     INTERFACE11                     \
685                                                                                 )                                   \
686                                         ),                                                                          \
687                                         ( aType, PRIVATE_DEFINE_INTERFACE_11    (   INTERFACE12 ,                   \
688                                                                                     INTERFACE13 ,                   \
689                                                                                     INTERFACE14 ,                   \
690                                                                                     INTERFACE15 ,                   \
691                                                                                     INTERFACE16 ,                   \
692                                                                                     INTERFACE17 ,                   \
693                                                                                     INTERFACE18 ,                   \
694                                                                                     INTERFACE19 ,                   \
695                                                                                     INTERFACE20 ,                   \
696                                                                                     INTERFACE22 ,                   \
697                                                                                     INTERFACE21                     \
698                                                                                 )                                   \
699                                         )                                                                           \
700                                     )
701 
702 }       //  namespace framework
703 
704 #endif  //  #ifndef __FRAMEWORK_MACROS_XINTERFACE_HXX_
705