1f8e07b45SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3f8e07b45SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4f8e07b45SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5f8e07b45SAndrew Rist  * distributed with this work for additional information
6f8e07b45SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7f8e07b45SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8f8e07b45SAndrew Rist  * "License"); you may not use this file except in compliance
9f8e07b45SAndrew Rist  * with the License.  You may obtain a copy of the License at
10f8e07b45SAndrew Rist  *
11f8e07b45SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12f8e07b45SAndrew Rist  *
13f8e07b45SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14f8e07b45SAndrew Rist  * software distributed under the License is distributed on an
15f8e07b45SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16f8e07b45SAndrew Rist  * KIND, either express or implied.  See the License for the
17f8e07b45SAndrew Rist  * specific language governing permissions and limitations
18f8e07b45SAndrew Rist  * under the License.
19f8e07b45SAndrew Rist  *
20f8e07b45SAndrew Rist  *************************************************************/
21f8e07b45SAndrew Rist 
22f8e07b45SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_
25cdf0e10cSrcweir #define __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir //_________________________________________________________________________________________________________________
28cdf0e10cSrcweir //	my own includes
29cdf0e10cSrcweir //_________________________________________________________________________________________________________________
30cdf0e10cSrcweir 
31cdf0e10cSrcweir //_________________________________________________________________________________________________________________
32cdf0e10cSrcweir //	interface includes
33cdf0e10cSrcweir //_________________________________________________________________________________________________________________
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include <com/sun/star/lang/XTypeProvider.hpp>
36cdf0e10cSrcweir #include <com/sun/star/uno/RuntimeException.hpp>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir //_________________________________________________________________________________________________________________
39cdf0e10cSrcweir //	other includes
40cdf0e10cSrcweir //_________________________________________________________________________________________________________________
41cdf0e10cSrcweir #include <com/sun/star/uno/Any.hxx>
42cdf0e10cSrcweir #include <com/sun/star/uno/Reference.hxx>
43cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
44cdf0e10cSrcweir #include <com/sun/star/uno/Type.hxx>
45cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx>
46cdf0e10cSrcweir #include <osl/mutex.hxx>
47cdf0e10cSrcweir #include <rtl/ustring.hxx>
48cdf0e10cSrcweir 
49cdf0e10cSrcweir //_________________________________________________________________________________________________________________
50cdf0e10cSrcweir //	namespace
51cdf0e10cSrcweir //_________________________________________________________________________________________________________________
52cdf0e10cSrcweir 
53cdf0e10cSrcweir namespace framework{
54cdf0e10cSrcweir 
55cdf0e10cSrcweir /*_________________________________________________________________________________________________________________
56cdf0e10cSrcweir 
57cdf0e10cSrcweir 	macros for declaration and definition of XTypeProvider
58cdf0e10cSrcweir 	Please use follow public macros only!
59cdf0e10cSrcweir 
60cdf0e10cSrcweir 	1)	DEFINE_XTYPEPROVIDER															=> use it in header to declare XTypeProvider and his methods
61cdf0e10cSrcweir 	2)	DECLARE_TYPEPROVIDER_0( CLASS )													=> use it to define implementation of XTypeProvider for 0 supported type
62cdf0e10cSrcweir 		DECLARE_TYPEPROVIDER_1( CLASS, TYPE1 )											=> use it to define implementation of XTypeProvider for 1 supported type
63cdf0e10cSrcweir 		...
64cdf0e10cSrcweir 		DECLARE_TYPEPROVIDER_16( CLASS, TYPE1, ... , TYPE16 )
65cdf0e10cSrcweir 	3)	DEFINE_XTYPEPROVIDER_1_WITH_BASECLASS( CLASS, BASECLASS, TYPE1 )				=> use it to define implementation of XTypeProvider for 1 additional supported type to baseclass
66cdf0e10cSrcweir 		...
67cdf0e10cSrcweir 		DEFINE_XTYPEPROVIDER_5_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, ..., TYPE5 )
68cdf0e10cSrcweir 
69cdf0e10cSrcweir _________________________________________________________________________________________________________________*/
70cdf0e10cSrcweir 
71cdf0e10cSrcweir //*****************************************************************************************************************
72cdf0e10cSrcweir //	private
73cdf0e10cSrcweir //	implementation of XTypeProvider::getImplementationId()
74cdf0e10cSrcweir //*****************************************************************************************************************
75cdf0e10cSrcweir #define PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS )																				\
76cdf0e10cSrcweir 	::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL CLASS::getImplementationId() throw( ::com::sun::star::uno::RuntimeException )			\
77cdf0e10cSrcweir 	{																																			\
78cdf0e10cSrcweir 		/* Create one Id for all instances of this class.												*/										\
79cdf0e10cSrcweir 		/* Use ethernet address to do this! (sal_True)													*/										\
80cdf0e10cSrcweir 		/* Optimize this method																			*/										\
81cdf0e10cSrcweir 		/* We initialize a static variable only one time. And we don't must use a mutex at every call!	*/										\
82cdf0e10cSrcweir 		/* For the first call; pID is NULL - for the second call pID is different from NULL!			*/										\
83cdf0e10cSrcweir 		static ::cppu::OImplementationId* pID = NULL ;																							\
84cdf0e10cSrcweir 		if ( pID == NULL )																														\
85cdf0e10cSrcweir 		{																																		\
86cdf0e10cSrcweir 			/* Ready for multithreading; get global mutex for first call of this method only! see before   */									\
87cdf0e10cSrcweir 			::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );																			\
88cdf0e10cSrcweir 			/* Control these pointer again ... it can be, that another instance will be faster then these! */									\
89cdf0e10cSrcweir 			if ( pID == NULL )																													\
90cdf0e10cSrcweir 			{																																	\
91cdf0e10cSrcweir 				/* Create a new static ID ... */																								\
92cdf0e10cSrcweir 				static ::cppu::OImplementationId aID( sal_False );																				\
93cdf0e10cSrcweir 				/* ... and set his address to static pointer! */																				\
94cdf0e10cSrcweir 				pID = &aID ;																													\
95cdf0e10cSrcweir 			}																																	\
96cdf0e10cSrcweir 		}																																		\
97cdf0e10cSrcweir 		return pID->getImplementationId();																										\
98cdf0e10cSrcweir 	}
99cdf0e10cSrcweir 
100cdf0e10cSrcweir //*****************************************************************************************************************
101cdf0e10cSrcweir //	private
102cdf0e10cSrcweir //	implementation of XTypeProvider::getTypes() with max. 12 interfaces!
103cdf0e10cSrcweir //*****************************************************************************************************************
104cdf0e10cSrcweir #define PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES( CLASS, TYPES )																					\
105cdf0e10cSrcweir 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL CLASS::getTypes() throw( ::com::sun::star::uno::RuntimeException )	\
106cdf0e10cSrcweir 	{																																			\
107cdf0e10cSrcweir 		/* Optimize this method !										*/																		\
108cdf0e10cSrcweir 		/* We initialize a static variable only one time.				*/																		\
109cdf0e10cSrcweir 		/* And we don't must use a mutex at every call!					*/																		\
110cdf0e10cSrcweir 		/* For the first call; pTypeCollection is NULL -				*/																		\
111cdf0e10cSrcweir 		/* for the second call pTypeCollection is different from NULL!	*/																		\
112cdf0e10cSrcweir 		static ::cppu::OTypeCollection* pTypeCollection = NULL ;																				\
113cdf0e10cSrcweir 		if ( pTypeCollection == NULL )																											\
114cdf0e10cSrcweir 		{																																		\
115cdf0e10cSrcweir 			/* Ready for multithreading; get global mutex for first call of this method only! see before   */									\
116cdf0e10cSrcweir 			::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );																			\
117cdf0e10cSrcweir 			/* Control these pointer again ... it can be, that another instance will be faster then these! */									\
118cdf0e10cSrcweir 			if ( pTypeCollection == NULL )																										\
119cdf0e10cSrcweir 			{																																	\
120cdf0e10cSrcweir 				/* Create a static typecollection ...			*/																				\
121cdf0e10cSrcweir 				/* Attention: "TYPES" will expand to "(...)"!	*/																				\
122cdf0e10cSrcweir 				static ::cppu::OTypeCollection aTypeCollection TYPES ;																			\
123cdf0e10cSrcweir 				/* ... and set his address to static pointer! */																				\
124cdf0e10cSrcweir 				pTypeCollection = &aTypeCollection ;																							\
125cdf0e10cSrcweir 			}																																	\
126cdf0e10cSrcweir 		}																																		\
127cdf0e10cSrcweir 		return pTypeCollection->getTypes();																										\
128cdf0e10cSrcweir 	}
129cdf0e10cSrcweir 
130cdf0e10cSrcweir //*****************************************************************************************************************
131cdf0e10cSrcweir //	private
132cdf0e10cSrcweir //	implementation of XTypeProvider::getTypes() with more then 12 interfaces!
133cdf0e10cSrcweir //*****************************************************************************************************************
134cdf0e10cSrcweir #define PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_LARGE( CLASS, TYPES_FIRST, TYPES_SECOND )															\
135cdf0e10cSrcweir 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL CLASS::getTypes() throw( ::com::sun::star::uno::RuntimeException )	\
136cdf0e10cSrcweir 	{																																			\
137cdf0e10cSrcweir 		/* Optimize this method !										*/																		\
138cdf0e10cSrcweir 		/* We initialize a static variable only one time.				*/																		\
139cdf0e10cSrcweir 		/* And we don't must use a mutex at every call!					*/																		\
140cdf0e10cSrcweir 		/* For the first call; pTypeCollection is NULL -				*/																		\
141cdf0e10cSrcweir 		/* for the second call pTypeCollection is different from NULL!	*/																		\
142cdf0e10cSrcweir 		static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >* pTypeCollection = NULL ;											\
143cdf0e10cSrcweir 		if ( pTypeCollection == NULL )																											\
144cdf0e10cSrcweir 		{																																		\
145cdf0e10cSrcweir 			/* Ready for multithreading; get global mutex for first call of this method only! see before   */									\
146cdf0e10cSrcweir 			::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );																			\
147cdf0e10cSrcweir 			/* Control these pointer again ... it can be, that another instance will be faster then these! */									\
148cdf0e10cSrcweir 			if ( pTypeCollection == NULL )																										\
149cdf0e10cSrcweir 			{																																	\
150cdf0e10cSrcweir 				/* Create two typecollections							*/																		\
151cdf0e10cSrcweir 				/* (cppuhelper support 12 items per collection only!)	*/																		\
152cdf0e10cSrcweir 				::cppu::OTypeCollection aTypeCollection1 TYPES_FIRST	;																		\
153cdf0e10cSrcweir 				::cppu::OTypeCollection aTypeCollection2 TYPES_SECOND	;																		\
154cdf0e10cSrcweir 				/* Copy all items from both sequences to one result list! */																	\
155cdf0e10cSrcweir 				::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > 			seqTypes1	= aTypeCollection1.getTypes();				\
156cdf0e10cSrcweir 				::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > 			seqTypes2	= aTypeCollection2.getTypes();				\
157cdf0e10cSrcweir 				sal_Int32																nCount1		= seqTypes1.getLength();					\
158cdf0e10cSrcweir 				sal_Int32																nCount2		= seqTypes2.getLength();					\
159cdf0e10cSrcweir 				static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >	seqResult	( nCount1+nCount2 );						\
160cdf0e10cSrcweir 				sal_Int32																nSource		= 0;										\
161cdf0e10cSrcweir 				sal_Int32																nDestination= 0;										\
162cdf0e10cSrcweir 				while( nSource<nCount1 )																										\
163cdf0e10cSrcweir 				{																																\
164cdf0e10cSrcweir 					seqResult[nDestination] = seqTypes1[nSource];																				\
165cdf0e10cSrcweir 					++nSource;																													\
166cdf0e10cSrcweir 					++nDestination;																												\
167cdf0e10cSrcweir 				}																																\
168cdf0e10cSrcweir 				nSource = 0;																													\
169cdf0e10cSrcweir 				while( nSource<nCount2 )																										\
170cdf0e10cSrcweir 				{																																\
171cdf0e10cSrcweir 					seqResult[nDestination] = seqTypes2[nSource];																				\
172cdf0e10cSrcweir 					++nSource;																													\
173cdf0e10cSrcweir 					++nDestination;																												\
174cdf0e10cSrcweir 				}																																\
175cdf0e10cSrcweir 				/* ... and set his address to static pointer! */																				\
176cdf0e10cSrcweir 				pTypeCollection = &seqResult;																									\
177cdf0e10cSrcweir 			}																																	\
178cdf0e10cSrcweir 		}																																		\
179cdf0e10cSrcweir 		return *pTypeCollection;																												\
180cdf0e10cSrcweir 	}
181cdf0e10cSrcweir 
182cdf0e10cSrcweir //*****************************************************************************************************************
183cdf0e10cSrcweir //	private
184cdf0e10cSrcweir //	implementation of XTypeProvider::getTypes() with using max. 12 interfaces + baseclass!
185cdf0e10cSrcweir //*****************************************************************************************************************
186cdf0e10cSrcweir #define PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_BASECLASS( CLASS, BASECLASS, TYPES )																\
187cdf0e10cSrcweir 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL CLASS::getTypes() throw( ::com::sun::star::uno::RuntimeException )	\
188cdf0e10cSrcweir 	{																																			\
189cdf0e10cSrcweir 		/* Optimize this method !										*/																		\
190cdf0e10cSrcweir 		/* We initialize a static variable only one time.				*/																		\
191cdf0e10cSrcweir 		/* And we don't must use a mutex at every call!					*/																		\
192cdf0e10cSrcweir 		/* For the first call; pTypeCollection is NULL -				*/																		\
193cdf0e10cSrcweir 		/* for the second call pTypeCollection is different from NULL!	*/																		\
194cdf0e10cSrcweir 		static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >* pTypeCollection = NULL ;											\
195cdf0e10cSrcweir 		if ( pTypeCollection == NULL )																											\
196cdf0e10cSrcweir 		{																																		\
197cdf0e10cSrcweir 			/* Ready for multithreading; get global mutex for first call of this method only! see before   */									\
198cdf0e10cSrcweir 			::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );																			\
199cdf0e10cSrcweir 			/* Control these pointer again ... it can be, that another instance will be faster then these! */									\
200cdf0e10cSrcweir 			if ( pTypeCollection == NULL )																										\
201cdf0e10cSrcweir 			{																																	\
202cdf0e10cSrcweir 				/* Create static typecollection for my own interfaces!	*/																		\
203cdf0e10cSrcweir 				static ::cppu::OTypeCollection aTypeCollection TYPES ;																			\
204cdf0e10cSrcweir 				/* Copy all items from my list sequences and from my baseclass	*/																\
205cdf0e10cSrcweir 				/* to one result list!											*/																\
206cdf0e10cSrcweir 				::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > 			seqTypes1	= aTypeCollection.getTypes();				\
207cdf0e10cSrcweir 				::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > 			seqTypes2	= BASECLASS::getTypes();					\
208cdf0e10cSrcweir 				sal_Int32																nCount1		= seqTypes1.getLength();					\
209cdf0e10cSrcweir 				sal_Int32																nCount2		= seqTypes2.getLength();					\
210cdf0e10cSrcweir 				static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >	seqResult	( nCount1+nCount2 );						\
211cdf0e10cSrcweir 				sal_Int32																nSource		= 0;										\
212cdf0e10cSrcweir 				sal_Int32																nDestination= 0;										\
213cdf0e10cSrcweir 				while( nSource<nCount1 )																										\
214cdf0e10cSrcweir 				{																																\
215cdf0e10cSrcweir 					seqResult[nDestination] = seqTypes1[nSource];																				\
216cdf0e10cSrcweir 					++nSource;																													\
217cdf0e10cSrcweir 					++nDestination;																												\
218cdf0e10cSrcweir 				}																																\
219cdf0e10cSrcweir 				nSource = 0;																													\
220cdf0e10cSrcweir 				while( nSource<nCount2 )																										\
221cdf0e10cSrcweir 				{																																\
222cdf0e10cSrcweir 					seqResult[nDestination] = seqTypes2[nSource];																				\
223cdf0e10cSrcweir 					++nSource;																													\
224cdf0e10cSrcweir 					++nDestination;																												\
225cdf0e10cSrcweir 				}																																\
226cdf0e10cSrcweir 				/* ... and set his address to static pointer! */																				\
227cdf0e10cSrcweir 				pTypeCollection = &seqResult;																									\
228cdf0e10cSrcweir 			}																																	\
229cdf0e10cSrcweir 		}																																		\
230cdf0e10cSrcweir 		return *pTypeCollection;																												\
231cdf0e10cSrcweir 	}
232cdf0e10cSrcweir 
233cdf0e10cSrcweir //*****************************************************************************************************************
234cdf0e10cSrcweir //	private
235cdf0e10cSrcweir //	help macros to replace TYPES in getTypes() [see before]
236cdf0e10cSrcweir //*****************************************************************************************************************
237cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_1( TYPE1 )																											\
238cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE1 >*)NULL )
239cdf0e10cSrcweir 
240cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_2( TYPE1, TYPE2 )																									\
241cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_1( TYPE1 ),																												\
242cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE2 >*)NULL )
243cdf0e10cSrcweir 
244cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_3( TYPE1, TYPE2, TYPE3 )																							\
245cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_2( TYPE1, TYPE2 ),																										\
246cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE3 >*)NULL )
247cdf0e10cSrcweir 
248cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_4( TYPE1, TYPE2, TYPE3, TYPE4 )																						\
249cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_3( TYPE1, TYPE2, TYPE3 ),																								\
250cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE4 >*)NULL )
251cdf0e10cSrcweir 
252cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_5( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 )																				\
253cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_4( TYPE1, TYPE2, TYPE3, TYPE4 ),																						\
254cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE5 >*)NULL )
255cdf0e10cSrcweir 
256cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_6( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6 )																		\
257cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_5( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 ),																					\
258cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE6 >*)NULL )
259cdf0e10cSrcweir 
260cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_7( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7 )																\
261cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_6( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6 ),																			\
262cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE7 >*)NULL )
263cdf0e10cSrcweir 
264cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_8( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8 )															\
265cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_7( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7 ),																	\
266cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE8 >*)NULL )
267cdf0e10cSrcweir 
268cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_9( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9 )													\
269cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_8( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8 ),															\
270cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE9 >*)NULL )
271cdf0e10cSrcweir 
272cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_10( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10 )											\
273cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_9( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9 ),														\
274cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE10 >*)NULL )
275cdf0e10cSrcweir 
276cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_11( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 )									\
277cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_10( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10 ),											\
278cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE11 >*)NULL )
279cdf0e10cSrcweir 
280cdf0e10cSrcweir #define	PRIVATE_DEFINE_TYPE_12( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12 )							\
281cdf0e10cSrcweir 	PRIVATE_DEFINE_TYPE_11( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 ),									\
282cdf0e10cSrcweir 	::getCppuType(( const ::com::sun::star::uno::Reference< TYPE12 >*)NULL )
283cdf0e10cSrcweir 
284cdf0e10cSrcweir //*****************************************************************************************************************
285cdf0e10cSrcweir //	private
286cdf0e10cSrcweir //	complete implementation of XTypeProvider
287cdf0e10cSrcweir //*****************************************************************************************************************
288cdf0e10cSrcweir #define	PRIVATE_DEFINE_XTYPEPROVIDER_PURE( CLASS )																											\
289cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS )																								\
290cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES( CLASS, ::getCppuType(( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider >*)NULL ) )
291cdf0e10cSrcweir 
292cdf0e10cSrcweir #define	PRIVATE_DEFINE_XTYPEPROVIDER( CLASS, TYPES )																										\
293cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS )																								\
294cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES( CLASS, TYPES )
295cdf0e10cSrcweir 
296cdf0e10cSrcweir #define	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE( CLASS, TYPES_FIRST, TYPES_SECOND )																				\
297cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS )																								\
298cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_LARGE( CLASS, TYPES_FIRST, TYPES_SECOND )
299cdf0e10cSrcweir 
300cdf0e10cSrcweir #define	PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS( CLASS, BASECLASS, TYPES )																					\
301cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS )																								\
302cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_BASECLASS( CLASS, BASECLASS, TYPES )
303cdf0e10cSrcweir 
304cdf0e10cSrcweir //*****************************************************************************************************************
305cdf0e10cSrcweir //	public
306cdf0e10cSrcweir //	declaration of XTypeProvider
307cdf0e10cSrcweir //*****************************************************************************************************************
308cdf0e10cSrcweir #define FWK_DECLARE_XTYPEPROVIDER																																\
309cdf0e10cSrcweir 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >  SAL_CALL getTypes           () throw( ::com::sun::star::uno::RuntimeException );\
310cdf0e10cSrcweir 	virtual ::com::sun::star::uno::Sequence< sal_Int8 >						SAL_CALL getImplementationId() throw( ::com::sun::star::uno::RuntimeException );
311cdf0e10cSrcweir 
312cdf0e10cSrcweir //*****************************************************************************************************************
313cdf0e10cSrcweir //	public
314cdf0e10cSrcweir //	implementation of XTypeProvider
315cdf0e10cSrcweir //*****************************************************************************************************************
316cdf0e10cSrcweir //	implementation of XTypeProvider without additional interface for getTypes()
317*07a3d7f1SPedro Giffuni //	XTypeProvider is used as the only one interface automatically.
318*07a3d7f1SPedro Giffuni //	Following defines don't use XTypeProvider automatically!!!!
319cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_0( CLASS )																				\
320cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_PURE(	CLASS )
321cdf0e10cSrcweir 
322cdf0e10cSrcweir //	implementation of XTypeProvider with 1 additional interface for getTypes()
323cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_1( CLASS, TYPE1 )																		\
324cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,																		\
325cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_1	(	TYPE1											\
326cdf0e10cSrcweir 																))													\
327cdf0e10cSrcweir 									)
328cdf0e10cSrcweir 
329cdf0e10cSrcweir //	implementation of XTypeProvider with 2 additional interfaces for getTypes()
330cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_2( CLASS, TYPE1, TYPE2 )																\
331cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,																		\
332cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_2	(	TYPE1	,										\
333cdf0e10cSrcweir 																	TYPE2											\
334cdf0e10cSrcweir 																))                  								\
335cdf0e10cSrcweir 									)
336cdf0e10cSrcweir 
337cdf0e10cSrcweir //	implementation of XTypeProvider with 3 additional interfaces for getTypes()
338cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_3( CLASS, TYPE1, TYPE2, TYPE3 )														\
339cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,																		\
340cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_3	(	TYPE1	,										\
341cdf0e10cSrcweir 																	TYPE2	,										\
342cdf0e10cSrcweir 																	TYPE3											\
343cdf0e10cSrcweir 																))                  								\
344cdf0e10cSrcweir 									)
345cdf0e10cSrcweir 
346cdf0e10cSrcweir //	implementation of XTypeProvider with 4 additional interfaces for getTypes()
347cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_4( CLASS, TYPE1, TYPE2, TYPE3, TYPE4 )													\
348cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,																		\
349cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_4	(	TYPE1	,										\
350cdf0e10cSrcweir 																	TYPE2	,										\
351cdf0e10cSrcweir 																	TYPE3	,										\
352cdf0e10cSrcweir 																	TYPE4											\
353cdf0e10cSrcweir 																))                  								\
354cdf0e10cSrcweir 									)
355cdf0e10cSrcweir 
356cdf0e10cSrcweir //	implementation of XTypeProvider with 5 additional interfaces for getTypes()
357cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_5( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 )											\
358cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,																		\
359cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_5	(	TYPE1	,										\
360cdf0e10cSrcweir 																	TYPE2	,										\
361cdf0e10cSrcweir 																	TYPE3	,										\
362cdf0e10cSrcweir 																	TYPE4	,										\
363cdf0e10cSrcweir 																	TYPE5											\
364cdf0e10cSrcweir 																))                  								\
365cdf0e10cSrcweir 									)
366cdf0e10cSrcweir 
367cdf0e10cSrcweir //	implementation of XTypeProvider with 6 additional interfaces for getTypes()
368cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_6( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6 )									\
369cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,																		\
370cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_6	(	TYPE1	,										\
371cdf0e10cSrcweir 																	TYPE2	,										\
372cdf0e10cSrcweir 																	TYPE3	,										\
373cdf0e10cSrcweir 																	TYPE4	,										\
374cdf0e10cSrcweir 																	TYPE5	,										\
375cdf0e10cSrcweir 																	TYPE6    										\
376cdf0e10cSrcweir 																))                  								\
377cdf0e10cSrcweir 									)
378cdf0e10cSrcweir 
379cdf0e10cSrcweir //	implementation of XTypeProvider with 7 additional interfaces for getTypes()
380cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_7( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7 )							\
381cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,                               										\
382cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_7	(	TYPE1	,       								\
383cdf0e10cSrcweir 																	TYPE2	,       								\
384cdf0e10cSrcweir 																	TYPE3	,       								\
385cdf0e10cSrcweir 																	TYPE4	,       								\
386cdf0e10cSrcweir 																	TYPE5	,       								\
387cdf0e10cSrcweir 																	TYPE6	,       								\
388cdf0e10cSrcweir 																	TYPE7           								\
389cdf0e10cSrcweir 																))                  								\
390cdf0e10cSrcweir 									)
391cdf0e10cSrcweir 
392cdf0e10cSrcweir //	implementation of XTypeProvider with 8 additional interfaces for getTypes()
393cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_8( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8 )						\
394cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,                                      								\
395cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_8	(	TYPE1	,       								\
396cdf0e10cSrcweir 																	TYPE2	,       								\
397cdf0e10cSrcweir 																	TYPE3	,       								\
398cdf0e10cSrcweir 																	TYPE4	,       								\
399cdf0e10cSrcweir 																	TYPE5	,       								\
400cdf0e10cSrcweir 																	TYPE6	,       								\
401cdf0e10cSrcweir 																	TYPE7	,       								\
402cdf0e10cSrcweir 																	TYPE8           								\
403cdf0e10cSrcweir 																))                  								\
404cdf0e10cSrcweir 									)
405cdf0e10cSrcweir 
406cdf0e10cSrcweir //	implementation of XTypeProvider with 9 additional interfaces for getTypes()
407cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_9( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9 )				\
408cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,                                      								\
409cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_9	(	TYPE1	,       								\
410cdf0e10cSrcweir 																	TYPE2	,       								\
411cdf0e10cSrcweir 																	TYPE3	,       								\
412cdf0e10cSrcweir 																	TYPE4	,       								\
413cdf0e10cSrcweir 																	TYPE5	,       								\
414cdf0e10cSrcweir 																	TYPE6	,       								\
415cdf0e10cSrcweir 																	TYPE7	,       								\
416cdf0e10cSrcweir 																	TYPE8	,       								\
417cdf0e10cSrcweir 																	TYPE9           								\
418cdf0e10cSrcweir 																))                  								\
419cdf0e10cSrcweir 									)
420cdf0e10cSrcweir 
421cdf0e10cSrcweir //	implementation of XTypeProvider with 10 additional interfaces for getTypes()
422cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_10( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10 )		\
423cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,                                      								\
424cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_10	(	TYPE1	,       								\
425cdf0e10cSrcweir 																	TYPE2	,       								\
426cdf0e10cSrcweir 																	TYPE3	,       								\
427cdf0e10cSrcweir 																	TYPE4	,       								\
428cdf0e10cSrcweir 																	TYPE5	,       								\
429cdf0e10cSrcweir 																	TYPE6	,       								\
430cdf0e10cSrcweir 																	TYPE7	,       								\
431cdf0e10cSrcweir 																	TYPE8	,       								\
432cdf0e10cSrcweir 																	TYPE9	,       								\
433cdf0e10cSrcweir 																	TYPE10          								\
434cdf0e10cSrcweir 																))                  								\
435cdf0e10cSrcweir 									)
436cdf0e10cSrcweir 
437cdf0e10cSrcweir //	implementation of XTypeProvider with 11 additional interfaces for getTypes()
438cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_11( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 )	\
439cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,                                  										\
440cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_11	(	TYPE1	,   										\
441cdf0e10cSrcweir 																	TYPE2	,   										\
442cdf0e10cSrcweir 																	TYPE3	,   										\
443cdf0e10cSrcweir 																	TYPE4	,   										\
444cdf0e10cSrcweir 																	TYPE5	,   										\
445cdf0e10cSrcweir 																	TYPE6	,   										\
446cdf0e10cSrcweir 																	TYPE7	,   										\
447cdf0e10cSrcweir 																	TYPE8	,   										\
448cdf0e10cSrcweir 																	TYPE9	,   										\
449cdf0e10cSrcweir 																	TYPE10	,      										\
450cdf0e10cSrcweir 																	TYPE11												\
451cdf0e10cSrcweir 																))             											\
452cdf0e10cSrcweir 									)
453cdf0e10cSrcweir 
454cdf0e10cSrcweir //	implementation of XTypeProvider with 12 additional interfaces for getTypes()
455cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_12( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12 )	\
456cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER	(	CLASS,                                  												\
457cdf0e10cSrcweir 										(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   												\
458cdf0e10cSrcweir 																	TYPE2	,   												\
459cdf0e10cSrcweir 																	TYPE3	,   												\
460cdf0e10cSrcweir 																	TYPE4	,   												\
461cdf0e10cSrcweir 																	TYPE5	,   												\
462cdf0e10cSrcweir 																	TYPE6	,   												\
463cdf0e10cSrcweir 																	TYPE7	,   												\
464cdf0e10cSrcweir 																	TYPE8	,   												\
465cdf0e10cSrcweir 																	TYPE9	,   												\
466cdf0e10cSrcweir 																	TYPE10	,      												\
467cdf0e10cSrcweir 																	TYPE11	,													\
468cdf0e10cSrcweir 																	TYPE12														\
469cdf0e10cSrcweir 																))																\
470cdf0e10cSrcweir 									)
471cdf0e10cSrcweir 
472cdf0e10cSrcweir //	implementation of XTypeProvider with 13 additional interfaces for getTypes()
473cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_13( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13 )	\
474cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  													\
475cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   													\
476cdf0e10cSrcweir 																		TYPE2	,   													\
477cdf0e10cSrcweir 																		TYPE3	,   													\
478cdf0e10cSrcweir 																		TYPE4	,   													\
479cdf0e10cSrcweir 																		TYPE5	,   													\
480cdf0e10cSrcweir 																		TYPE6	,   													\
481cdf0e10cSrcweir 																		TYPE7	,   													\
482cdf0e10cSrcweir 																		TYPE8	,   													\
483cdf0e10cSrcweir 																		TYPE9	,   													\
484cdf0e10cSrcweir 																		TYPE10	,      													\
485cdf0e10cSrcweir 																		TYPE11	,														\
486cdf0e10cSrcweir 																		TYPE12															\
487cdf0e10cSrcweir 																	)),             													\
488cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_1	(	TYPE13															\
489cdf0e10cSrcweir 																	))																	\
490cdf0e10cSrcweir 										)
491cdf0e10cSrcweir 
492cdf0e10cSrcweir //	implementation of XTypeProvider with 14 additional interfaces for getTypes()
493cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_14( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14 )	\
494cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  															\
495cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   															\
496cdf0e10cSrcweir 																		TYPE2	,   															\
497cdf0e10cSrcweir 																		TYPE3	,   															\
498cdf0e10cSrcweir 																		TYPE4	,   															\
499cdf0e10cSrcweir 																		TYPE5	,   															\
500cdf0e10cSrcweir 																		TYPE6	,   															\
501cdf0e10cSrcweir 																		TYPE7	,   															\
502cdf0e10cSrcweir 																		TYPE8	,   															\
503cdf0e10cSrcweir 																		TYPE9	,   															\
504cdf0e10cSrcweir 																		TYPE10	,      															\
505cdf0e10cSrcweir 																		TYPE11	,																\
506cdf0e10cSrcweir 																		TYPE12																	\
507cdf0e10cSrcweir 																	)),             															\
508cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_2	(	TYPE13	,   															\
509cdf0e10cSrcweir 																		TYPE14																	\
510cdf0e10cSrcweir 																	))																			\
511cdf0e10cSrcweir 										)
512cdf0e10cSrcweir 
513cdf0e10cSrcweir //	implementation of XTypeProvider with 15 additional interfaces for getTypes()
514cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_15( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15 )	\
515cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  																	\
516cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   																	\
517cdf0e10cSrcweir 																		TYPE2	,   																	\
518cdf0e10cSrcweir 																		TYPE3	,   																	\
519cdf0e10cSrcweir 																		TYPE4	,   																	\
520cdf0e10cSrcweir 																		TYPE5	,   																	\
521cdf0e10cSrcweir 																		TYPE6	,   																	\
522cdf0e10cSrcweir 																		TYPE7	,   																	\
523cdf0e10cSrcweir 																		TYPE8	,   																	\
524cdf0e10cSrcweir 																		TYPE9	,   																	\
525cdf0e10cSrcweir 																		TYPE10	,      																	\
526cdf0e10cSrcweir 																		TYPE11	,																		\
527cdf0e10cSrcweir 																		TYPE12																			\
528cdf0e10cSrcweir 																	)),             																	\
529cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_3	(	TYPE13	,   																	\
530cdf0e10cSrcweir 																		TYPE14	,   																	\
531cdf0e10cSrcweir 																		TYPE15   																		\
532cdf0e10cSrcweir 																	))																					\
533cdf0e10cSrcweir 										)
534cdf0e10cSrcweir 
535cdf0e10cSrcweir //	implementation of XTypeProvider with 16 additional interfaces for getTypes()
536cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_16( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16 )	\
537cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  																			\
538cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   																			\
539cdf0e10cSrcweir 																		TYPE2	,   																			\
540cdf0e10cSrcweir 																		TYPE3	,   																			\
541cdf0e10cSrcweir 																		TYPE4	,   																			\
542cdf0e10cSrcweir 																		TYPE5	,   																			\
543cdf0e10cSrcweir 																		TYPE6	,   																			\
544cdf0e10cSrcweir 																		TYPE7	,   																			\
545cdf0e10cSrcweir 																		TYPE8	,   																			\
546cdf0e10cSrcweir 																		TYPE9	,   																			\
547cdf0e10cSrcweir 																		TYPE10	,      																			\
548cdf0e10cSrcweir 																		TYPE11	,																				\
549cdf0e10cSrcweir 																		TYPE12																					\
550cdf0e10cSrcweir 																	)),             																			\
551cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_4	(	TYPE13	,   																			\
552cdf0e10cSrcweir 																		TYPE14	,   																			\
553cdf0e10cSrcweir 																		TYPE15	,   																			\
554cdf0e10cSrcweir 																		TYPE16   																				\
555cdf0e10cSrcweir 																	))																							\
556cdf0e10cSrcweir 										)
557cdf0e10cSrcweir 
558cdf0e10cSrcweir //  implementation of XTypeProvider with 17 additional interfaces for getTypes()
559cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_17( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17 ) \
560cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  																			\
561cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   																			\
562cdf0e10cSrcweir 																		TYPE2	,   																			\
563cdf0e10cSrcweir 																		TYPE3	,   																			\
564cdf0e10cSrcweir 																		TYPE4	,   																			\
565cdf0e10cSrcweir 																		TYPE5	,   																			\
566cdf0e10cSrcweir 																		TYPE6	,   																			\
567cdf0e10cSrcweir 																		TYPE7	,   																			\
568cdf0e10cSrcweir 																		TYPE8	,   																			\
569cdf0e10cSrcweir 																		TYPE9	,   																			\
570cdf0e10cSrcweir 																		TYPE10	,      																			\
571cdf0e10cSrcweir 																		TYPE11	,																				\
572cdf0e10cSrcweir 																		TYPE12																					\
573cdf0e10cSrcweir 																	)),             																			\
574cdf0e10cSrcweir                                             (PRIVATE_DEFINE_TYPE_5  (   TYPE13  ,                                                                               \
575cdf0e10cSrcweir 																		TYPE14	,   																			\
576cdf0e10cSrcweir 																		TYPE15	,   																			\
577cdf0e10cSrcweir                                                                         TYPE16  ,                                                                               \
578cdf0e10cSrcweir                                                                         TYPE17                                                                                  \
579cdf0e10cSrcweir 																	))																							\
580cdf0e10cSrcweir 										)
581cdf0e10cSrcweir 
582cdf0e10cSrcweir //  implementation of XTypeProvider with 18 additional interfaces for getTypes()
583cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_18( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17, TYPE18 ) \
584cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  																			\
585cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   																			\
586cdf0e10cSrcweir 																		TYPE2	,   																			\
587cdf0e10cSrcweir 																		TYPE3	,   																			\
588cdf0e10cSrcweir 																		TYPE4	,   																			\
589cdf0e10cSrcweir 																		TYPE5	,   																			\
590cdf0e10cSrcweir 																		TYPE6	,   																			\
591cdf0e10cSrcweir 																		TYPE7	,   																			\
592cdf0e10cSrcweir 																		TYPE8	,   																			\
593cdf0e10cSrcweir 																		TYPE9	,   																			\
594cdf0e10cSrcweir 																		TYPE10	,      																			\
595cdf0e10cSrcweir 																		TYPE11	,																				\
596cdf0e10cSrcweir 																		TYPE12																					\
597cdf0e10cSrcweir 																	)),             																			\
598cdf0e10cSrcweir                                             (PRIVATE_DEFINE_TYPE_6  (   TYPE13  ,                                                                               \
599cdf0e10cSrcweir 																		TYPE14	,   																			\
600cdf0e10cSrcweir 																		TYPE15	,   																			\
601cdf0e10cSrcweir                                                                         TYPE16  ,                                                                               \
602cdf0e10cSrcweir                                                                         TYPE17  ,                                                                               \
603cdf0e10cSrcweir                                                                         TYPE18                                                                                  \
604cdf0e10cSrcweir 																	))																							\
605cdf0e10cSrcweir 										)
606cdf0e10cSrcweir 
607cdf0e10cSrcweir //  implementation of XTypeProvider with 19 additional interfaces for getTypes()
608cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_19( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17, TYPE18, TYPE19 ) \
609cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  																			\
610cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   																			\
611cdf0e10cSrcweir 																		TYPE2	,   																			\
612cdf0e10cSrcweir 																		TYPE3	,   																			\
613cdf0e10cSrcweir 																		TYPE4	,   																			\
614cdf0e10cSrcweir 																		TYPE5	,   																			\
615cdf0e10cSrcweir 																		TYPE6	,   																			\
616cdf0e10cSrcweir 																		TYPE7	,   																			\
617cdf0e10cSrcweir 																		TYPE8	,   																			\
618cdf0e10cSrcweir 																		TYPE9	,   																			\
619cdf0e10cSrcweir 																		TYPE10	,      																			\
620cdf0e10cSrcweir 																		TYPE11	,																				\
621cdf0e10cSrcweir 																		TYPE12																					\
622cdf0e10cSrcweir 																	)),             																			\
623cdf0e10cSrcweir                                             (PRIVATE_DEFINE_TYPE_7  (   TYPE13  ,                                                                               \
624cdf0e10cSrcweir 																		TYPE14	,   																			\
625cdf0e10cSrcweir 																		TYPE15	,   																			\
626cdf0e10cSrcweir                                                                         TYPE16  ,                                                                               \
627cdf0e10cSrcweir                                                                         TYPE17  ,                                                                               \
628cdf0e10cSrcweir                                                                         TYPE18  ,                                                                               \
629cdf0e10cSrcweir                                                                         TYPE19                                                                                  \
630cdf0e10cSrcweir 																	))																							\
631cdf0e10cSrcweir 										)
632cdf0e10cSrcweir 
633cdf0e10cSrcweir //  implementation of XTypeProvider with 20 additional interfaces for getTypes()
634cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_20( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17, TYPE18, TYPE19, TYPE20 ) \
635cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_LARGE	(	CLASS,                                  																			\
636cdf0e10cSrcweir 											(PRIVATE_DEFINE_TYPE_12	(	TYPE1	,   																			\
637cdf0e10cSrcweir 																		TYPE2	,   																			\
638cdf0e10cSrcweir 																		TYPE3	,   																			\
639cdf0e10cSrcweir 																		TYPE4	,   																			\
640cdf0e10cSrcweir 																		TYPE5	,   																			\
641cdf0e10cSrcweir 																		TYPE6	,   																			\
642cdf0e10cSrcweir 																		TYPE7	,   																			\
643cdf0e10cSrcweir 																		TYPE8	,   																			\
644cdf0e10cSrcweir 																		TYPE9	,   																			\
645cdf0e10cSrcweir 																		TYPE10	,      																			\
646cdf0e10cSrcweir 																		TYPE11	,																				\
647cdf0e10cSrcweir 																		TYPE12																					\
648cdf0e10cSrcweir 																	)),             																			\
649cdf0e10cSrcweir                                             (PRIVATE_DEFINE_TYPE_8  (   TYPE13  ,                                                                               \
650cdf0e10cSrcweir 																		TYPE14	,   																			\
651cdf0e10cSrcweir 																		TYPE15	,   																			\
652cdf0e10cSrcweir                                                                         TYPE16  ,                                                                               \
653cdf0e10cSrcweir                                                                         TYPE17  ,                                                                               \
654cdf0e10cSrcweir                                                                         TYPE18  ,                                                                               \
655cdf0e10cSrcweir                                                                         TYPE19  ,                                                                               \
656cdf0e10cSrcweir                                                                         TYPE20                                                                                  \
657cdf0e10cSrcweir 																	))																							\
658cdf0e10cSrcweir 										)
659cdf0e10cSrcweir 
660cdf0e10cSrcweir //	implementation of XTypeProvider with 1 additional interface for getTypes() AND using 1 baseclass
661cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_1_WITH_BASECLASS( CLASS, BASECLASS, TYPE1 )											\
662cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS	(	CLASS,																\
663cdf0e10cSrcweir 												BASECLASS,						 									\
664cdf0e10cSrcweir 												(PRIVATE_DEFINE_TYPE_1	(	TYPE1   								\
665cdf0e10cSrcweir 																		))											\
666cdf0e10cSrcweir 											)
667cdf0e10cSrcweir 
668cdf0e10cSrcweir //	implementation of XTypeProvider with 2 additional interface for getTypes() AND using 1 baseclass
669cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_2_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2 )										\
670cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS	(	CLASS,																\
671cdf0e10cSrcweir 												BASECLASS,						 									\
672cdf0e10cSrcweir 												(PRIVATE_DEFINE_TYPE_2	(	TYPE1	,   							\
673cdf0e10cSrcweir 																			TYPE2									\
674cdf0e10cSrcweir 																		))											\
675cdf0e10cSrcweir 											)
676cdf0e10cSrcweir 
677cdf0e10cSrcweir //	implementation of XTypeProvider with 3 additional interface for getTypes() AND using 1 baseclass
678cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_3_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2, TYPE3 )								\
679cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS	(	CLASS,																\
680cdf0e10cSrcweir 												BASECLASS,						 									\
681cdf0e10cSrcweir 												(PRIVATE_DEFINE_TYPE_3	(	TYPE1	,   							\
682cdf0e10cSrcweir 																			TYPE2	,   							\
683cdf0e10cSrcweir 																			TYPE3									\
684cdf0e10cSrcweir 																		))											\
685cdf0e10cSrcweir 											)
686cdf0e10cSrcweir //	implementation of XTypeProvider with 4 additional interface for getTypes() AND using 1 baseclass
687cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_4_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2, TYPE3, TYPE4 )						\
688cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS	(	CLASS,																\
689cdf0e10cSrcweir 												BASECLASS,						 									\
690cdf0e10cSrcweir 												(PRIVATE_DEFINE_TYPE_4	(	TYPE1	,   							\
691cdf0e10cSrcweir 																			TYPE2	,   							\
692cdf0e10cSrcweir 																			TYPE3	,   							\
693cdf0e10cSrcweir 																			TYPE4									\
694cdf0e10cSrcweir 																		))											\
695cdf0e10cSrcweir 											)
696cdf0e10cSrcweir //	implementation of XTypeProvider with 5 additional interface for getTypes() AND using 1 baseclass
697cdf0e10cSrcweir #define DEFINE_XTYPEPROVIDER_5_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 )				\
698cdf0e10cSrcweir 	PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS	(	CLASS,																\
699cdf0e10cSrcweir 												BASECLASS,						 									\
700cdf0e10cSrcweir 												(PRIVATE_DEFINE_TYPE_5	(	TYPE1	,   							\
701cdf0e10cSrcweir 																			TYPE2	,   							\
702cdf0e10cSrcweir 																			TYPE3	,   							\
703cdf0e10cSrcweir 																			TYPE4	,   							\
704cdf0e10cSrcweir 																			TYPE5									\
705cdf0e10cSrcweir 																		))											\
706cdf0e10cSrcweir 											)
707cdf0e10cSrcweir 
708cdf0e10cSrcweir }		//	namespace framework
709cdf0e10cSrcweir 
710cdf0e10cSrcweir #endif	//	#ifndef __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_
711