diff options
Diffstat (limited to 'framework/inc/macros/xtypeprovider.hxx')
-rw-r--r-- | framework/inc/macros/xtypeprovider.hxx | 714 |
1 files changed, 714 insertions, 0 deletions
diff --git a/framework/inc/macros/xtypeprovider.hxx b/framework/inc/macros/xtypeprovider.hxx new file mode 100644 index 000000000000..3e4decb3ac0f --- /dev/null +++ b/framework/inc/macros/xtypeprovider.hxx @@ -0,0 +1,714 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_ +#define __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_ + +//_________________________________________________________________________________________________________________ +// my own includes +//_________________________________________________________________________________________________________________ + +//_________________________________________________________________________________________________________________ +// interface includes +//_________________________________________________________________________________________________________________ + +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/uno/RuntimeException.hpp> + +//_________________________________________________________________________________________________________________ +// other includes +//_________________________________________________________________________________________________________________ +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/uno/Type.hxx> +#include <cppuhelper/typeprovider.hxx> +#include <osl/mutex.hxx> +#include <rtl/ustring.hxx> + +//_________________________________________________________________________________________________________________ +// namespace +//_________________________________________________________________________________________________________________ + +namespace framework{ + +/*_________________________________________________________________________________________________________________ + + macros for declaration and definition of XTypeProvider + Please use follow public macros only! + + 1) DEFINE_XTYPEPROVIDER => use it in header to declare XTypeProvider and his methods + 2) DECLARE_TYPEPROVIDER_0( CLASS ) => use it to define implementation of XTypeProvider for 0 supported type + DECLARE_TYPEPROVIDER_1( CLASS, TYPE1 ) => use it to define implementation of XTypeProvider for 1 supported type + ... + DECLARE_TYPEPROVIDER_16( CLASS, TYPE1, ... , TYPE16 ) + 3) DEFINE_XTYPEPROVIDER_1_WITH_BASECLASS( CLASS, BASECLASS, TYPE1 ) => use it to define implementation of XTypeProvider for 1 additional supported type to baseclass + ... + DEFINE_XTYPEPROVIDER_5_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, ..., TYPE5 ) + +_________________________________________________________________________________________________________________*/ + +//***************************************************************************************************************** +// private +// implementation of XTypeProvider::getImplementationId() +//***************************************************************************************************************** +#define PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \ + ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL CLASS::getImplementationId() throw( ::com::sun::star::uno::RuntimeException ) \ + { \ + /* Create one Id for all instances of this class. */ \ + /* Use ethernet address to do this! (sal_True) */ \ + /* Optimize this method */ \ + /* We initialize a static variable only one time. And we don't must use a mutex at every call! */ \ + /* For the first call; pID is NULL - for the second call pID is different from NULL! */ \ + static ::cppu::OImplementationId* pID = NULL ; \ + if ( pID == NULL ) \ + { \ + /* Ready for multithreading; get global mutex for first call of this method only! see before */ \ + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); \ + /* Control these pointer again ... it can be, that another instance will be faster then these! */ \ + if ( pID == NULL ) \ + { \ + /* Create a new static ID ... */ \ + static ::cppu::OImplementationId aID( sal_False ); \ + /* ... and set his address to static pointer! */ \ + pID = &aID ; \ + } \ + } \ + return pID->getImplementationId(); \ + } + +//***************************************************************************************************************** +// private +// implementation of XTypeProvider::getTypes() with max. 12 interfaces! +//***************************************************************************************************************** +#define PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES( CLASS, TYPES ) \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL CLASS::getTypes() throw( ::com::sun::star::uno::RuntimeException ) \ + { \ + /* Optimize this method ! */ \ + /* We initialize a static variable only one time. */ \ + /* And we don't must use a mutex at every call! */ \ + /* For the first call; pTypeCollection is NULL - */ \ + /* for the second call pTypeCollection is different from NULL! */ \ + static ::cppu::OTypeCollection* pTypeCollection = NULL ; \ + if ( pTypeCollection == NULL ) \ + { \ + /* Ready for multithreading; get global mutex for first call of this method only! see before */ \ + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); \ + /* Control these pointer again ... it can be, that another instance will be faster then these! */ \ + if ( pTypeCollection == NULL ) \ + { \ + /* Create a static typecollection ... */ \ + /* Attention: "TYPES" will expand to "(...)"! */ \ + static ::cppu::OTypeCollection aTypeCollection TYPES ; \ + /* ... and set his address to static pointer! */ \ + pTypeCollection = &aTypeCollection ; \ + } \ + } \ + return pTypeCollection->getTypes(); \ + } + +//***************************************************************************************************************** +// private +// implementation of XTypeProvider::getTypes() with more then 12 interfaces! +//***************************************************************************************************************** +#define PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_LARGE( CLASS, TYPES_FIRST, TYPES_SECOND ) \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL CLASS::getTypes() throw( ::com::sun::star::uno::RuntimeException ) \ + { \ + /* Optimize this method ! */ \ + /* We initialize a static variable only one time. */ \ + /* And we don't must use a mutex at every call! */ \ + /* For the first call; pTypeCollection is NULL - */ \ + /* for the second call pTypeCollection is different from NULL! */ \ + static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >* pTypeCollection = NULL ; \ + if ( pTypeCollection == NULL ) \ + { \ + /* Ready for multithreading; get global mutex for first call of this method only! see before */ \ + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); \ + /* Control these pointer again ... it can be, that another instance will be faster then these! */ \ + if ( pTypeCollection == NULL ) \ + { \ + /* Create two typecollections */ \ + /* (cppuhelper support 12 items per collection only!) */ \ + ::cppu::OTypeCollection aTypeCollection1 TYPES_FIRST ; \ + ::cppu::OTypeCollection aTypeCollection2 TYPES_SECOND ; \ + /* Copy all items from both sequences to one result list! */ \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > seqTypes1 = aTypeCollection1.getTypes(); \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > seqTypes2 = aTypeCollection2.getTypes(); \ + sal_Int32 nCount1 = seqTypes1.getLength(); \ + sal_Int32 nCount2 = seqTypes2.getLength(); \ + static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > seqResult ( nCount1+nCount2 ); \ + sal_Int32 nSource = 0; \ + sal_Int32 nDestination= 0; \ + while( nSource<nCount1 ) \ + { \ + seqResult[nDestination] = seqTypes1[nSource]; \ + ++nSource; \ + ++nDestination; \ + } \ + nSource = 0; \ + while( nSource<nCount2 ) \ + { \ + seqResult[nDestination] = seqTypes2[nSource]; \ + ++nSource; \ + ++nDestination; \ + } \ + /* ... and set his address to static pointer! */ \ + pTypeCollection = &seqResult; \ + } \ + } \ + return *pTypeCollection; \ + } + +//***************************************************************************************************************** +// private +// implementation of XTypeProvider::getTypes() with using max. 12 interfaces + baseclass! +//***************************************************************************************************************** +#define PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_BASECLASS( CLASS, BASECLASS, TYPES ) \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL CLASS::getTypes() throw( ::com::sun::star::uno::RuntimeException ) \ + { \ + /* Optimize this method ! */ \ + /* We initialize a static variable only one time. */ \ + /* And we don't must use a mutex at every call! */ \ + /* For the first call; pTypeCollection is NULL - */ \ + /* for the second call pTypeCollection is different from NULL! */ \ + static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >* pTypeCollection = NULL ; \ + if ( pTypeCollection == NULL ) \ + { \ + /* Ready for multithreading; get global mutex for first call of this method only! see before */ \ + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); \ + /* Control these pointer again ... it can be, that another instance will be faster then these! */ \ + if ( pTypeCollection == NULL ) \ + { \ + /* Create static typecollection for my own interfaces! */ \ + static ::cppu::OTypeCollection aTypeCollection TYPES ; \ + /* Copy all items from my list sequences and from my baseclass */ \ + /* to one result list! */ \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > seqTypes1 = aTypeCollection.getTypes(); \ + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > seqTypes2 = BASECLASS::getTypes(); \ + sal_Int32 nCount1 = seqTypes1.getLength(); \ + sal_Int32 nCount2 = seqTypes2.getLength(); \ + static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > seqResult ( nCount1+nCount2 ); \ + sal_Int32 nSource = 0; \ + sal_Int32 nDestination= 0; \ + while( nSource<nCount1 ) \ + { \ + seqResult[nDestination] = seqTypes1[nSource]; \ + ++nSource; \ + ++nDestination; \ + } \ + nSource = 0; \ + while( nSource<nCount2 ) \ + { \ + seqResult[nDestination] = seqTypes2[nSource]; \ + ++nSource; \ + ++nDestination; \ + } \ + /* ... and set his address to static pointer! */ \ + pTypeCollection = &seqResult; \ + } \ + } \ + return *pTypeCollection; \ + } + +//***************************************************************************************************************** +// private +// help macros to replace TYPES in getTypes() [see before] +//***************************************************************************************************************** +#define PRIVATE_DEFINE_TYPE_1( TYPE1 ) \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE1 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_2( TYPE1, TYPE2 ) \ + PRIVATE_DEFINE_TYPE_1( TYPE1 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE2 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_3( TYPE1, TYPE2, TYPE3 ) \ + PRIVATE_DEFINE_TYPE_2( TYPE1, TYPE2 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE3 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_4( TYPE1, TYPE2, TYPE3, TYPE4 ) \ + PRIVATE_DEFINE_TYPE_3( TYPE1, TYPE2, TYPE3 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE4 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_5( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 ) \ + PRIVATE_DEFINE_TYPE_4( TYPE1, TYPE2, TYPE3, TYPE4 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE5 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_6( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6 ) \ + PRIVATE_DEFINE_TYPE_5( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE6 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_7( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7 ) \ + PRIVATE_DEFINE_TYPE_6( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE7 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_8( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8 ) \ + PRIVATE_DEFINE_TYPE_7( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE8 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_9( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9 ) \ + PRIVATE_DEFINE_TYPE_8( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE9 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_10( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10 ) \ + PRIVATE_DEFINE_TYPE_9( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE10 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_11( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 ) \ + PRIVATE_DEFINE_TYPE_10( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE11 >*)NULL ) + +#define PRIVATE_DEFINE_TYPE_12( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12 ) \ + PRIVATE_DEFINE_TYPE_11( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 ), \ + ::getCppuType(( const ::com::sun::star::uno::Reference< TYPE12 >*)NULL ) + +//***************************************************************************************************************** +// private +// complete implementation of XTypeProvider +//***************************************************************************************************************** +#define PRIVATE_DEFINE_XTYPEPROVIDER_PURE( CLASS ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES( CLASS, ::getCppuType(( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider >*)NULL ) ) + +#define PRIVATE_DEFINE_XTYPEPROVIDER( CLASS, TYPES ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES( CLASS, TYPES ) + +#define PRIVATE_DEFINE_XTYPEPROVIDER_LARGE( CLASS, TYPES_FIRST, TYPES_SECOND ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_LARGE( CLASS, TYPES_FIRST, TYPES_SECOND ) + +#define PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS( CLASS, BASECLASS, TYPES ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_GETTYPES_BASECLASS( CLASS, BASECLASS, TYPES ) + +//***************************************************************************************************************** +// public +// declaration of XTypeProvider +//***************************************************************************************************************** +#define FWK_DECLARE_XTYPEPROVIDER \ + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes () throw( ::com::sun::star::uno::RuntimeException );\ + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw( ::com::sun::star::uno::RuntimeException ); + +//***************************************************************************************************************** +// public +// implementation of XTypeProvider +//***************************************************************************************************************** +// implementation of XTypeProvider without additional interface for getTypes() +// XTypeProvider is used as the only one interface automaticly. +// Following defines don't use XTypeProvider automaticly!!!! +#define DEFINE_XTYPEPROVIDER_0( CLASS ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_PURE( CLASS ) + +// implementation of XTypeProvider with 1 additional interface for getTypes() +#define DEFINE_XTYPEPROVIDER_1( CLASS, TYPE1 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_1 ( TYPE1 \ + )) \ + ) + +// implementation of XTypeProvider with 2 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_2( CLASS, TYPE1, TYPE2 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_2 ( TYPE1 , \ + TYPE2 \ + )) \ + ) + +// implementation of XTypeProvider with 3 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_3( CLASS, TYPE1, TYPE2, TYPE3 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_3 ( TYPE1 , \ + TYPE2 , \ + TYPE3 \ + )) \ + ) + +// implementation of XTypeProvider with 4 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_4( CLASS, TYPE1, TYPE2, TYPE3, TYPE4 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_4 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 \ + )) \ + ) + +// implementation of XTypeProvider with 5 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_5( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_5 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 \ + )) \ + ) + +// implementation of XTypeProvider with 6 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_6( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_6 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 \ + )) \ + ) + +// implementation of XTypeProvider with 7 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_7( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_7 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 \ + )) \ + ) + +// implementation of XTypeProvider with 8 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_8( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_8 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 \ + )) \ + ) + +// implementation of XTypeProvider with 9 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_9( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_9 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 \ + )) \ + ) + +// implementation of XTypeProvider with 10 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_10( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_10 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 \ + )) \ + ) + +// implementation of XTypeProvider with 11 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_11( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_11 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 \ + )) \ + ) + +// implementation of XTypeProvider with 12 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_12( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )) \ + ) + +// implementation of XTypeProvider with 13 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_13( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_1 ( TYPE13 \ + )) \ + ) + +// implementation of XTypeProvider with 14 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_14( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_2 ( TYPE13 , \ + TYPE14 \ + )) \ + ) + +// implementation of XTypeProvider with 15 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_15( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_3 ( TYPE13 , \ + TYPE14 , \ + TYPE15 \ + )) \ + ) + +// implementation of XTypeProvider with 16 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_16( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_4 ( TYPE13 , \ + TYPE14 , \ + TYPE15 , \ + TYPE16 \ + )) \ + ) + +// implementation of XTypeProvider with 17 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_17( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_5 ( TYPE13 , \ + TYPE14 , \ + TYPE15 , \ + TYPE16 , \ + TYPE17 \ + )) \ + ) + +// implementation of XTypeProvider with 18 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_18( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17, TYPE18 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_6 ( TYPE13 , \ + TYPE14 , \ + TYPE15 , \ + TYPE16 , \ + TYPE17 , \ + TYPE18 \ + )) \ + ) + +// implementation of XTypeProvider with 19 additional interfaces for getTypes() +#define DEFINE_XTYPEPROVIDER_19( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11, TYPE12, TYPE13, TYPE14, TYPE15, TYPE16, TYPE17, TYPE18, TYPE19 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_7 ( TYPE13 , \ + TYPE14 , \ + TYPE15 , \ + TYPE16 , \ + TYPE17 , \ + TYPE18 , \ + TYPE19 \ + )) \ + ) + +// implementation of XTypeProvider with 20 additional interfaces for getTypes() +#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 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_LARGE ( CLASS, \ + (PRIVATE_DEFINE_TYPE_12 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 , \ + TYPE6 , \ + TYPE7 , \ + TYPE8 , \ + TYPE9 , \ + TYPE10 , \ + TYPE11 , \ + TYPE12 \ + )), \ + (PRIVATE_DEFINE_TYPE_8 ( TYPE13 , \ + TYPE14 , \ + TYPE15 , \ + TYPE16 , \ + TYPE17 , \ + TYPE18 , \ + TYPE19 , \ + TYPE20 \ + )) \ + ) + +// implementation of XTypeProvider with 1 additional interface for getTypes() AND using 1 baseclass +#define DEFINE_XTYPEPROVIDER_1_WITH_BASECLASS( CLASS, BASECLASS, TYPE1 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS ( CLASS, \ + BASECLASS, \ + (PRIVATE_DEFINE_TYPE_1 ( TYPE1 \ + )) \ + ) + +// implementation of XTypeProvider with 2 additional interface for getTypes() AND using 1 baseclass +#define DEFINE_XTYPEPROVIDER_2_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS ( CLASS, \ + BASECLASS, \ + (PRIVATE_DEFINE_TYPE_2 ( TYPE1 , \ + TYPE2 \ + )) \ + ) + +// implementation of XTypeProvider with 3 additional interface for getTypes() AND using 1 baseclass +#define DEFINE_XTYPEPROVIDER_3_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2, TYPE3 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS ( CLASS, \ + BASECLASS, \ + (PRIVATE_DEFINE_TYPE_3 ( TYPE1 , \ + TYPE2 , \ + TYPE3 \ + )) \ + ) +// implementation of XTypeProvider with 4 additional interface for getTypes() AND using 1 baseclass +#define DEFINE_XTYPEPROVIDER_4_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2, TYPE3, TYPE4 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS ( CLASS, \ + BASECLASS, \ + (PRIVATE_DEFINE_TYPE_4 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 \ + )) \ + ) +// implementation of XTypeProvider with 5 additional interface for getTypes() AND using 1 baseclass +#define DEFINE_XTYPEPROVIDER_5_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5 ) \ + PRIVATE_DEFINE_XTYPEPROVIDER_BASECLASS ( CLASS, \ + BASECLASS, \ + (PRIVATE_DEFINE_TYPE_5 ( TYPE1 , \ + TYPE2 , \ + TYPE3 , \ + TYPE4 , \ + TYPE5 \ + )) \ + ) + +} // namespace framework + +#endif // #ifndef __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_ |