35 void ** ppDest,
void * pSource,
36 uno_AcquireFunc acquire, uno_ReleaseFunc release )
40 void *
const pToBeReleased = *ppDest;
47 typelib_TypeDescriptionReference * pDestType,
54 pSource = (*queryInterface)( pSource, pDestType );
60 void * pDest,
void * pSource,
61 typelib_CompoundTypeDescription * pTypeDescr,
62 uno_QueryInterfaceFunc
queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release );
65 void * pDest,
void * pSource,
66 typelib_CompoundTypeDescription * pTypeDescr,
67 uno_QueryInterfaceFunc
queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release )
69 if (pTypeDescr->pBaseTypeDescription)
72 if (!
assignStruct( pDest, pSource, pTypeDescr->pBaseTypeDescription,
79 typelib_TypeDescriptionReference ** ppTypeRefs = pTypeDescr->ppTypeRefs;
80 sal_Int32 * pMemberOffsets = pTypeDescr->pMemberOffsets;
81 sal_Int32 nDescr = pTypeDescr->nMembers;
86 static_cast<char *
>(pSource) + pMemberOffsets[nDescr],
101 uno_QueryInterfaceFunc
queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release )
103 if (pDest == pSource)
112 while (typelib_TypeClass_ANY == pSourceType->eTypeClass)
114 pSourceTypeDescr =
nullptr;
115 pSourceType =
static_cast<uno_Any *
>(pSource)->pType;
117 if (pDest == pSource)
121 switch (pDestType->eTypeClass)
123 case typelib_TypeClass_VOID:
124 return pSourceType->eTypeClass == typelib_TypeClass_VOID;
125 case typelib_TypeClass_CHAR:
126 switch (pSourceType->eTypeClass)
128 case typelib_TypeClass_CHAR:
134 case typelib_TypeClass_BOOLEAN:
135 switch (pSourceType->eTypeClass)
137 case typelib_TypeClass_BOOLEAN:
143 case typelib_TypeClass_BYTE:
144 switch (pSourceType->eTypeClass)
146 case typelib_TypeClass_BYTE:
152 case typelib_TypeClass_SHORT:
153 switch (pSourceType->eTypeClass)
155 case typelib_TypeClass_BYTE:
156 *
static_cast<sal_Int16 *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
158 case typelib_TypeClass_SHORT:
159 case typelib_TypeClass_UNSIGNED_SHORT:
160 *
static_cast<sal_Int16 *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
165 case typelib_TypeClass_UNSIGNED_SHORT:
166 switch (pSourceType->eTypeClass)
168 case typelib_TypeClass_BYTE:
169 *
static_cast<sal_uInt16 *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
171 case typelib_TypeClass_SHORT:
172 case typelib_TypeClass_UNSIGNED_SHORT:
173 *
static_cast<sal_uInt16 *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
178 case typelib_TypeClass_LONG:
179 switch (pSourceType->eTypeClass)
181 case typelib_TypeClass_BYTE:
182 *
static_cast<sal_Int32 *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
184 case typelib_TypeClass_SHORT:
185 *
static_cast<sal_Int32 *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
187 case typelib_TypeClass_UNSIGNED_SHORT:
188 *
static_cast<sal_Int32 *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
190 case typelib_TypeClass_LONG:
191 case typelib_TypeClass_UNSIGNED_LONG:
192 *
static_cast<sal_Int32 *
>(pDest) = *
static_cast<sal_Int32 *
>(pSource);
197 case typelib_TypeClass_UNSIGNED_LONG:
198 switch (pSourceType->eTypeClass)
200 case typelib_TypeClass_BYTE:
201 *
static_cast<sal_uInt32 *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
203 case typelib_TypeClass_SHORT:
204 *
static_cast<sal_uInt32 *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
206 case typelib_TypeClass_UNSIGNED_SHORT:
207 *
static_cast<sal_uInt32 *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
209 case typelib_TypeClass_LONG:
210 case typelib_TypeClass_UNSIGNED_LONG:
211 *
static_cast<sal_uInt32 *
>(pDest) = *
static_cast<sal_uInt32 *
>(pSource);
216 case typelib_TypeClass_HYPER:
217 switch (pSourceType->eTypeClass)
219 case typelib_TypeClass_BYTE:
220 *
static_cast<sal_Int64 *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
222 case typelib_TypeClass_SHORT:
223 *
static_cast<sal_Int64 *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
225 case typelib_TypeClass_UNSIGNED_SHORT:
226 *
static_cast<sal_Int64 *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
228 case typelib_TypeClass_LONG:
229 *
static_cast<sal_Int64 *
>(pDest) = *
static_cast<sal_Int32 *
>(pSource);
231 case typelib_TypeClass_UNSIGNED_LONG:
232 *
static_cast<sal_Int64 *
>(pDest) = *
static_cast<sal_uInt32 *
>(pSource);
234 case typelib_TypeClass_HYPER:
235 case typelib_TypeClass_UNSIGNED_HYPER:
236 *
static_cast<sal_Int64 *
>(pDest) = *
static_cast<sal_Int64 *
>(pSource);
241 case typelib_TypeClass_UNSIGNED_HYPER:
242 switch (pSourceType->eTypeClass)
244 case typelib_TypeClass_BYTE:
245 *
static_cast<sal_uInt64 *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
247 case typelib_TypeClass_SHORT:
248 *
static_cast<sal_uInt64 *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
250 case typelib_TypeClass_UNSIGNED_SHORT:
251 *
static_cast<sal_uInt64 *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
253 case typelib_TypeClass_LONG:
254 *
static_cast<sal_uInt64 *
>(pDest) = *
static_cast<sal_Int32 *
>(pSource);
256 case typelib_TypeClass_UNSIGNED_LONG:
257 *
static_cast<sal_uInt64 *
>(pDest) = *
static_cast<sal_uInt32 *
>(pSource);
259 case typelib_TypeClass_HYPER:
260 case typelib_TypeClass_UNSIGNED_HYPER:
261 *
static_cast<sal_uInt64 *
>(pDest) = *
static_cast<sal_uInt64 *
>(pSource);
266 case typelib_TypeClass_FLOAT:
267 switch (pSourceType->eTypeClass)
269 case typelib_TypeClass_BYTE:
270 *
static_cast<float *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
272 case typelib_TypeClass_SHORT:
273 *
static_cast<float *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
275 case typelib_TypeClass_UNSIGNED_SHORT:
276 *
static_cast<float *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
278 case typelib_TypeClass_FLOAT:
279 *
static_cast<float *
>(pDest) = *
static_cast<float *
>(pSource);
284 case typelib_TypeClass_DOUBLE:
285 switch (pSourceType->eTypeClass)
287 case typelib_TypeClass_BYTE:
288 *
static_cast<double *
>(pDest) = *
static_cast<sal_Int8 *
>(pSource);
290 case typelib_TypeClass_SHORT:
291 *
static_cast<double *
>(pDest) = *
static_cast<sal_Int16 *
>(pSource);
293 case typelib_TypeClass_UNSIGNED_SHORT:
294 *
static_cast<double *
>(pDest) = *
static_cast<sal_uInt16 *
>(pSource);
296 case typelib_TypeClass_LONG:
297 *
static_cast<double *
>(pDest) = *
static_cast<sal_Int32 *
>(pSource);
299 case typelib_TypeClass_UNSIGNED_LONG:
300 *
static_cast<double *
>(pDest) = *
static_cast<sal_uInt32 *
>(pSource);
302 case typelib_TypeClass_FLOAT:
303 *
static_cast<double *
>(pDest) = *
static_cast<float *
>(pSource);
305 case typelib_TypeClass_DOUBLE:
306 *
static_cast<double *
>(pDest) = *
static_cast<double *
>(pSource);
311 case typelib_TypeClass_STRING:
312 switch (pSourceType->eTypeClass)
314 case typelib_TypeClass_STRING:
315 ::rtl_uString_assign(
static_cast<rtl_uString **
>(pDest), *
static_cast<rtl_uString **
>(pSource) );
320 case typelib_TypeClass_TYPE:
321 switch (pSourceType->eTypeClass)
323 case typelib_TypeClass_TYPE:
325 typelib_TypeDescriptionReference ** pp =
static_cast<typelib_TypeDescriptionReference **
>(pDest);
327 *pp = *
static_cast<typelib_TypeDescriptionReference **
>(pSource);
334 case typelib_TypeClass_ANY:
338 case typelib_TypeClass_ENUM:
341 *
static_cast<sal_Int32 *
>(pDest) = *
static_cast<sal_Int32 *
>(pSource);
345 case typelib_TypeClass_STRUCT:
346 case typelib_TypeClass_EXCEPTION:
347 if (typelib_TypeClass_STRUCT == pSourceType->eTypeClass ||
348 typelib_TypeClass_EXCEPTION == pSourceType->eTypeClass)
351 if (pSourceTypeDescr)
353 typelib_CompoundTypeDescription * pTypeDescr =
354 reinterpret_cast<typelib_CompoundTypeDescription *
>(pSourceTypeDescr);
358 pTypeDescr = pTypeDescr->pBaseTypeDescription;
368 TYPELIB_DANGER_GET( &pSourceTypeDescr, pSourceType );
369 typelib_CompoundTypeDescription * pTypeDescr =
370 reinterpret_cast<typelib_CompoundTypeDescription *
>(pSourceTypeDescr);
374 pTypeDescr = pTypeDescr->pBaseTypeDescription;
381 TYPELIB_DANGER_RELEASE( pSourceTypeDescr );
386 case typelib_TypeClass_SEQUENCE:
390 if (*
static_cast<uno_Sequence **
>(pSource) != *
static_cast<uno_Sequence **
>(pDest))
392 osl_atomic_increment( &(*
static_cast<uno_Sequence **
>(pSource))->
nRefCount );
394 *
static_cast<uno_Sequence **
>(pDest), pDestType, pDestTypeDescr, release );
395 *
static_cast<uno_Sequence **
>(pDest) = *
static_cast<uno_Sequence **
>(pSource);
398 case typelib_TypeClass_INTERFACE:
399 if (typelib_TypeClass_INTERFACE != pSourceType->eTypeClass)
403 _assignInterface(
static_cast<void **
>(pDest), *
static_cast<void **
>(pSource), acquire, release );
406 else if (*
static_cast< void **
>(pSource) ==
nullptr)
410 void *
const pToBeReleased = *
static_cast< void **
>(pDest);
411 *
static_cast< void **
>(pDest) =
nullptr;
417 if (pSourceTypeDescr)
420 while (pTD && !
_type_equals( pTD->pWeakRef, pDestType ))
422 pTD = &
reinterpret_cast<typelib_InterfaceTypeDescription *
>(pTD)->pBaseTypeDescription->aBase;
426 _assignInterface(
static_cast<void **
>(pDest), *
static_cast<void **
>(pSource), acquire, release );
434 if (pQueried !=
nullptr) {
435 void *
const pToBeReleased = *
static_cast<void **
>(pDest);
436 *
static_cast<void **
>(pDest) = pQueried;
439 return (pQueried !=
nullptr);
sal_Bool SAL_CALL uno_type_assignData(void *pDest, typelib_TypeDescriptionReference *pDestType, void *pSource, typelib_TypeDescriptionReference *pSourceType, uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release) SAL_THROW_EXTERN_C()
std::unique_ptr< sal_Int32[]> pData
struct _typelib_TypeDescription typelib_TypeDescription
void _release(void *p, uno_ReleaseFunc release)
void _destructData(void *pValue, typelib_TypeDescriptionReference *pType, typelib_TypeDescription *pTypeDescr, uno_ReleaseFunc release)
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)
void _acquire(void *p, uno_AcquireFunc acquire)
void _assignInterface(void **ppDest, void *pSource, uno_AcquireFunc acquire, uno_ReleaseFunc release)
bool assignStruct(void *pDest, void *pSource, typelib_CompoundTypeDescription *pTypeDescr, uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release)
void _defaultConstructData(void *pMem, typelib_TypeDescriptionReference *pType, typelib_TypeDescription *pTypeDescr)
void _copyConstructAny(uno_Any *pDestAny, void *pSource, typelib_TypeDescriptionReference *pType, typelib_TypeDescription *pTypeDescr, uno_AcquireFunc acquire, uno_Mapping *mapping)
bool _assignData(void *pDest, typelib_TypeDescriptionReference *pDestType, typelib_TypeDescription *pDestTypeDescr, void *pSource, typelib_TypeDescriptionReference *pSourceType, typelib_TypeDescription *pSourceTypeDescr, uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release)
void idestructSequence(uno_Sequence *pSeq, typelib_TypeDescriptionReference *pType, typelib_TypeDescription *pTypeDescr, uno_ReleaseFunc release)
void * binuno_queryInterface(void *pUnoI, typelib_TypeDescriptionReference *pDestType)
void * _queryInterface(void *pSource, typelib_TypeDescriptionReference *pDestType, uno_QueryInterfaceFunc queryInterface)
void _destructAny(uno_Any *pAny, uno_ReleaseFunc release)
bool _type_equals(typelib_TypeDescriptionReference const *pType1, typelib_TypeDescriptionReference const *pType2)
bool _assignStruct(void *pDest, void *pSource, typelib_CompoundTypeDescription *pTypeDescr, uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release)
#define TYPE_ACQUIRE(pType)
void SAL_CALL typelib_typedescriptionreference_release(typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()