1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
22 #include <osl/diagnose.h>
28 //#### construction ################################################################################
31 void defaultConstructStruct(
33 typelib_CompoundTypeDescription
* pCompType
);
35 inline void _defaultConstructStruct(
37 typelib_CompoundTypeDescription
* pTypeDescr
)
39 if (pTypeDescr
->pBaseTypeDescription
)
41 defaultConstructStruct( pMem
, pTypeDescr
->pBaseTypeDescription
);
44 typelib_TypeDescriptionReference
** ppTypeRefs
= pTypeDescr
->ppTypeRefs
;
45 sal_Int32
* pMemberOffsets
= pTypeDescr
->pMemberOffsets
;
46 sal_Int32 nDescr
= pTypeDescr
->nMembers
;
50 ::uno_type_constructData( static_cast<char *>(pMem
) + pMemberOffsets
[nDescr
], ppTypeRefs
[nDescr
] );
55 inline void _defaultConstructData(
57 typelib_TypeDescriptionReference
* pType
,
58 typelib_TypeDescription
* pTypeDescr
)
60 switch (pType
->eTypeClass
)
62 case typelib_TypeClass_CHAR
:
63 *static_cast<sal_Unicode
*>(pMem
) = '\0';
65 case typelib_TypeClass_BOOLEAN
:
66 *static_cast<sal_Bool
*>(pMem
) = false;
68 case typelib_TypeClass_BYTE
:
69 *static_cast<sal_Int8
*>(pMem
) = 0;
71 case typelib_TypeClass_SHORT
:
72 case typelib_TypeClass_UNSIGNED_SHORT
:
73 *static_cast<sal_Int16
*>(pMem
) = 0;
75 case typelib_TypeClass_LONG
:
76 case typelib_TypeClass_UNSIGNED_LONG
:
77 *static_cast<sal_Int32
*>(pMem
) = 0;
79 case typelib_TypeClass_HYPER
:
80 case typelib_TypeClass_UNSIGNED_HYPER
:
81 *static_cast<sal_Int64
*>(pMem
) = 0;
83 case typelib_TypeClass_FLOAT
:
84 *static_cast<float *>(pMem
) = 0.0;
86 case typelib_TypeClass_DOUBLE
:
87 *static_cast<double *>(pMem
) = 0.0;
89 case typelib_TypeClass_STRING
:
90 *static_cast<rtl_uString
**>(pMem
) = nullptr;
91 ::rtl_uString_new( static_cast<rtl_uString
**>(pMem
) );
93 case typelib_TypeClass_TYPE
:
94 *static_cast<typelib_TypeDescriptionReference
**>(pMem
) = _getVoidType();
96 case typelib_TypeClass_ANY
:
97 CONSTRUCT_EMPTY_ANY( static_cast<uno_Any
*>(pMem
) );
99 case typelib_TypeClass_ENUM
:
102 *static_cast<sal_Int32
*>(pMem
) = reinterpret_cast<typelib_EnumTypeDescription
*>(pTypeDescr
)->nDefaultEnumValue
;
106 TYPELIB_DANGER_GET( &pTypeDescr
, pType
);
107 *static_cast<sal_Int32
*>(pMem
) = reinterpret_cast<typelib_EnumTypeDescription
*>(pTypeDescr
)->nDefaultEnumValue
;
108 TYPELIB_DANGER_RELEASE( pTypeDescr
);
111 case typelib_TypeClass_STRUCT
:
112 case typelib_TypeClass_EXCEPTION
:
115 _defaultConstructStruct( pMem
, reinterpret_cast<typelib_CompoundTypeDescription
*>(pTypeDescr
) );
119 TYPELIB_DANGER_GET( &pTypeDescr
, pType
);
120 _defaultConstructStruct( pMem
, reinterpret_cast<typelib_CompoundTypeDescription
*>(pTypeDescr
) );
121 TYPELIB_DANGER_RELEASE( pTypeDescr
);
124 case typelib_TypeClass_SEQUENCE
:
125 *static_cast<uno_Sequence
**>(pMem
) = createEmptySequence();
127 case typelib_TypeClass_INTERFACE
:
128 *static_cast<void **>(pMem
) = nullptr; // either cpp or c-uno interface
138 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */