xref: /trunk/main/dbaccess/source/inc/apitools.hxx (revision 2e2212a7)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _DBASHARED_APITOOLS_HXX_
25 #define _DBASHARED_APITOOLS_HXX_
26 
27 #ifndef _CPPUHELPER_COMPONENT_HXX_
28 #include <cppuhelper/component.hxx>
29 #endif
30 #ifndef _OSL_MUTEX_HXX_
31 #include <osl/mutex.hxx>
32 #endif
33 #ifndef _CPPUHELPER_INTERFACECONTAINER_HXX_
34 #include <cppuhelper/interfacecontainer.hxx>
35 #endif
36 #ifndef _OSL_DIAGNOSE_H_
37 #include <osl/diagnose.h>
38 #endif
39 #ifndef _COMPHELPER_STLTYPES_HXX_
40 #include <comphelper/stl_types.hxx>
41 #endif
42 #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
43 #include <cppuhelper/typeprovider.hxx>
44 #endif
45 #ifndef _COMPHELPER_SEQUENCE_HXX_
46 #include <comphelper/sequence.hxx>
47 #endif
48 
49 //==================================================================================
50 //= various typedefs
51 //==================================================================================
52 DECLARE_STL_VECTOR(::com::sun::star::uno::WeakReferenceHelper, OWeakRefArray);
53 
54 //==================================================================================
55 //= OSubComponent - a component which holds a hard ref to it's parent
56 //=					and is been hold itself (by the parent) with a weak ref
57 //==================================================================================
58 class OSubComponent : public ::cppu::OComponentHelper
59 {
60 protected:
61 	// the parent must support the tunnel implementation
62 	::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > m_xParent;
63 	virtual ~OSubComponent();
64 
65 public:
66 	OSubComponent(::osl::Mutex& _rMutex,
67 				  const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xParent);
68 
69 // ::com::sun::star::lang::XTypeProvider
70 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
71 
72 // ::com::sun::star::uno::XInterface
73 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType )
74 			throw(::com::sun::star::uno::RuntimeException);
75 	virtual void SAL_CALL acquire() throw();
76 	virtual void SAL_CALL release() throw();
77 
operator ::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface>() const78 	inline operator ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > () const
79 		{ return (::com::sun::star::uno::XWeak *)this; }
80 
81 };
82 
83 //==================================================================================
84 //= helper for implementing the XServiceInfo interface
85 
86 //----------------------------------------------------------------------------------
87 // (internal - not to be used outside - usually)
88 #define IMPLEMENT_SERVICE_INFO_IMPLNAME(classname, implasciiname)	\
89 	::rtl::OUString SAL_CALL classname::getImplementationName(  ) throw (::com::sun::star::uno::RuntimeException)	\
90 	{	\
91 		return ::rtl::OUString::createFromAscii(implasciiname);	\
92 	}	\
93 
94 #define IMPLEMENT_SERVICE_INFO_IMPLNAME_STATIC(classname, implasciiname)	\
95 	::rtl::OUString SAL_CALL classname::getImplementationName(  ) throw (::com::sun::star::uno::RuntimeException)	\
96 	{	\
97 		return getImplementationName_Static();	\
98 	}	\
99 	::rtl::OUString SAL_CALL classname::getImplementationName_Static(  ) throw (::com::sun::star::uno::RuntimeException)	\
100 	{	\
101 		return ::rtl::OUString::createFromAscii(implasciiname);	\
102 	}	\
103 
104 #define IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
105     sal_Bool SAL_CALL classname::supportsService( const ::rtl::OUString& _rServiceName ) throw(::com::sun::star::uno::RuntimeException)	\
106 	{	\
107 		::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames());	\
108 		const ::rtl::OUString* pSupported = aSupported.getConstArray();	\
109 		for (sal_Int32 i=0; i<aSupported.getLength(); ++i, ++pSupported)	\
110 			if (pSupported->equals(_rServiceName))	\
111 				return sal_True;	\
112 	\
113 		return sal_False;	\
114 	}	\
115 
116 #define IMPLEMENT_SERVICE_INFO_GETSUPPORTED1(classname, serviceasciiname)	\
117     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
118 	{	\
119 		::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(1);	\
120 		aSupported[0] = ::rtl::OUString::createFromAscii(serviceasciiname);	\
121 		return aSupported;	\
122 	}	\
123 
124 #define IMPLEMENT_SERVICE_INFO_GETSUPPORTED1_STATIC(classname, serviceasciiname)	\
125     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
126 	{	\
127 		return getSupportedServiceNames_Static();	\
128 	}	\
129     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames_Static(  ) throw(::com::sun::star::uno::RuntimeException)	\
130 	{	\
131 		::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(1);	\
132 		aSupported[0] = ::rtl::OUString::createFromAscii(serviceasciiname);	\
133 		return aSupported;	\
134 	}	\
135 
136 #define IMPLEMENT_SERVICE_INFO_GETSUPPORTED2_STATIC(classname, serviceasciiname1, serviceasciiname2)	\
137     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
138 	{	\
139 		return getSupportedServiceNames_Static();	\
140 	}	\
141     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames_Static(  ) throw(::com::sun::star::uno::RuntimeException)	\
142 	{	\
143 		::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(2);	\
144 		aSupported[0] = ::rtl::OUString::createFromAscii(serviceasciiname1);	\
145 		aSupported[1] = ::rtl::OUString::createFromAscii(serviceasciiname2);	\
146 		return aSupported;	\
147 	}	\
148 
149 #define IMPLEMENT_SERVICE_INFO_GETSUPPORTED2(classname, serviceasciiname1, serviceasciiname2)	\
150     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
151 	{	\
152 		::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(2);	\
153 		aSupported[0] = ::rtl::OUString::createFromAscii(serviceasciiname1);	\
154 		aSupported[1] = ::rtl::OUString::createFromAscii(serviceasciiname2);	\
155 		return aSupported;	\
156 	}	\
157 
158 #define IMPLEMENT_SERVICE_INFO_GETSUPPORTED3(classname, serviceasciiname1, serviceasciiname2, serviceasciiname3)	\
159     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
160 	{	\
161 		::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(3);	\
162 		aSupported[0] = ::rtl::OUString::createFromAscii(serviceasciiname1);	\
163 		aSupported[1] = ::rtl::OUString::createFromAscii(serviceasciiname2);	\
164 		aSupported[2] = ::rtl::OUString::createFromAscii(serviceasciiname3);	\
165 		return aSupported;	\
166 	}	\
167 
168 #define IMPLEMENT_SERVICE_INFO_CREATE_STATIC(classname)	\
169 	::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >	\
170 		SAL_CALL classname::Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB)	\
171 	{	\
172 		return static_cast< XServiceInfo* >(new classname(_rxORB));	\
173 	}	\
174 
175 //----------------------------------------------------------------------------------
176 // declare service info methods - no getImplementationName, so the class is abstract
177 #define DECLARE_SERVICE_INFO_ABSTRACT()	\
178     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);	\
179     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
180 
181 //----------------------------------------------------------------------------------
182 // declare service info methods
183 #define DECLARE_SERVICE_INFO()	\
184 	virtual ::rtl::OUString SAL_CALL getImplementationName(  ) throw (::com::sun::star::uno::RuntimeException);	\
185     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);	\
186     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)	\
187 
188 #define DECLARE_SERVICE_INFO_STATIC()	\
189 	DECLARE_SERVICE_INFO();	\
190 	static ::rtl::OUString SAL_CALL getImplementationName_Static(  ) throw (::com::sun::star::uno::RuntimeException);	\
191     static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(  ) throw(::com::sun::star::uno::RuntimeException);	\
192 	static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >	\
193 		SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&)	\
194 
195 //----------------------------------------------------------------------------------
196 #define IMPLEMENT_SERVICE_INFO1(classname, implasciiname, serviceasciiname)	\
197 	IMPLEMENT_SERVICE_INFO_IMPLNAME(classname, implasciiname)	\
198 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
199 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED1(classname, serviceasciiname)	\
200 
201 //----------------------------------------------------------------------------------
202 #define IMPLEMENT_SERVICE_INFO1_STATIC(classname, implasciiname, serviceasciiname)	\
203 	IMPLEMENT_SERVICE_INFO_IMPLNAME_STATIC(classname, implasciiname)	\
204 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
205 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED1_STATIC(classname, serviceasciiname)	\
206 	IMPLEMENT_SERVICE_INFO_CREATE_STATIC(classname)	\
207 
208 //----------------------------------------------------------------------------------
209 #define IMPLEMENT_SERVICE_INFO2(classname, implasciiname, serviceasciiname1, serviceasciiname2)	\
210 	IMPLEMENT_SERVICE_INFO_IMPLNAME(classname, implasciiname)	\
211 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
212 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED2(classname, serviceasciiname1, serviceasciiname2)
213 
214 //----------------------------------------------------------------------------------
215 #define IMPLEMENT_SERVICE_INFO2_STATIC(classname, implasciiname, serviceasciiname1, serviceasciiname2)	\
216 	IMPLEMENT_SERVICE_INFO_IMPLNAME_STATIC(classname, implasciiname)	\
217 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
218 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED2_STATIC(classname, serviceasciiname1,serviceasciiname2)	\
219 	IMPLEMENT_SERVICE_INFO_CREATE_STATIC(classname)	\
220 
221 //----------------------------------------------------------------------------------
222 #define IMPLEMENT_SERVICE_INFO3(classname, implasciiname, serviceasciiname1, serviceasciiname2, serviceasciiname3)	\
223 	IMPLEMENT_SERVICE_INFO_IMPLNAME(classname, implasciiname)	\
224 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
225 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED3(classname, serviceasciiname1, serviceasciiname2, serviceasciiname3)	\
226 
227 //----------------------------------------------------------------------------------
228 #define IMPLEMENT_SERVICE_INFO1_ABSTRACT(classname, serviceasciiname)	\
229 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
230 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED1(classname, serviceasciiname)	\
231 
232 //----------------------------------------------------------------------------------
233 #define IMPLEMENT_SERVICE_INFO2_ABSTRACT(classname, serviceasciiname1, serviceasciiname2)	\
234 	IMPLEMENT_SERVICE_INFO_SUPPORTS(classname)	\
235 	IMPLEMENT_SERVICE_INFO_GETSUPPORTED2(classname, serviceasciiname1, serviceasciiname2)	\
236 
237 //==================================================================================
238 //= XTypeProvider helpers
239 
240 //--------------------------------------------------------------------------
241 #define DECLARE_IMPLEMENTATION_ID( )	\
242 	virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId(  ) throw(::com::sun::star::uno::RuntimeException);  \
243 	static ::com::sun::star::uno::Sequence< sal_Int8 >	getUnoTunnelImplementationId() \
244 
245 //--------------------------------------------------------------------------
246 #define DECLARE_GETTYPES( )	\
247     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw (::com::sun::star::uno::RuntimeException);
248 
249 //--------------------------------------------------------------------------
250 #define DECLARE_TYPEPROVIDER( )	\
251 	DECLARE_GETTYPES( )	\
252 	DECLARE_IMPLEMENTATION_ID( )
253 
254 //--------------------------------------------------------------------------
255 #define IMPLEMENT_IMPLEMENTATION_ID( classname )	\
256 ::com::sun::star::uno::Sequence< sal_Int8 >	classname::getUnoTunnelImplementationId() \
257 {	\
258 	static ::cppu::OImplementationId* pId = 0;	\
259 	if ( !pId )	\
260 	{	\
261 		::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );	\
262 		if ( !pId )	\
263 		{	\
264 			static ::cppu::OImplementationId aId;	\
265 			pId = &aId;	\
266 		}	\
267 	}	\
268 	return pId->getImplementationId();	\
269 } \
270 ::com::sun::star::uno::Sequence< sal_Int8 > classname::getImplementationId() throw (::com::sun::star::uno::RuntimeException)	\
271 {	\
272 	return classname::getUnoTunnelImplementationId(); \
273 }
274 
275 //--------------------------------------------------------------------------
276 #define IMPLEMENT_GETTYPES2( classname, baseclass1, baseclass2 )	\
277 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > classname::getTypes() throw (::com::sun::star::uno::RuntimeException)	\
278 	{	\
279 		return	::comphelper::concatSequences(	\
280 			baseclass1::getTypes( ),	\
281 			baseclass2::getTypes( )	\
282 		);	\
283 	}
284 
285 //--------------------------------------------------------------------------
286 #define IMPLEMENT_GETTYPES3( classname, baseclass1, baseclass2, baseclass3 )	\
287 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > classname::getTypes() throw (::com::sun::star::uno::RuntimeException)	\
288 	{	\
289 		return	::comphelper::concatSequences(	\
290 			baseclass1::getTypes( ),	\
291 			baseclass2::getTypes( ),	\
292 			baseclass3::getTypes( )	\
293 		);	\
294 	}
295 
296 //--------------------------------------------------------------------------
297 #define IMPLEMENT_TYPEPROVIDER2( classname, baseclass1, baseclass2 )	\
298 	IMPLEMENT_IMPLEMENTATION_ID( classname)	\
299 	IMPLEMENT_GETTYPES2( classname, baseclass1, baseclass2 )
300 
301 //--------------------------------------------------------------------------
302 #define IMPLEMENT_TYPEPROVIDER3( classname, baseclass1, baseclass2, baseclass3 )	\
303 	IMPLEMENT_IMPLEMENTATION_ID( classname)	\
304 	IMPLEMENT_GETTYPES3(classname, baseclass1, baseclass2, baseclass3 )
305 
306 //==================================================================================
307 //= helper for declaring/implementing classes based on the OPropertyContainer and an OPropertyArrayUsageHelper
308 //----------------------------------------------------------------------------------
309 #define DECLARE_PROPERTYCONTAINER_DEFAULTS( )	\
310 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo>  SAL_CALL getPropertySetInfo() throw(::com::sun::star::uno::RuntimeException);	\
311 	virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();	\
312 	virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const
313 
314 //----------------------------------------------------------------------------------
315 #define IMPLEMENT_PROPERTYCONTAINER_DEFAULTS2( classname , baseclass1)	\
316 	::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >  SAL_CALL classname::getPropertySetInfo() throw(::com::sun::star::uno::RuntimeException)	\
317 	{	\
318 		Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );	\
319 		return xInfo;	\
320 	}	\
321 	::cppu::IPropertyArrayHelper& classname::getInfoHelper()	\
322 	{	\
323 	return *baseclass1::getArrayHelper();	\
324 	}	\
325 	::cppu::IPropertyArrayHelper* classname::createArrayHelper( ) const	\
326 	{	\
327 		::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > aProps;	\
328 		describeProperties(aProps);	\
329 		return new ::cppu::OPropertyArrayHelper(aProps);	\
330 	}
331 //----------------------------------------------------------------------------------
332 #define IMPLEMENT_PROPERTYCONTAINER_DEFAULTS( classname )	\
333 	IMPLEMENT_PROPERTYCONTAINER_DEFAULTS2( classname, classname )
334 
335 //==================================================================================
336 //= helper for implementing the createArrayHelper
337 //----------------------------------------------------------------------------------
338 #define BEGIN_PROPERTY_SEQUENCE(count)	\
339 	::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property> aDescriptor(count);	\
340 	::com::sun::star::beans::Property* pDesc = aDescriptor.getArray();					\
341 	sal_Int32 nPos = 0;												\
342 
343 //----------------------------------------------------------------------------------
344 #define BEGIN_PROPERTY_HELPER(count)							\
345 	BEGIN_PROPERTY_SEQUENCE(count)
346 
347 //----------------------------------------------------------------------------------
348 #define DECL_PROP_IMPL(varname, cpputype) \
349 	pDesc[nPos++] = ::com::sun::star::beans::Property(PROPERTY_##varname, PROPERTY_ID_##varname, cpputype,
350 
351 //----------------------------------------------------------------------------------
352 #define DECL_PROP0(varname, type)	\
353 	DECL_PROP_IMPL(varname, ::getCppuType((const type *)0)) 0)
354 //----------------------------------------------------------------------------------
355 #define DECL_PROP0_BOOL(varname)	\
356 	DECL_PROP_IMPL(varname, ::getBooleanCppuType()) 0)
357 //----------------------------------------------------------------------------------
358 #define DECL_PROP0_IFACE(varname, iface)	\
359 	DECL_PROP_IMPL(varname, ::getCppuType(static_cast< ::com::sun::star::uno::Reference< iface >* >(NULL))) 0)
360 
361 //----------------------------------------------------------------------------------
362 #define DECL_PROP1(varname, type, attrib1)	\
363 	DECL_PROP_IMPL(varname, ::getCppuType((const type *)0)) ::com::sun::star::beans::PropertyAttribute::attrib1)
364 //----------------------------------------------------------------------------------
365 #define DECL_PROP1_BOOL(varname, attrib1)	\
366 	DECL_PROP_IMPL(varname, ::getBooleanCppuType()) ::com::sun::star::beans::PropertyAttribute::attrib1)
367 //----------------------------------------------------------------------------------
368 #define DECL_PROP1_IFACE(varname, iface, attrib1)	\
369 	DECL_PROP_IMPL(varname, ::getCppuType(static_cast< ::com::sun::star::uno::Reference< iface >* >(NULL))) ::com::sun::star::beans::PropertyAttribute::attrib1)
370 //----------------------------------------------------------------------------------
371 #define DECL_PROP2_IFACE(varname, iface, attrib1, attrib2)	\
372 	DECL_PROP_IMPL(varname, ::getCppuType(static_cast< ::com::sun::star::uno::Reference< iface >* >(NULL))) ::com::sun::star::beans::PropertyAttribute::attrib1 | ::com::sun::star::beans::PropertyAttribute::attrib2)
373 
374 //----------------------------------------------------------------------------------
375 #define DECL_PROP2(varname, type, attrib1, attrib2)	\
376 	DECL_PROP_IMPL(varname, ::getCppuType((const type *)0)) ::com::sun::star::beans::PropertyAttribute::attrib1 | ::com::sun::star::beans::PropertyAttribute::attrib2)
377 //----------------------------------------------------------------------------------
378 #define DECL_PROP2_BOOL(varname, attrib1, attrib2)	\
379 	DECL_PROP_IMPL(varname, ::getBooleanCppuType()) ::com::sun::star::beans::PropertyAttribute::attrib1 | ::com::sun::star::beans::PropertyAttribute::attrib2)
380 
381 //----------------------------------------------------------------------------------
382 #define DECL_PROP3(varname, type, attrib1, attrib2, attrib3)	\
383 	DECL_PROP_IMPL(varname, ::getCppuType((const type *)0)) ::com::sun::star::beans::PropertyAttribute::attrib1 | ::com::sun::star::beans::PropertyAttribute::attrib2 | ::com::sun::star::beans::PropertyAttribute::attrib3)
384 //----------------------------------------------------------------------------------
385 #define DECL_PROP3_BOOL(varname, attrib1, attrib2, attrib3)	\
386 	DECL_PROP_IMPL(varname, ::getBooleanCppuType()) ::com::sun::star::beans::PropertyAttribute::attrib1 | ::com::sun::star::beans::PropertyAttribute::attrib2 | ::com::sun::star::beans::PropertyAttribute::attrib3)
387 
388 
389 //----------------------------------------------------------------------------------
390 #define END_PROPERTY_SEQUENCE()								\
391 	OSL_ENSURE(nPos == aDescriptor.getLength(), "forgot to adjust the count ?");	\
392 
393 //----------------------------------------------------------------------------------
394 #define END_PROPERTY_HELPER()								\
395 	END_PROPERTY_SEQUENCE()	\
396 	return new ::cppu::OPropertyArrayHelper(aDescriptor);
397 
398 
399 #define NOTIFY_LISTERNERS(_rListeners,T,method)									  \
400 	Sequence< Reference< XInterface > > aListenerSeq = _rListeners.getElements(); \
401 																				  \
402 	const Reference< XInterface >* pxIntBegin = aListenerSeq.getConstArray();	  \
403 	const Reference< XInterface >* pxInt = pxIntBegin + aListenerSeq.getLength(); \
404 																				  \
405 	_rGuard.clear();															  \
406 	while( pxInt > pxIntBegin )													  \
407 	{																			  \
408 		try																		  \
409 		{																		  \
410 			while( pxInt > pxIntBegin )											  \
411 			{																	  \
412 				--pxInt;														  \
413 				static_cast< T* >( pxInt->get() )->method(aEvt);				  \
414 			}																	  \
415 		}																		  \
416 		catch( RuntimeException& )												  \
417 		{																		  \
418 		}																		  \
419 	}																			  \
420 	_rGuard.reset();
421 
422 #define NOTIFY_LISTERNERS1(_rListeners,T,method,arg1)							  \
423 	Sequence< Reference< XInterface > > aListenerSeq = _rListeners.getElements(); \
424 																				  \
425 	const Reference< XInterface >* pxIntBegin = aListenerSeq.getConstArray();	  \
426 	const Reference< XInterface >* pxInt = pxIntBegin + aListenerSeq.getLength(); \
427 																				  \
428 	_rGuard.clear();															  \
429 	while( pxInt > pxIntBegin )													  \
430 	{																			  \
431 		try																		  \
432 		{																		  \
433 			while( pxInt > pxIntBegin )											  \
434 			{																	  \
435 				--pxInt;														  \
436 				static_cast< T* >( pxInt->get() )->method(aEvt,arg1);			  \
437 			}																	  \
438 		}																		  \
439 		catch( RuntimeException& )												  \
440 		{																		  \
441 		}																		  \
442 	}																			  \
443 	_rGuard.reset();
444 
445 
446 //==================================================================================
447 // miscellaneous
448 #define UNUSED(x)	x;
449 
450 #endif // _DBASHARED_APITOOLS_HXX_
451 
452