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