1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _CPPUHELPER_IMPLBASE_EX_POST_HXX_ 24*b1cdbd2cSJim Jagielski #define _CPPUHELPER_IMPLBASE_EX_POST_HXX_ 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski /** @internal */ 28*b1cdbd2cSJim Jagielski #define __DEF_CLASS_DATA_INIT_EX( N, class_cast ) \ 29*b1cdbd2cSJim Jagielski { \ 30*b1cdbd2cSJim Jagielski N +1, sal_False, sal_False, \ 31*b1cdbd2cSJim Jagielski { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, \ 32*b1cdbd2cSJim Jagielski { \ 33*b1cdbd2cSJim Jagielski __IFC_EX_TYPE_INIT##N( class_cast ), \ 34*b1cdbd2cSJim Jagielski __IFC_EX_TYPE_INIT_NAME( class_cast, ::com::sun::star::lang::XTypeProvider ) \ 35*b1cdbd2cSJim Jagielski } \ 36*b1cdbd2cSJim Jagielski } 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski /** @internal */ 39*b1cdbd2cSJim Jagielski #define __DEF_IMPLHELPER_EX( N ) \ 40*b1cdbd2cSJim Jagielski namespace cppu \ 41*b1cdbd2cSJim Jagielski { \ 42*b1cdbd2cSJim Jagielski struct class_data##N \ 43*b1cdbd2cSJim Jagielski { \ 44*b1cdbd2cSJim Jagielski sal_Int16 m_nTypes; \ 45*b1cdbd2cSJim Jagielski sal_Bool m_storedTypeRefs; \ 46*b1cdbd2cSJim Jagielski sal_Bool m_storedId; \ 47*b1cdbd2cSJim Jagielski sal_Int8 m_id[ 16 ]; \ 48*b1cdbd2cSJim Jagielski type_entry m_typeEntries[ N + 1 ]; \ 49*b1cdbd2cSJim Jagielski }; \ 50*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 51*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE ImplHelper##N \ 52*b1cdbd2cSJim Jagielski : public ::com::sun::star::lang::XTypeProvider \ 53*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 54*b1cdbd2cSJim Jagielski { \ 55*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 56*b1cdbd2cSJim Jagielski public: \ 57*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 58*b1cdbd2cSJim Jagielski { return ImplHelper_query( rType, (class_data *)&s_cd, this ); } \ 59*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 60*b1cdbd2cSJim Jagielski { return ImplHelper_getTypes( (class_data *)&s_cd ); } \ 61*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 62*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 63*b1cdbd2cSJim Jagielski }; \ 64*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 65*b1cdbd2cSJim Jagielski class_data##N ImplHelper##N< __IFC##N >::s_cd = \ 66*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (ImplHelper##N< __IFC##N > *) ); \ 67*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 68*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE WeakImplHelper##N \ 69*b1cdbd2cSJim Jagielski : public OWeakObject \ 70*b1cdbd2cSJim Jagielski , public ::com::sun::star::lang::XTypeProvider \ 71*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 72*b1cdbd2cSJim Jagielski { \ 73*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 74*b1cdbd2cSJim Jagielski public: \ 75*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 76*b1cdbd2cSJim Jagielski { return WeakImplHelper_query( rType, (class_data *)&s_cd, this, (OWeakObject *)this ); } \ 77*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () \ 78*b1cdbd2cSJim Jagielski { OWeakObject::acquire(); } \ 79*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () \ 80*b1cdbd2cSJim Jagielski { OWeakObject::release(); } \ 81*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 82*b1cdbd2cSJim Jagielski { return WeakImplHelper_getTypes( (class_data *)&s_cd ); } \ 83*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 84*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 85*b1cdbd2cSJim Jagielski }; \ 86*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 87*b1cdbd2cSJim Jagielski class_data##N WeakImplHelper##N< __IFC##N >::s_cd = \ 88*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (WeakImplHelper##N< __IFC##N > *) ); \ 89*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 90*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE WeakAggImplHelper##N \ 91*b1cdbd2cSJim Jagielski : public OWeakAggObject \ 92*b1cdbd2cSJim Jagielski , public ::com::sun::star::lang::XTypeProvider \ 93*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 94*b1cdbd2cSJim Jagielski { \ 95*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 96*b1cdbd2cSJim Jagielski public: \ 97*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 98*b1cdbd2cSJim Jagielski { return OWeakAggObject::queryInterface( rType ); } \ 99*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 100*b1cdbd2cSJim Jagielski { return WeakAggImplHelper_queryAgg( rType, (class_data *)&s_cd, this, (OWeakAggObject *)this ); } \ 101*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () \ 102*b1cdbd2cSJim Jagielski { OWeakAggObject::acquire(); } \ 103*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () \ 104*b1cdbd2cSJim Jagielski { OWeakAggObject::release(); } \ 105*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 106*b1cdbd2cSJim Jagielski { return WeakAggImplHelper_getTypes( (class_data *)&s_cd ); } \ 107*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 108*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 109*b1cdbd2cSJim Jagielski }; \ 110*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 111*b1cdbd2cSJim Jagielski class_data##N WeakAggImplHelper##N< __IFC##N >::s_cd = \ 112*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (WeakAggImplHelper##N< __IFC##N > *) ); \ 113*b1cdbd2cSJim Jagielski template< class BaseClass, __CLASS_IFC##N > \ 114*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE ImplInheritanceHelper##N \ 115*b1cdbd2cSJim Jagielski : public BaseClass \ 116*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 117*b1cdbd2cSJim Jagielski { \ 118*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 119*b1cdbd2cSJim Jagielski public: \ 120*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 121*b1cdbd2cSJim Jagielski { \ 122*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any aRet( ImplHelper_queryNoXInterface( rType, (class_data *)&s_cd, this ) ); \ 123*b1cdbd2cSJim Jagielski if (aRet.hasValue()) \ 124*b1cdbd2cSJim Jagielski return aRet; \ 125*b1cdbd2cSJim Jagielski return BaseClass::queryInterface( rType ); \ 126*b1cdbd2cSJim Jagielski } \ 127*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () \ 128*b1cdbd2cSJim Jagielski { BaseClass::acquire(); } \ 129*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () \ 130*b1cdbd2cSJim Jagielski { BaseClass::release(); } \ 131*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 132*b1cdbd2cSJim Jagielski { return ImplInhHelper_getTypes( (class_data *)&s_cd, BaseClass::getTypes() ); } \ 133*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 134*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 135*b1cdbd2cSJim Jagielski }; \ 136*b1cdbd2cSJim Jagielski template< class BaseClass, __CLASS_IFC##N > \ 137*b1cdbd2cSJim Jagielski class_data##N ImplInheritanceHelper##N< BaseClass, __IFC##N >::s_cd = \ 138*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (ImplInheritanceHelper##N< BaseClass, __IFC##N > *) ); \ 139*b1cdbd2cSJim Jagielski template< class BaseClass, __CLASS_IFC##N > \ 140*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE AggImplInheritanceHelper##N \ 141*b1cdbd2cSJim Jagielski : public BaseClass \ 142*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 143*b1cdbd2cSJim Jagielski { \ 144*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 145*b1cdbd2cSJim Jagielski public: \ 146*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 147*b1cdbd2cSJim Jagielski { return BaseClass::queryInterface( rType ); } \ 148*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 149*b1cdbd2cSJim Jagielski { \ 150*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any aRet( ImplHelper_queryNoXInterface( rType, (class_data *)&s_cd, this ) ); \ 151*b1cdbd2cSJim Jagielski if (aRet.hasValue()) \ 152*b1cdbd2cSJim Jagielski return aRet; \ 153*b1cdbd2cSJim Jagielski return BaseClass::queryAggregation( rType ); \ 154*b1cdbd2cSJim Jagielski } \ 155*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () \ 156*b1cdbd2cSJim Jagielski { BaseClass::acquire(); } \ 157*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () \ 158*b1cdbd2cSJim Jagielski { BaseClass::release(); } \ 159*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 160*b1cdbd2cSJim Jagielski { return ImplInhHelper_getTypes( (class_data *)&s_cd, BaseClass::getTypes() ); } \ 161*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 162*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 163*b1cdbd2cSJim Jagielski }; \ 164*b1cdbd2cSJim Jagielski template< class BaseClass, __CLASS_IFC##N > \ 165*b1cdbd2cSJim Jagielski class_data##N AggImplInheritanceHelper##N< BaseClass, __IFC##N >::s_cd = \ 166*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (AggImplInheritanceHelper##N< BaseClass, __IFC##N > *) ); \ 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski /** @internal */ 170*b1cdbd2cSJim Jagielski #define __DEF_COMPIMPLHELPER_EX( N ) \ 171*b1cdbd2cSJim Jagielski namespace cppu \ 172*b1cdbd2cSJim Jagielski { \ 173*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 174*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE WeakComponentImplHelper##N \ 175*b1cdbd2cSJim Jagielski : public WeakComponentImplHelperBase \ 176*b1cdbd2cSJim Jagielski , public ::com::sun::star::lang::XTypeProvider \ 177*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 178*b1cdbd2cSJim Jagielski { \ 179*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 180*b1cdbd2cSJim Jagielski public: \ 181*b1cdbd2cSJim Jagielski inline WeakComponentImplHelper##N( ::osl::Mutex & rMutex ) SAL_THROW( () ) \ 182*b1cdbd2cSJim Jagielski : WeakComponentImplHelperBase( rMutex ) \ 183*b1cdbd2cSJim Jagielski {} \ 184*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 185*b1cdbd2cSJim Jagielski { return WeakComponentImplHelper_query( rType, (class_data *)&s_cd, this, (WeakComponentImplHelperBase *)this ); } \ 186*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () \ 187*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::acquire(); } \ 188*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () \ 189*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::release(); } \ 190*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 191*b1cdbd2cSJim Jagielski { return WeakComponentImplHelper_getTypes( (class_data *)&s_cd ); } \ 192*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 193*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 194*b1cdbd2cSJim Jagielski }; \ 195*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 196*b1cdbd2cSJim Jagielski class_data##N WeakComponentImplHelper##N< __IFC##N >::s_cd = \ 197*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (WeakComponentImplHelper##N< __IFC##N > *) ); \ 198*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 199*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE WeakAggComponentImplHelper##N \ 200*b1cdbd2cSJim Jagielski : public WeakAggComponentImplHelperBase \ 201*b1cdbd2cSJim Jagielski , public ::com::sun::star::lang::XTypeProvider \ 202*b1cdbd2cSJim Jagielski , __PUBLIC_IFC##N \ 203*b1cdbd2cSJim Jagielski { \ 204*b1cdbd2cSJim Jagielski static class_data##N s_cd; \ 205*b1cdbd2cSJim Jagielski public: \ 206*b1cdbd2cSJim Jagielski inline WeakAggComponentImplHelper##N( ::osl::Mutex & rMutex ) SAL_THROW( () ) \ 207*b1cdbd2cSJim Jagielski : WeakAggComponentImplHelperBase( rMutex ) \ 208*b1cdbd2cSJim Jagielski {} \ 209*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 210*b1cdbd2cSJim Jagielski { return WeakAggComponentImplHelperBase::queryInterface( rType ); } \ 211*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) \ 212*b1cdbd2cSJim Jagielski { return WeakAggComponentImplHelper_queryAgg( rType, (class_data *)&s_cd, this, (WeakAggComponentImplHelperBase *)this ); } \ 213*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () \ 214*b1cdbd2cSJim Jagielski { WeakAggComponentImplHelperBase::acquire(); } \ 215*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () \ 216*b1cdbd2cSJim Jagielski { WeakAggComponentImplHelperBase::release(); } \ 217*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) \ 218*b1cdbd2cSJim Jagielski { return WeakAggComponentImplHelper_getTypes( (class_data *)&s_cd ); } \ 219*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) \ 220*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( (class_data *)&s_cd ); } \ 221*b1cdbd2cSJim Jagielski }; \ 222*b1cdbd2cSJim Jagielski template< __CLASS_IFC##N > \ 223*b1cdbd2cSJim Jagielski class_data##N WeakAggComponentImplHelper##N< __IFC##N >::s_cd = \ 224*b1cdbd2cSJim Jagielski __DEF_CLASS_DATA_INIT_EX( N, (WeakAggComponentImplHelper##N< __IFC##N > *) ); \ 225*b1cdbd2cSJim Jagielski } 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski #endif 228