rewrite hypermat api for scilab 6
[scilab.git] / scilab / modules / api_scilab / includes / api_hypermat.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  */
11
12 #ifndef __HYPERMAT_API__
13 #define __HYPERMAT_API__
14
15 #if !defined(__INTERNAL_API_SCILAB__)
16 #error Do not include api_hypermat.h. Include api_scilab.h instead.
17 #endif
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 #include "api_common.h"
24 #include "doublecomplex.h"
25
26 /**************************************/
27 /*   Hypermatrices matrix functions   */
28 /**************************************/
29
30 /**
31  * Check if the variable type is double
32  * @param[in] _piAddress variable address
33  * @return 1 for true and 0 for false
34  */
35 int isHypermatType(void* _pvCtx, int* _piAddress);
36
37 /**
38  * Check if the variable is complex
39  * @param[in] _piAddress variable address
40  * @return 1 for true and 0 for false
41  */
42 int isHypermatComplex(void* _pvCtx, int* _piAddress);
43
44 /**
45  * Get the base type
46  * @param[in] _piAddress variable address
47  * @param[out] _piType return the base type
48  */
49 SciErr getHypermatType(void *_pvCtx, int *_piAddress, int *_piType);
50
51 /**
52  * Get integer precision ( SCI_xINTx )
53  * @param[in] _piAddress variable address
54  * @param[out] _piPrecison return integer precision ( SCI_xINTx )
55  */
56 SciErr getHypermatOfIntegerPrecision(void *_pvCtx, int *_piAddress, int *_piPrecision);
57
58 /**
59  * Get the hypermatrix dimensions
60  * @param[in] _piAddress variable address
61  * @param[out] _dims return the dimensions
62  * @param[out] _ndims return the number of dimensions
63  */
64 SciErr getHypermatDimensions(void *_pvCtx, int *_piAddress, int **_dims, int *_ndims);
65
66 /**
67  * Get polynomial variable name
68  * @param[in] _piAddress variable address
69  * @param[out] _pstVarName return variable name of polynomials
70  * @param[out] _piVarNameLen return length of _pstVarName
71  * @return if the operation succeeded ( 0 ) or not ( !0 )
72  */
73 SciErr getHypermatPolyVariableName(void* _pvCtx, int* _piAddress, char* _pstVarName, int* _piVarNameLen);
74
75 /**
76  * Get the hypermatrix dimensions and data
77  * @param[in] _piAddress variable address
78  * @param[out] _dims return the dimensions
79  * @param[out] _ndims return the number of dimensions
80  * @param[out] _piNbCoef return number of polynomial coefficients for each element
81  * @param[out] _pdblReal return real coefficients
82  */
83 SciErr getHypermatOfPoly(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piNbCoef, double** _pdblReal);
84
85 /**
86  * Get the hypermatrix dimensions and data
87  * @param[in] _piAddress variable address
88  * @param[out] _dims return the dimensions
89  * @param[out] _ndims return the number of dimensions
90  * @param[out] _piNbCoef return number of polynomial coefficients for each element
91  * @param[out] _pdblReal return real coefficients
92  * @param[out] _pdblImg return imaginary coefficients
93  */
94 SciErr getComplexHypermatOfPoly(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piNbCoef, double** _pdblReal, double** _pdblImg);
95
96 /**
97  * Get the hypermatrix dimensions and data
98  * @param[in] _piAddress variable address
99  * @param[out] _dims return the dimensions
100  * @param[out] _ndims return the number of dimensions
101  * @param[out] _piLength return strings lengths
102  * @param[out] _pstStrings return the strings data
103  */
104 SciErr getHypermatOfString(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piLength, char** _pstStrings);
105
106 /**
107  * Get the hypermatrix dimensions and data
108  * @param[in] _piAddress variable address
109  * @param[out] _dims return the dimensions
110  * @param[out] _ndims return the number of dimensions
111  * @param[out] _piLength return strings lengths
112  * @param[out] _pwstStrings return the strings data
113  */
114 SciErr getHypermatOfWideString(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piLength, wchar_t** _pwstStrings);
115
116 /**
117  * Get the hypermatrix dimensions and data
118  * @param[in] _piAddress variable address
119  * @param[out] _dims return the dimensions
120  * @param[out] _ndims return the number of dimensions
121  * @param[out] _pdblReal return the double data
122  */
123 SciErr getHypermatOfDouble(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, double** _pdblReal);
124
125 /**
126  * Get the hypermatrix dimensions and data
127  * @param[in] _piAddress variable address
128  * @param[out] _dims return the dimensions
129  * @param[out] _ndims return the number of dimensions
130  * @param[out] _pdblReal return the real data
131  * @param[out] _pdblImg return the imaginary data
132  */
133 SciErr getComplexHypermatOfDouble(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, double** _pdblReal, double** _pdblImg);
134
135 /**
136  * Get the hypermatrix dimensions and data
137  * @param[in] _piAddress variable address
138  * @param[out] _dims return the dimensions
139  * @param[out] _ndims return the number of dimensions
140  * @param[out] _pucData8 return the unsigned char data
141  */
142 SciErr getHypermatOfUnsignedInteger8(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned char** _pucData8);
143
144 /**
145  * Get the hypermatrix dimensions and data
146  * @param[in] _piAddress variable address
147  * @param[out] _dims return the dimensions
148  * @param[out] _ndims return the number of dimensions
149  * @param[out] _pcData8 return the char data
150  */
151 SciErr getHypermatOfInteger8(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, char** _pcData8);
152
153 /**
154  * Get the hypermatrix dimensions and data
155  * @param[in] _piAddress variable address
156  * @param[out] _dims return the dimensions
157  * @param[out] _ndims return the number of dimensions
158  * @param[out] _pusData16 return the unsigned short data
159  */
160 SciErr getHypermatOfUnsignedInteger16(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned short** _pusData16);
161
162 /**
163  * Get the hypermatrix dimensions and data
164  * @param[in] _piAddress variable address
165  * @param[out] _dims return the dimensions
166  * @param[out] _ndims return the number of dimensions
167  * @param[out] _psData16 return the short data
168  */
169 SciErr getHypermatOfInteger16(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, short** _psData16);
170
171 /**
172  * Get the hypermatrix dimensions and data
173  * @param[in] _piAddress variable address
174  * @param[out] _dims return the dimensions
175  * @param[out] _ndims return the number of dimensions
176  * @param[out] _puiData32 return the unsigned int data
177  */
178 SciErr getHypermatOfUnsignedInteger32(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned int** _puiData32);
179
180 /**
181  * Get the hypermatrix dimensions and data
182  * @param[in] _piAddress variable address
183  * @param[out] _dims return the dimensions
184  * @param[out] _ndims return the number of dimensions
185  * @param[out] _piData32 return the int data
186  */
187 SciErr getHypermatOfInteger32(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int** _piData32);
188
189 /**
190 * Get the hypermatrix dimensions and data
191 * @param[in] _piAddress variable address
192 * @param[out] _dims return the dimensions
193 * @param[out] _ndims return the number of dimensions
194 * @param[out] _pllData64 return the int data
195 */
196 SciErr getHypermatOfInteger64(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, long long** _pllData64);
197
198 /**
199 * Get the hypermatrix dimensions and data
200 * @param[in] _piAddress variable address
201 * @param[out] _dims return the dimensions
202 * @param[out] _ndims return the number of dimensions
203 * @param[out] _pullData64 return the int data
204 */
205 SciErr getHypermatOfUnsignedInteger64(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned long long** _pullData64);
206
207 /**
208  * Get the hypermatrix dimensions and data
209  * @param[in] _piAddress variable address
210  * @param[out] _dims return the dimensions
211  * @param[out] _ndims return the number of dimensions
212  * @param[out] _piBool return the boolean data
213  */
214 SciErr getHypermatOfBoolean(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int** _piBool);
215
216 /**
217  * Create a polynomial hypermatrix
218  * @param[in] _iVar variable number
219  * @param[in] _pstVarName polynomial variable name
220  * @param[in] _dims the dimensions
221  * @param[in] _ndims the number of dimensions
222  * @param[in] _piNbCoef number of polynomial coefficients for each element
223  * @param[in] _pdblReal pointer to real coefficients
224  */
225 SciErr createHypermatOfPoly(void* _pvCtx, int _iVar, char* _pstVarName, int *_dims, int _ndims, const int* _piNbCoef, const double* const* _pdblReal);
226
227 /**
228  * Create a complex polynomial hypermatrix
229  * @param[in] _iVar variable number
230  * @param[in] _pstVarName polynomial variable name
231  * @param[in] _dims the dimensions
232  * @param[in] _ndims the number of dimensions
233  * @param[in] _piNbCoef number of polynomial coefficients for each element
234  * @param[in] _pdblReal pointer to real coefficients
235  * @param[in] _pdblImg pointer to imaginary coefficients
236  */
237 SciErr createComplexHypermatOfPoly(void* _pvCtx, int _iVar, char* _pstVarName, int *_dims, int _ndims, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg);
238
239 /**
240  * Create a double hypermatrix
241  * @param[in] _iVar variable number
242  * @param[in] _dims the dimensions
243  * @param[in] _ndims the number of dimensions
244  * @param[in] _pdblReal pointer to real data
245  */
246 SciErr createHypermatOfDouble(void* _pvCtx, int _iVar, int *_dims, int _ndims, const double* _pdblReal);
247 SciErr allocHypermatOfDouble(void *_pvCtx, int _iVar, int * _dims, int _ndims, double** _pdblReal);
248
249 /**
250  * Create a complex hypermatrix
251  * @param[in] _iVar variable number
252  * @param[in] _dims the dimensions
253  * @param[in] _ndims the number of dimensions
254  * @param[in] _pdblReal pointer to real data
255  */
256 SciErr createComplexHypermatOfDouble(void* _pvCtx, int _iVar, int *_dims, int _ndims, const double* _pdblReal, const double* _pdblImg);
257
258 /**
259  * Create a boolean hypermatrix
260  * @param[in] _iVar variable number
261  * @param[in] _dims the dimensions
262  * @param[in] _ndims the number of dimensions
263  * @param[in] _piBool pointer to boolean data
264  */
265 SciErr createHypermatOfBoolean(void* _pvCtx, int _iVar, int *_dims, int _ndims, const int* _piBool);
266
267 /**
268  * Create a string hypermatrix
269  * @param[in] _iVar variable number
270  * @param[in] _dims the dimensions
271  * @param[in] _ndims the number of dimensions
272  * @param[in] _pstStrings pointer to string data
273  */
274 SciErr createHypermatOfString(void* _pvCtx, int _iVar, int *_dims, int _ndims, const char* const* _pstStrings);
275
276 /**
277  * Create a int8 hypermatrix
278  * @param[in] _iVar variable number
279  * @param[in] _dims the dimensions
280  * @param[in] _ndims the number of dimensions
281  * @param[in] _pcData8 pointer to char data
282  */
283 SciErr createHypermatOfInteger8(void* _pvCtx, int _iVar, int *_dims, int _ndims, const char* _pcData8);
284
285 /**
286  * Create a uint8 hypermatrix
287  * @param[in] _iVar variable number
288  * @param[in] _dims the dimensions
289  * @param[in] _ndims the number of dimensions
290  * @param[in] _pucData8 pointer to unsigned char data
291  */
292 SciErr createHypermatOfUnsignedInteger8(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned char* _pucData8);
293
294 /**
295  * Create a int16 hypermatrix
296  * @param[in] _iVar variable number
297  * @param[in] _dims the dimensions
298  * @param[in] _ndims the number of dimensions
299  * @param[in] _psData16 pointer to short data
300  */
301 SciErr createHypermatOfInteger16(void* _pvCtx, int _iVar, int *_dims, int _ndims, const short* _psData16);
302
303 /**
304  * Create a uint16 hypermatrix
305  * @param[in] _iVar variable number
306  * @param[in] _dims the dimensions
307  * @param[in] _ndims the number of dimensions
308  * @param[in] _pusData16 pointer to unsigned short data
309  */
310 SciErr createHypermatOfUnsignedInteger16(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned short* _pusData16);
311
312 /**
313  * Create a int32 hypermatrix
314  * @param[in] _iVar variable number
315  * @param[in] _dims the dimensions
316  * @param[in] _ndims the number of dimensions
317  * @param[in] _piData32 pointer to int data
318  */
319 SciErr createHypermatOfInteger32(void* _pvCtx, int _iVar, int *_dims, int _ndims, const int* _piData32);
320
321 /**
322  * Create a uint32 hypermatrix
323  * @param[in] _iVar variable number
324  * @param[in] _dims the dimensions
325  * @param[in] _ndims the number of dimensions
326  * @param[in] _puiData32 pointer to unsigned int data
327  */
328 SciErr createHypermatOfUnsignedInteger32(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned int* _puiData32);
329
330 /**
331 * Create a int64 hypermatrix
332 * @param[in] _iVar variable number
333 * @param[in] _dims the dimensions
334 * @param[in] _ndims the number of dimensions
335 * @param[in] _pllData64 pointer to unsigned int data
336 */
337 SciErr createHypermatOfInteger64(void *_pvCtx, int _iVar, int * _dims, int _ndims, const long long* _pllData64);
338
339 /**
340 * Create a uint64 hypermatrix
341 * @param[in] _iVar variable number
342 * @param[in] _dims the dimensions
343 * @param[in] _ndims the number of dimensions
344 * @param[in] _pullData64 pointer to unsigned int data
345 */
346 SciErr createHypermatOfUnsignedInteger64(void *_pvCtx, int _iVar, int * _dims, int _ndims, const unsigned long long* _pullData64);
347
348 #ifdef __cplusplus
349 }
350 #endif
351 #endif /* __HYPERMAT_API__ */