xref: /trunk/main/cppu/inc/uno/data.h (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _UNO_DATA_H_
28 #define _UNO_DATA_H_
29 
30 #include <sal/types.h>
31 
32 #ifdef __cplusplus
33 extern "C"
34 {
35 #endif
36 
37 struct _typelib_TypeDescriptionReference;
38 struct _typelib_TypeDescription;
39 struct _typelib_InterfaceTypeDescription;
40 struct _uno_Mapping;
41 
42 /** Generic function pointer declaration to query for an interface.
43 
44     @param pInterface interface
45     @param pTypedemanded interface type
46     @return interface pointer
47 */
48 typedef void * (SAL_CALL * uno_QueryInterfaceFunc)(
49     void * pInterface, struct _typelib_TypeDescriptionReference * pType );
50 /** Generic function pointer declaration to acquire an interface.
51 
52     @param pInterface interface to be acquired
53 */
54 typedef void (SAL_CALL * uno_AcquireFunc)(
55     void * pInterface );
56 /** Generic function pointer declaration to release an interface.
57 
58     @param pInterface interface to be release
59 */
60 typedef void (SAL_CALL * uno_ReleaseFunc)(
61     void * pInterface );
62 
63 /** Tests if two values are equal. May compare different types (e.g., short to long).
64 
65     @param pVal1            pointer to a value
66     @param pVal1TypeDescr   type description of pVal1
67     @param pVal2            pointer to another value
68     @param pVal2TypeDescr   type description of pVal2
69     @param queryInterface   function called each time two interfaces are tested whether they belong
70                             to the same object; defaults (0) to uno
71     @param release          function to release queried interfaces; defaults (0) to uno
72     @return true if values are equal
73 */
74 sal_Bool SAL_CALL uno_equalData(
75     void * pVal1, struct _typelib_TypeDescription * pVal1TypeDescr,
76     void * pVal2, struct _typelib_TypeDescription * pVal2TypeDescr,
77     uno_QueryInterfaceFunc queryInterface, uno_ReleaseFunc release )
78     SAL_THROW_EXTERN_C();
79 /** Tests if two values are equal. May compare different types (e.g., short to long).
80 
81     @param pVal1            pointer to a value
82     @param pVal1Type        type of pVal1
83     @param pVal2            pointer to another value
84     @param pVal2Type        type of pVal2
85     @param queryInterface   function called each time two interfaces are tested whether they belong
86                             to the same object; defaults (0) to uno
87     @param release          function to release queried interfaces; defaults (0) to uno
88     @return true if values are equal
89 */
90 sal_Bool SAL_CALL uno_type_equalData(
91     void * pVal1, struct _typelib_TypeDescriptionReference * pVal1Type,
92     void * pVal2, struct _typelib_TypeDescriptionReference * pVal2Type,
93     uno_QueryInterfaceFunc queryInterface, uno_ReleaseFunc release )
94     SAL_THROW_EXTERN_C();
95 
96 /** Copy construct memory with given value. The size of the destination value must be larger
97     or equal to the size of the source value.
98 
99     @param pDest            pointer to destination value memory
100     @param pSource          pointer to source value
101     @param pTypeDescr       type description of source
102     @param acquire          function called each time an interface needs to be acquired;
103                             defaults (0) to uno
104 */
105 void SAL_CALL uno_copyData(
106     void * pDest, void * pSource,
107     struct _typelib_TypeDescription * pTypeDescr, uno_AcquireFunc acquire )
108     SAL_THROW_EXTERN_C();
109 /** Copy construct memory with given value. The size of the destination value must be larger
110     or equal to the size of the source value.
111 
112     @param pDest            pointer to destination value memory
113     @param pSource          pointer to source value
114     @param pType            type of source
115     @param acquire          function called each time an interface needs to be acquired;
116                             defaults (0) to uno
117 */
118 void SAL_CALL uno_type_copyData(
119     void * pDest, void * pSource,
120     struct _typelib_TypeDescriptionReference * pType, uno_AcquireFunc acquire )
121     SAL_THROW_EXTERN_C();
122 
123 /** Copy construct memory with given value. The size of the destination value must be larger
124     or equal to the size of the source value. Interfaces are converted/ mapped by mapping parameter.
125 
126     @param pDest            pointer to destination value memory
127     @param pSource          pointer to source value
128     @param pTypeDescr       type description of source
129     @param mapping          mapping to convert/ map interfaces
130 */
131 void SAL_CALL uno_copyAndConvertData(
132     void * pDest, void * pSource,
133     struct _typelib_TypeDescription * pTypeDescr, struct _uno_Mapping * mapping )
134     SAL_THROW_EXTERN_C();
135 /** Copy construct memory with given value. The size of the destination value must be larger
136     or equal to the size of the source value. Interfaces are converted/ mapped by mapping parameter.
137 
138     @param pDest            pointer to destination value memory
139     @param pSource          pointer to source value
140     @param pType            type of source
141     @param mapping          mapping to convert/ map interfaces
142 */
143 void SAL_CALL uno_type_copyAndConvertData(
144     void * pDest, void * pSource,
145     struct _typelib_TypeDescriptionReference * pType, struct _uno_Mapping * mapping )
146     SAL_THROW_EXTERN_C();
147 
148 /** Destructs a given value; does NOT free its memory!
149 
150     @param pValue           value to be destructed
151     @param pTypeDescr       type description of value
152     @param release          function called each time an interface pointer needs to be released;
153                             defaults (0) to uno
154 */
155 void SAL_CALL uno_destructData(
156     void * pValue, struct _typelib_TypeDescription * pTypeDescr, uno_ReleaseFunc release )
157     SAL_THROW_EXTERN_C();
158 /** Destructs a given value; does NOT free its memory!
159 
160     @param pValue           value to be destructed
161     @param pType            type of value
162     @param release          function called each time an interface pointer needs to be released;
163                             defaults (0) to uno
164 */
165 void SAL_CALL uno_type_destructData(
166     void * pValue, struct _typelib_TypeDescriptionReference * pType, uno_ReleaseFunc release )
167     SAL_THROW_EXTERN_C();
168 
169 /** Default constructs a value. All simple types are set to 0, enums are set to their default value.
170 
171     @param pMem             pointer to memory of value to be constructed
172     @param pTypeDescr       type description of value to be constructed
173 */
174 void SAL_CALL uno_constructData(
175     void * pMem, struct _typelib_TypeDescription * pTypeDescr )
176     SAL_THROW_EXTERN_C();
177 /** Default constructs a value. All simple types are set to 0, enums are set to their default value.
178 
179     @param pMem             pointer to memory of value to be constructed
180     @param pType            type of value to be constructed
181 */
182 void SAL_CALL uno_type_constructData(
183     void * pMem, struct _typelib_TypeDescriptionReference * pType )
184     SAL_THROW_EXTERN_C();
185 
186 /** Assigns a destination value with a source value.
187     Widening conversion WITHOUT data loss is allowed (e.g., assigning a long with a short).
188     Querying for demanded interface type is allowed.
189     Assignment from any value to a value of type Any and vice versa is allowed.
190 
191     @param pDest            pointer to destination value
192     @param pDestTypeDescr   type description of destination value
193     @param pSource          pointer to source value; if 0, then destination value will be assigned
194                             to default value
195     @param pSourceTypeDescr type destination of source value
196     @param queryInterface   function called each time an interface needs to be queried;
197                             defaults (0) to uno
198     @param acquire          function called each time an interface needs to be acquired;
199                             defaults (0) to uno
200     @param release          function called each time an interface needs to be released;
201                             defaults (0) to uno
202     @return true if destination has been successfully assigned
203 */
204 sal_Bool SAL_CALL uno_assignData(
205     void * pDest, struct _typelib_TypeDescription * pDestTypeDescr,
206     void * pSource, struct _typelib_TypeDescription * pSourceTypeDescr,
207     uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release )
208     SAL_THROW_EXTERN_C();
209 /** Assigns a destination value with a source value.
210     Widening conversion WITHOUT data loss is allowed (e.g., assigning a long with a short).
211     Querying for demanded interface type is allowed.
212     Assignment from any value to a value of type Any and vice versa is allowed.
213 
214     @param pDest            pointer to destination value
215     @param pDestType        type of destination value
216     @param pSource          pointer to source value; if 0, then destination value will be assigned
217                             to default value
218     @param pSourceType      type of source value
219     @param queryInterface   function called each time an interface needs to be queried;
220                             defaults (0) to uno
221     @param acquire          function called each time an interface needs to be acquired;
222                             defaults (0) to uno
223     @param release          function called each time an interface needs to be released;
224                             defaults (0) to uno
225     @return true if destination has been successfully assigned
226 */
227 sal_Bool SAL_CALL uno_type_assignData(
228     void * pDest, struct _typelib_TypeDescriptionReference * pDestType,
229     void * pSource, struct _typelib_TypeDescriptionReference * pSourceType,
230     uno_QueryInterfaceFunc queryInterface, uno_AcquireFunc acquire, uno_ReleaseFunc release )
231     SAL_THROW_EXTERN_C();
232 
233 /** Tests whether a value of given type is assignable from given value.
234     Widening conversion WITHOUT data loss is allowed (e.g., assigning a long with a short).
235     Querying for demanded interface type is allowed.
236     Assignment from any value to a value of type Any and vice versa is allowed.
237 
238     @param pAssignable      type
239     @param pFrom            pointer to value
240     @param pFromType        type of value
241     @param queryInterface   function called each time an interface needs to be queried;
242                             defaults (0) to uno
243     @param release          function called each time an interface needs to be released;
244                             defaults (0) to uno
245     @return true if value is destination has been successfully assigned
246 */
247 sal_Bool SAL_CALL uno_type_isAssignableFromData(
248     struct _typelib_TypeDescriptionReference * pAssignable,
249     void * pFrom, struct _typelib_TypeDescriptionReference * pFromType,
250     uno_QueryInterfaceFunc queryInterface, uno_ReleaseFunc release )
251     SAL_THROW_EXTERN_C();
252 
253 #ifdef __cplusplus
254 }
255 #endif
256 
257 #endif
258