LibreOffice Module cppu (master) 1
static_types.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <sal/config.h>
21
22#include <algorithm>
23#include <cassert>
24
25#include <osl/mutex.hxx>
26#include <rtl/ustring.hxx>
27
28#include <typelib/typedescription.h>
29#include "typelib.hxx"
30
31
32using namespace osl;
33
34namespace
35{
36 Mutex& typelib_StaticInitMutex()
37 {
38 static Mutex SINGLETON;
39 return SINGLETON;
40 }
41}
42
43extern "C"
44{
45
46
47#ifdef _WIN32
48#pragma pack(push, 8)
49#endif
50
51namespace {
52
59struct AlignSize_Impl
60{
61 sal_Int16 nInt16;
62 double dDouble;
63};
64
65}
66
67#ifdef _WIN32
68#pragma pack(pop)
69#endif
70
71// the value of the maximal alignment
72const sal_Int32 nMaxAlignment = static_cast<sal_Int32>( reinterpret_cast<sal_Size>(&reinterpret_cast<AlignSize_Impl *>(16)->dDouble) - 16);
73
74static sal_Int32 adjustAlignment( sal_Int32 nRequestedAlignment )
75{
76 if( nRequestedAlignment > nMaxAlignment )
77 nRequestedAlignment = nMaxAlignment;
78 return nRequestedAlignment;
79}
80
84static sal_Int32 newAlignedSize(
85 sal_Int32 OldSize, sal_Int32 ElementSize, sal_Int32 NeededAlignment )
86{
87 NeededAlignment = adjustAlignment( NeededAlignment );
88 return (OldSize + NeededAlignment -1) / NeededAlignment * NeededAlignment + ElementSize;
89}
90
91
92// !for NOT REALLY WEAK TYPES only!
93static typelib_TypeDescriptionReference * igetTypeByName( rtl_uString const * pTypeName )
94{
95 typelib_TypeDescriptionReference * pRef = nullptr;
97 if (pRef && pRef->pType && pRef->pType->pWeakRef) // found initialized td
98 {
99 return pRef;
100 }
101 return nullptr;
102}
103
104extern "C"
105{
106
107typelib_TypeDescriptionReference ** SAL_CALL typelib_static_type_getByTypeClass(
108 typelib_TypeClass eTypeClass )
110{
111 static typelib_TypeDescriptionReference * s_aTypes[] = {
112 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
113 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
114 nullptr, nullptr, nullptr };
115
116 if (! s_aTypes[eTypeClass])
117 {
118 MutexGuard aGuard( typelib_StaticInitMutex() );
119 if (! s_aTypes[eTypeClass])
120 {
121 static const char * s_aTypeNames[] = {
122 "void", "char", "boolean", "byte",
123 "short", "unsigned short", "long", "unsigned long",
124 "hyper", "unsigned hyper", "float", "double",
125 "string", "type", "any" };
126
127 switch (eTypeClass)
128 {
129 case typelib_TypeClass_EXCEPTION:
130 case typelib_TypeClass_INTERFACE:
131 {
132 // type
133 if (! s_aTypes[typelib_TypeClass_TYPE])
134 {
135 OUString sTypeName("type");
137 &s_aTypes[typelib_TypeClass_TYPE], typelib_TypeClass_TYPE, sTypeName.pData );
138 // another static ref:
139 ++s_aTypes[typelib_TypeClass_TYPE]->nStaticRefCount;
140 }
141 // any
142 if (! s_aTypes[typelib_TypeClass_ANY])
143 {
144 OUString sTypeName("any");
146 &s_aTypes[typelib_TypeClass_ANY], typelib_TypeClass_ANY, sTypeName.pData );
147 // another static ref:
148 ++s_aTypes[typelib_TypeClass_ANY]->nStaticRefCount;
149 }
150 // string
151 if (! s_aTypes[typelib_TypeClass_STRING])
152 {
153 OUString sTypeName("string");
155 &s_aTypes[typelib_TypeClass_STRING], typelib_TypeClass_STRING, sTypeName.pData );
156 // another static ref:
157 ++s_aTypes[typelib_TypeClass_STRING]->nStaticRefCount;
158 }
159 // XInterface
160 if (! s_aTypes[typelib_TypeClass_INTERFACE])
161 {
162 OUString sTypeName("com.sun.star.uno.XInterface");
163
164 typelib_InterfaceTypeDescription * pTD = nullptr;
165
166 typelib_TypeDescriptionReference * pMembers[3] = { nullptr,nullptr,nullptr };
167 OUString sMethodName0("com.sun.star.uno.XInterface::queryInterface");
169 &pMembers[0], typelib_TypeClass_INTERFACE_METHOD, sMethodName0.pData );
170 OUString sMethodName1("com.sun.star.uno.XInterface::acquire");
172 &pMembers[1], typelib_TypeClass_INTERFACE_METHOD, sMethodName1.pData );
173 OUString sMethodName2("com.sun.star.uno.XInterface::release");
175 &pMembers[2], typelib_TypeClass_INTERFACE_METHOD, sMethodName2.pData );
176
178 &pTD, sTypeName.pData, 0, 0, 0, 0, 0, nullptr, 3, pMembers );
179
181 s_aTypes[typelib_TypeClass_INTERFACE] = pTD->aBase.pWeakRef;
183 s_aTypes[typelib_TypeClass_INTERFACE] );
184 // another static ref:
185 ++s_aTypes[typelib_TypeClass_INTERFACE]->nStaticRefCount;
187
191 // Exception
192 assert( ! s_aTypes[typelib_TypeClass_EXCEPTION] );
193 {
194 typelib_TypeDescription * pTD1 = nullptr;
195 OUString sTypeName1("com.sun.star.uno.Exception");
196
197 typelib_CompoundMember_Init aMembers[2];
198 OUString sMemberType0("string");
199 OUString sMemberName0("Message");
200 aMembers[0].eTypeClass = typelib_TypeClass_STRING;
201 aMembers[0].pTypeName = sMemberType0.pData;
202 aMembers[0].pMemberName = sMemberName0.pData;
203 OUString sMemberType1("com.sun.star.uno.XInterface");
204 OUString sMemberName1("Context");
205 aMembers[1].eTypeClass = typelib_TypeClass_INTERFACE;
206 aMembers[1].pTypeName = sMemberType1.pData;
207 aMembers[1].pMemberName = sMemberName1.pData;
208
210 &pTD1, typelib_TypeClass_EXCEPTION, sTypeName1.pData, nullptr, 2, aMembers );
212 s_aTypes[typelib_TypeClass_EXCEPTION] = pTD1->pWeakRef;
214 s_aTypes[typelib_TypeClass_EXCEPTION]);
215 // another static ref:
216 ++s_aTypes[typelib_TypeClass_EXCEPTION]->nStaticRefCount;
217 // RuntimeException
218 OUString sTypeName2("com.sun.star.uno.RuntimeException");
220 &pTD1, typelib_TypeClass_EXCEPTION, sTypeName2.pData, s_aTypes[typelib_TypeClass_EXCEPTION], 0, nullptr );
223 }
224 // XInterface members
225 typelib_InterfaceMethodTypeDescription * pMethod = nullptr;
226 typelib_Parameter_Init aParameters[1];
227 OUString sParamName0("aType");
228 OUString sParamType0("type");
229 aParameters[0].pParamName = sParamName0.pData;
230 aParameters[0].eTypeClass = typelib_TypeClass_TYPE;
231 aParameters[0].pTypeName = sParamType0.pData;
232 aParameters[0].bIn = true;
233 aParameters[0].bOut = false;
234 rtl_uString * pExceptions[1];
235 OUString sExceptionName0("com.sun.star.uno.RuntimeException");
236 pExceptions[0] = sExceptionName0.pData;
237 OUString sReturnType0("any");
239 &pMethod, 0, false, sMethodName0.pData,
240 typelib_TypeClass_ANY, sReturnType0.pData,
241 1, aParameters, 1, pExceptions );
242 ::typelib_typedescription_register( reinterpret_cast<typelib_TypeDescription**>(&pMethod) );
243
244 OUString sReturnType1("void");
246 &pMethod, 1, true, sMethodName1.pData,
247 typelib_TypeClass_VOID, sReturnType1.pData, 0, nullptr, 0, nullptr );
248 ::typelib_typedescription_register( reinterpret_cast<typelib_TypeDescription**>(&pMethod) );
249
251 &pMethod, 2, true, sMethodName2.pData,
252 typelib_TypeClass_VOID, sReturnType1.pData,
253 0, nullptr, 0, nullptr );
254 ::typelib_typedescription_register( reinterpret_cast<typelib_TypeDescription**>(&pMethod) );
255 ::typelib_typedescription_release( &pMethod->aBase.aBase );
256 }
257 break;
258 }
259 default:
260 {
261 OUString aTypeName( OUString::createFromAscii( s_aTypeNames[eTypeClass] ) );
262 ::typelib_typedescriptionreference_new( &s_aTypes[eTypeClass], eTypeClass, aTypeName.pData );
263 // another static ref:
264 ++s_aTypes[eTypeClass]->nStaticRefCount;
265 }
266 }
267 }
268 }
269 return &s_aTypes[eTypeClass];
270}
271
273 typelib_TypeDescriptionReference ** ppRef,
274 typelib_TypeClass eTypeClass, const char * pTypeName )
276{
277 if (! *ppRef)
278 {
279 MutexGuard aGuard( typelib_StaticInitMutex() );
280 if (! *ppRef)
281 {
282 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
283 ::typelib_typedescriptionreference_new( ppRef, eTypeClass, aTypeName.pData );
284
285 assert(*ppRef && "coverity[var_deref_op] - shouldn't be possible");
286 ++((*ppRef)->nStaticRefCount);
287 }
288 }
289}
290
292 typelib_TypeDescriptionReference ** ppRef,
293 typelib_TypeDescriptionReference * pElementType )
295{
296 if ( *ppRef)
297 return;
298
299 MutexGuard aGuard( typelib_StaticInitMutex() );
300 if ( *ppRef)
301 return;
302
303 OUString aTypeName = "[]" + OUString::unacquired(&pElementType->pTypeName);
304
305 static_assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_SEQUENCE) );
306 *ppRef = igetTypeByName( aTypeName.pData );
307 if (!*ppRef)
308 {
309 typelib_TypeDescription * pReg = nullptr;
311 &pReg, typelib_TypeClass_SEQUENCE,
312 aTypeName.pData, pElementType, 0, nullptr );
313
315 *ppRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
316 assert( *ppRef == pReg->pWeakRef );
317 }
318 // another static ref:
319 ++((*ppRef)->nStaticRefCount);
320}
321
322
323namespace {
324
325void init(
326 typelib_TypeDescriptionReference ** ppRef,
327 typelib_TypeClass eTypeClass, const char * pTypeName,
328 typelib_TypeDescriptionReference * pBaseType,
329 sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers,
330 sal_Bool const * pParameterizedTypes)
331{
332 assert( eTypeClass == typelib_TypeClass_STRUCT || eTypeClass == typelib_TypeClass_EXCEPTION );
333
334 if ( *ppRef)
335 return;
336
337 MutexGuard aGuard( typelib_StaticInitMutex() );
338 if ( *ppRef)
339 return;
340
341 assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(eTypeClass) );
342 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
343 *ppRef = igetTypeByName( aTypeName.pData );
344 if (!*ppRef)
345 {
346 typelib_CompoundTypeDescription * pComp = nullptr;
348 reinterpret_cast<typelib_TypeDescription **>(&pComp), eTypeClass, aTypeName.pData );
349
350 sal_Int32 nOffset = 0;
351 if (pBaseType)
352 {
354 reinterpret_cast<typelib_TypeDescription **>(&pComp->pBaseTypeDescription), pBaseType );
355 assert( pComp->pBaseTypeDescription );
356 nOffset = pComp->pBaseTypeDescription->aBase.nSize;
357 assert( newAlignedSize( 0, pComp->pBaseTypeDescription->aBase.nSize, pComp->pBaseTypeDescription->aBase.nAlignment ) == pComp->pBaseTypeDescription->aBase.nSize ); // unexpected offset
358 }
359
360 if (nMembers)
361 {
362 pComp->nMembers = nMembers;
363 pComp->pMemberOffsets = new sal_Int32[ nMembers ];
364 pComp->ppTypeRefs = new typelib_TypeDescriptionReference *[ nMembers ];
365 if (pParameterizedTypes != nullptr) {
366 reinterpret_cast< typelib_StructTypeDescription * >(
367 pComp)->pParameterizedTypes
368 = new sal_Bool[nMembers];
369 }
370 for ( sal_Int32 i = 0 ; i < nMembers; ++i )
371 {
372 pComp->ppTypeRefs[i] = ppMembers[i];
374 pComp->ppTypeRefs[i] );
375 // write offset
376 typelib_TypeDescription * pTD = nullptr;
377 TYPELIB_DANGER_GET( &pTD, pComp->ppTypeRefs[i] );
378 assert( pTD->nSize ); // void member?
379 nOffset = newAlignedSize( nOffset, pTD->nSize, pTD->nAlignment );
380 pComp->pMemberOffsets[i] = nOffset - pTD->nSize;
381 TYPELIB_DANGER_RELEASE( pTD );
382
383 if (pParameterizedTypes != nullptr) {
384 reinterpret_cast< typelib_StructTypeDescription * >(
385 pComp)->pParameterizedTypes[i]
386 = pParameterizedTypes[i];
387 }
388 }
389 }
390
391 typelib_TypeDescription * pReg = &pComp->aBase;
392 pReg->pWeakRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
393 // sizeof(void) not allowed
394 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
395 pReg->nAlignment = adjustAlignment( pReg->nAlignment );
396 pReg->bComplete = false;
397
399 *ppRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
400 assert( *ppRef == pReg->pWeakRef );
401 }
402 // another static ref:
403 ++((*ppRef)->nStaticRefCount);
404}
405
406}
407
409 typelib_TypeDescriptionReference ** ppRef,
410 typelib_TypeClass eTypeClass, const char * pTypeName,
411 typelib_TypeDescriptionReference * pBaseType,
412 sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers )
414{
415 init(ppRef, eTypeClass, pTypeName, pBaseType, nMembers, ppMembers, nullptr);
416}
417
419 typelib_TypeDescriptionReference ** ppRef, const char * pTypeName,
420 typelib_TypeDescriptionReference * pBaseType,
421 sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers,
422 sal_Bool const * pParameterizedTypes )
424{
425 init(
426 ppRef, typelib_TypeClass_STRUCT, pTypeName, pBaseType, nMembers,
427 ppMembers, pParameterizedTypes);
428}
429
431 typelib_TypeDescriptionReference ** ppRef,
432 const char * pTypeName,
433 typelib_TypeDescriptionReference * pBaseType )
435{
436 // coverity[callee_ptr_arith] - not a bug
438 ppRef, pTypeName, pBaseType == nullptr ? 0 : 1, &pBaseType);
439}
440
442 typelib_TypeDescriptionReference ** ppRef,
443 const char * pTypeName,
444 sal_Int32 nBaseTypes,
445 typelib_TypeDescriptionReference ** ppBaseTypes )
447{
448 if ( *ppRef)
449 return;
450
451 MutexGuard aGuard( typelib_StaticInitMutex() );
452 if ( *ppRef)
453 return;
454
455 static_assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_INTERFACE) );
456 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
457 *ppRef = igetTypeByName( aTypeName.pData );
458 if (!*ppRef)
459 {
460 typelib_InterfaceTypeDescription * pIface = nullptr;
462 reinterpret_cast<typelib_TypeDescription **>(&pIface), typelib_TypeClass_INTERFACE, aTypeName.pData );
463
464 pIface->nBaseTypes = std::max< sal_Int32 >(nBaseTypes, 1);
465 pIface->ppBaseTypes = new typelib_InterfaceTypeDescription *[
466 pIface->nBaseTypes];
467 if (nBaseTypes > 0)
468 {
469 for (sal_Int32 i = 0; i < nBaseTypes; ++i) {
470 pIface->ppBaseTypes[i] = nullptr;
472 reinterpret_cast<typelib_TypeDescription **>(&pIface->ppBaseTypes[i]), ppBaseTypes[i] );
473 assert( pIface->ppBaseTypes[i] );
474 }
475 }
476 else
477 {
478 pIface->ppBaseTypes[0] = nullptr;
480 reinterpret_cast<typelib_TypeDescription **>(&pIface->ppBaseTypes[0]),
481 * ::typelib_static_type_getByTypeClass( typelib_TypeClass_INTERFACE ) );
482 assert( pIface->ppBaseTypes[0] );
483 }
484 pIface->pBaseTypeDescription = pIface->ppBaseTypes[0];
486 &pIface->pBaseTypeDescription->aBase);
487
488 typelib_TypeDescription * pReg = &pIface->aBase;
489 pReg->pWeakRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
490 // sizeof(void) not allowed
491 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
492
493 pReg->nAlignment = adjustAlignment( pReg->nAlignment );
494 pReg->bComplete = false;
495
497 *ppRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
498 assert( *ppRef == pReg->pWeakRef );
499 }
500 // another static ref:
501 ++((*ppRef)->nStaticRefCount);
502}
503
504
506 typelib_TypeDescriptionReference ** ppRef,
507 const char * pTypeName,
508 sal_Int32 nDefaultValue )
510{
511 if ( *ppRef)
512 return;
513
514 MutexGuard aGuard( typelib_StaticInitMutex() );
515 if ( *ppRef)
516 return;
517
518 static_assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_ENUM) );
519 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
520 *ppRef = igetTypeByName( aTypeName.pData );
521 if (!*ppRef)
522 {
523 typelib_TypeDescription * pReg = nullptr;
525 &pReg, typelib_TypeClass_ENUM, aTypeName.pData );
526 typelib_EnumTypeDescription * pEnum = reinterpret_cast<typelib_EnumTypeDescription *>(pReg);
527
528 pEnum->nDefaultEnumValue = nDefaultValue;
529
530 pReg->pWeakRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
531 // sizeof(void) not allowed
532 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
533 pReg->nAlignment = ::adjustAlignment( pReg->nAlignment );
534 pReg->bComplete = false;
535
537 *ppRef = reinterpret_cast<typelib_TypeDescriptionReference *>(pReg);
538 assert( *ppRef == pReg->pWeakRef );
539 }
540 // another static ref:
541 ++((*ppRef)->nStaticRefCount);
542}
543
544} // extern "C"
545
546}
547
548/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
FILE * init(int, char **)
struct _typelib_TypeDescription typelib_TypeDescription
int i
static typelib_TypeDescriptionReference * igetTypeByName(rtl_uString const *pTypeName)
void SAL_CALL typelib_static_enum_type_init(typelib_TypeDescriptionReference **ppRef, const char *pTypeName, sal_Int32 nDefaultValue) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_static_type_init(typelib_TypeDescriptionReference **ppRef, typelib_TypeClass eTypeClass, const char *pTypeName) SAL_THROW_EXTERN_C()
const sal_Int32 nMaxAlignment
void SAL_CALL typelib_static_interface_type_init(typelib_TypeDescriptionReference **ppRef, const char *pTypeName, typelib_TypeDescriptionReference *pBaseType) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_static_struct_type_init(typelib_TypeDescriptionReference **ppRef, const char *pTypeName, typelib_TypeDescriptionReference *pBaseType, sal_Int32 nMembers, typelib_TypeDescriptionReference **ppMembers, sal_Bool const *pParameterizedTypes) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_static_compound_type_init(typelib_TypeDescriptionReference **ppRef, typelib_TypeClass eTypeClass, const char *pTypeName, typelib_TypeDescriptionReference *pBaseType, sal_Int32 nMembers, typelib_TypeDescriptionReference **ppMembers) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_static_sequence_type_init(typelib_TypeDescriptionReference **ppRef, typelib_TypeDescriptionReference *pElementType) SAL_THROW_EXTERN_C()
static sal_Int32 adjustAlignment(sal_Int32 nRequestedAlignment)
static sal_Int32 newAlignedSize(sal_Int32 OldSize, sal_Int32 ElementSize, sal_Int32 NeededAlignment)
Calculate the new size of the struktur.
void SAL_CALL typelib_static_mi_interface_type_init(typelib_TypeDescriptionReference **ppRef, const char *pTypeName, sal_Int32 nBaseTypes, typelib_TypeDescriptionReference **ppBaseTypes) SAL_THROW_EXTERN_C()
typelib_TypeDescriptionReference **SAL_CALL typelib_static_type_getByTypeClass(typelib_TypeClass eTypeClass) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescriptionreference_new(typelib_TypeDescriptionReference **ppTDR, typelib_TypeClass eTypeClass, rtl_uString *pTypeName) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:2042
void SAL_CALL typelib_typedescription_register(typelib_TypeDescription **ppNewDescription) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:1393
void SAL_CALL typelib_typedescriptionreference_acquire(typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:2133
void SAL_CALL typelib_typedescription_newInterface(typelib_InterfaceTypeDescription **ppRet, rtl_uString *pTypeName, SAL_UNUSED_PARAMETER sal_uInt32, SAL_UNUSED_PARAMETER sal_uInt16, SAL_UNUSED_PARAMETER sal_uInt16, SAL_UNUSED_PARAMETER sal_uInt32, SAL_UNUSED_PARAMETER sal_uInt32, typelib_TypeDescriptionReference *pBaseInterface, sal_Int32 nMembers, typelib_TypeDescriptionReference **ppMembers) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:823
void typelib_typedescription_newEmpty(typelib_TypeDescription **ppRet, typelib_TypeClass eTypeClass, rtl_uString *pTypeName) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:473
void SAL_CALL typelib_typedescription_release(typelib_TypeDescription *pTD) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:1325
void SAL_CALL typelib_typedescriptionreference_getDescription(typelib_TypeDescription **ppRet, typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:2174
void SAL_CALL typelib_typedescription_acquire(typelib_TypeDescription *pTypeDescription) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:1197
void SAL_CALL typelib_typedescriptionreference_release(typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:2141
void SAL_CALL typelib_typedescription_new(typelib_TypeDescription **ppRet, typelib_TypeClass eTypeClass, rtl_uString *pTypeName, typelib_TypeDescriptionReference *pType, sal_Int32 nMembers, typelib_CompoundMember_Init *pMembers) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:765
void typelib_typedescriptionreference_getByName(typelib_TypeDescriptionReference **ppRet, rtl_uString const *pName) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:2220
sal_Int32 typelib_typedescription_getAlignedUnoSize(const typelib_TypeDescription *pTypeDescription, sal_Int32 nOffset, sal_Int32 &rMaxIntegralTypeSize) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:1618
void SAL_CALL typelib_typedescription_newInterfaceMethod(typelib_InterfaceMethodTypeDescription **ppRet, sal_Int32 nAbsolutePosition, sal_Bool bOneWay, rtl_uString *pTypeName, typelib_TypeClass eReturnTypeClass, rtl_uString *pReturnTypeName, sal_Int32 nParams, typelib_Parameter_Init *pParams, sal_Int32 nExceptions, rtl_uString **ppExceptionNames) SAL_THROW_EXTERN_C()
Definition: typelib.cxx:1042
unsigned char sal_Bool
#define SAL_THROW_EXTERN_C()