f399890c3bc9540e74ad3d5408e27d355feca11b
[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-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 "doublecomplex.h"
24
25     /**************************************/
26     /*   Hypermatrices matrix functions   */
27     /**************************************/
28
29     /**
30      * Check if the variable type is double
31      * @param[in] _piAddress variable address
32      * @return 1 for true and 0 for false
33      */
34     int isHypermatType(void* _pvCtx, int* _piAddress);
35
36     /**
37      * Check if the variable is complex
38      * @param[in] _piAddress variable address
39      * @return 1 for true and 0 for false
40      */
41     int isHypermatComplex(void* _pvCtx, int* _piAddress);
42
43     /**
44      * Get the base type
45      * @param[in] _piAddress variable address
46      * @param[out] _piType return the base type
47      */
48     SciErr getHypermatType(void *_pvCtx, int *_piAddress, int *_piType);
49
50     /**
51      * Get integer precision ( SCI_xINTx )
52      * @param[in] _piAddress variable address
53      * @param[out] _piPrecison return integer precision ( SCI_xINTx )
54      */
55     SciErr getHypermatOfIntegerPrecision(void *_pvCtx, int *_piAddress, int *_piPrecision);
56
57     /**
58      * Get the hypermatrix dimensions
59      * @param[in] _piAddress variable address
60      * @param[out] _dims return the dimensions
61      * @param[out] _ndims return the number of dimensions
62      */
63     SciErr getHypermatDimensions(void *_pvCtx, int *_piAddress, int **_dims, int *_ndims);
64
65     /**
66      * Get the hypermatrix entries address
67      * @param[in] _piAddress variable address
68      * @param[out] return _piEntriesAddress entries address
69      */
70     SciErr getHypermatEntries(void* _pvCtx, int* _piAddress, int ** _piEntriesAddress);
71
72     /**
73      * Get polynomial variable name
74      * @param[in] _piAddress variable address
75      * @param[out] _pstVarName return variable name of polynomials
76      * @param[out] _piVarNameLen return length of _pstVarName
77      * @return if the operation succeeded ( 0 ) or not ( !0 )
78      */
79     SciErr getHypermatPolyVariableName(void* _pvCtx, int* _piAddress, char* _pstVarName, int* _piVarNameLen);
80
81     /**
82      * Get the hypermatrix dimensions and data
83      * @param[in] _piAddress variable address
84      * @param[out] _dims return the dimensions
85      * @param[out] _ndims return the number of dimensions
86      * @param[out] _piNbCoef return number of polynomial coefficients for each element
87      * @param[out] _pdblReal return real coefficients
88      */
89     SciErr getHypermatOfPoly(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piNbCoef, double** _pdblReal);
90
91     /**
92      * Get the hypermatrix dimensions and data
93      * @param[in] _piAddress variable address
94      * @param[out] _dims return the dimensions
95      * @param[out] _ndims return the number of dimensions
96      * @param[out] _piNbCoef return number of polynomial coefficients for each element
97      * @param[out] _pdblReal return real coefficients
98      * @param[out] _pdblImg return imaginary coefficients
99      */
100     SciErr getComplexHypermatOfPoly(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piNbCoef, double** _pdblReal, double** _pdblImg);
101
102     /**
103      * Get the hypermatrix dimensions and data
104      * @param[in] _piAddress variable address
105      * @param[out] _dims return the dimensions
106      * @param[out] _ndims return the number of dimensions
107      * @param[out] _piLength return strings lengths
108      * @param[out] _pstStrings return the strings data
109      */
110     SciErr getHypermatOfString(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piLength, char** _pstStrings);
111
112     /**
113      * Get the hypermatrix dimensions and data
114      * @param[in] _piAddress variable address
115      * @param[out] _dims return the dimensions
116      * @param[out] _ndims return the number of dimensions
117      * @param[out] _piLength return strings lengths
118      * @param[out] _pwstStrings return the strings data
119      */
120     SciErr getHypermatOfWideString(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int* _piLength, wchar_t** _pwstStrings);
121
122     /**
123      * Get the hypermatrix dimensions and data
124      * @param[in] _piAddress variable address
125      * @param[out] _dims return the dimensions
126      * @param[out] _ndims return the number of dimensions
127      * @param[out] _pdblReal return the double data
128      */
129     SciErr getHypermatOfDouble(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, double** _pdblReal);
130
131     /**
132      * Get the hypermatrix dimensions and data
133      * @param[in] _piAddress variable address
134      * @param[out] _dims return the dimensions
135      * @param[out] _ndims return the number of dimensions
136      * @param[out] _pdblReal return the real data
137      * @param[out] _pdblImg return the imaginary data
138      */
139     SciErr getComplexHypermatOfDouble(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, double** _pdblReal, double** _pdblImg);
140
141     /**
142      * Get the hypermatrix dimensions and data
143      * @param[in] _piAddress variable address
144      * @param[out] _dims return the dimensions
145      * @param[out] _ndims return the number of dimensions
146      * @param[out] _pucData8 return the unsigned char data
147      */
148     SciErr getHypermatOfUnsignedInteger8(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned char** _pucData8);
149
150     /**
151      * Get the hypermatrix dimensions and data
152      * @param[in] _piAddress variable address
153      * @param[out] _dims return the dimensions
154      * @param[out] _ndims return the number of dimensions
155      * @param[out] _pcData8 return the char data
156      */
157     SciErr getHypermatOfInteger8(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, char** _pcData8);
158
159     /**
160      * Get the hypermatrix dimensions and data
161      * @param[in] _piAddress variable address
162      * @param[out] _dims return the dimensions
163      * @param[out] _ndims return the number of dimensions
164      * @param[out] _pusData16 return the unsigned short data
165      */
166     SciErr getHypermatOfUnsignedInteger16(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned short** _pusData16);
167
168     /**
169      * Get the hypermatrix dimensions and data
170      * @param[in] _piAddress variable address
171      * @param[out] _dims return the dimensions
172      * @param[out] _ndims return the number of dimensions
173      * @param[out] _psData16 return the short data
174      */
175     SciErr getHypermatOfInteger16(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, short** _psData16);
176
177     /**
178      * Get the hypermatrix dimensions and data
179      * @param[in] _piAddress variable address
180      * @param[out] _dims return the dimensions
181      * @param[out] _ndims return the number of dimensions
182      * @param[out] _puiData32 return the unsigned int data
183      */
184     SciErr getHypermatOfUnsignedInteger32(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, unsigned int** _puiData32);
185
186     /**
187      * Get the hypermatrix dimensions and data
188      * @param[in] _piAddress variable address
189      * @param[out] _dims return the dimensions
190      * @param[out] _ndims return the number of dimensions
191      * @param[out] _piData32 return the int data
192      */
193     SciErr getHypermatOfInteger32(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int** _piData32);
194
195     /**
196      * Get the hypermatrix dimensions and data
197      * @param[in] _piAddress variable address
198      * @param[out] _dims return the dimensions
199      * @param[out] _ndims return the number of dimensions
200      * @param[out] _piBool return the boolean data
201      */
202     SciErr getHypermatOfBoolean(void* _pvCtx, int* _piAddress, int **_dims, int *_ndims, int** _piBool);
203
204     /**
205      * Create a polynomial hypermatrix
206      * @param[in] _iVar variable number
207      * @param[in] _pstVarName polynomial variable name
208      * @param[in] _dims the dimensions
209      * @param[in] _ndims the number of dimensions
210      * @param[in] _piNbCoef number of polynomial coefficients for each element
211      * @param[in] _pdblReal pointer to real coefficients
212      * @return if the operation succeeded ( 0 ) or not ( !0 )
213      */
214     SciErr createHypermatOfPoly(void* _pvCtx, int _iVar, char* _pstVarName, int *_dims, int _ndims, const int* _piNbCoef, const double* const* _pdblReal);
215
216     /**
217      * Create a complex 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      * @param[in] _pdblImg pointer to imaginary coefficients
225      * @return if the operation succeeded ( 0 ) or not ( !0 )
226      */
227     SciErr createComplexHypermatOfPoly(void* _pvCtx, int _iVar, char* _pstVarName, int *_dims, int _ndims, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg);
228
229     /**
230      * Create a double hypermatrix
231      * @param[in] _iVar variable number
232      * @param[in] _dims the dimensions
233      * @param[in] _ndims the number of dimensions
234      * @param[in] _pdblReal pointer to real data
235      * @return if the operation succeeded ( 0 ) or not ( !0 )
236      */
237     SciErr createHypermatOfDouble(void* _pvCtx, int _iVar, int *_dims, int _ndims, const double* _pdblReal);
238
239     /**
240      * Create a complex 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      * @return if the operation succeeded ( 0 ) or not ( !0 )
246      */
247     SciErr createComplexHypermatOfDouble(void* _pvCtx, int _iVar, int *_dims, int _ndims, const double* _pdblReal, const double* _pdblImg);
248
249     /**
250      * Create a boolean hypermatrix
251      * @param[in] _iVar variable number
252      * @param[in] _dims the dimensions
253      * @param[in] _ndims the number of dimensions
254      * @param[in] _piBool pointer to boolean data
255      * @return if the operation succeeded ( 0 ) or not ( !0 )
256      */
257     SciErr createHypermatOfBoolean(void* _pvCtx, int _iVar, int *_dims, int _ndims, const int* _piBool);
258
259     /**
260      * Create a string hypermatrix
261      * @param[in] _iVar variable number
262      * @param[in] _dims the dimensions
263      * @param[in] _ndims the number of dimensions
264      * @param[in] _pstStrings pointer to string data
265      * @return if the operation succeeded ( 0 ) or not ( !0 )
266      */
267     SciErr createHypermatOfString(void* _pvCtx, int _iVar, int *_dims, int _ndims, const char* const* _pstStrings);
268
269     /**
270      * Create a int8 hypermatrix
271      * @param[in] _iVar variable number
272      * @param[in] _dims the dimensions
273      * @param[in] _ndims the number of dimensions
274      * @param[in] _pcData8 pointer to char data
275      * @return if the operation succeeded ( 0 ) or not ( !0 )
276      */
277     SciErr createHypermatOfInteger8(void* _pvCtx, int _iVar, int *_dims, int _ndims, const char* _pcData8);
278
279     /**
280      * Create a uint8 hypermatrix
281      * @param[in] _iVar variable number
282      * @param[in] _dims the dimensions
283      * @param[in] _ndims the number of dimensions
284      * @param[in] _pucData8 pointer to unsigned char data
285      * @return if the operation succeeded ( 0 ) or not ( !0 )
286      */
287     SciErr createHypermatOfUnsignedInteger8(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned char* _pucData8);
288
289     /**
290      * Create a int16 hypermatrix
291      * @param[in] _iVar variable number
292      * @param[in] _dims the dimensions
293      * @param[in] _ndims the number of dimensions
294      * @param[in] _psData16 pointer to short data
295      * @return if the operation succeeded ( 0 ) or not ( !0 )
296      */
297     SciErr createHypermatOfInteger16(void* _pvCtx, int _iVar, int *_dims, int _ndims, const short* _psData16);
298
299     /**
300      * Create a uint16 hypermatrix
301      * @param[in] _iVar variable number
302      * @param[in] _dims the dimensions
303      * @param[in] _ndims the number of dimensions
304      * @param[in] _pusData16 pointer to unsigned short data
305      * @return if the operation succeeded ( 0 ) or not ( !0 )
306      */
307     SciErr createHypermatOfUnsignedInteger16(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned short* _pusData16);
308
309     /**
310      * Create a int32 hypermatrix
311      * @param[in] _iVar variable number
312      * @param[in] _dims the dimensions
313      * @param[in] _ndims the number of dimensions
314      * @param[in] _piData32 pointer to int data
315      * @return if the operation succeeded ( 0 ) or not ( !0 )
316      */
317     SciErr createHypermatOfInteger32(void* _pvCtx, int _iVar, int *_dims, int _ndims, const int* _piData32);
318
319     /**
320      * Create a uint32 hypermatrix
321      * @param[in] _iVar variable number
322      * @param[in] _dims the dimensions
323      * @param[in] _ndims the number of dimensions
324      * @param[in] _puiData32 pointer to unsigned int data
325      * @return if the operation succeeded ( 0 ) or not ( !0 )
326      */
327     SciErr createHypermatOfUnsignedInteger32(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned int* _puiData32);
328
329 #ifdef __cplusplus
330 }
331 #endif
332 #endif /* __HYPERMAT_API__ */