*Bug #5207 fixed - grand() can now return a hypermatrix
[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     SciErr allocHypermatOfDouble(void *_pvCtx, int _iVar, int * _dims, int _ndims, double** _pdblReal);
239
240     /**
241      * Create a complex hypermatrix
242      * @param[in] _iVar variable number
243      * @param[in] _dims the dimensions
244      * @param[in] _ndims the number of dimensions
245      * @param[in] _pdblReal pointer to real data
246      * @return if the operation succeeded ( 0 ) or not ( !0 )
247      */
248     SciErr createComplexHypermatOfDouble(void* _pvCtx, int _iVar, int *_dims, int _ndims, const double* _pdblReal, const double* _pdblImg);
249
250     /**
251      * Create a boolean hypermatrix
252      * @param[in] _iVar variable number
253      * @param[in] _dims the dimensions
254      * @param[in] _ndims the number of dimensions
255      * @param[in] _piBool pointer to boolean data
256      * @return if the operation succeeded ( 0 ) or not ( !0 )
257      */
258     SciErr createHypermatOfBoolean(void* _pvCtx, int _iVar, int *_dims, int _ndims, const int* _piBool);
259
260     /**
261      * Create a string hypermatrix
262      * @param[in] _iVar variable number
263      * @param[in] _dims the dimensions
264      * @param[in] _ndims the number of dimensions
265      * @param[in] _pstStrings pointer to string data
266      * @return if the operation succeeded ( 0 ) or not ( !0 )
267      */
268     SciErr createHypermatOfString(void* _pvCtx, int _iVar, int *_dims, int _ndims, const char* const* _pstStrings);
269
270     /**
271      * Create a int8 hypermatrix
272      * @param[in] _iVar variable number
273      * @param[in] _dims the dimensions
274      * @param[in] _ndims the number of dimensions
275      * @param[in] _pcData8 pointer to char data
276      * @return if the operation succeeded ( 0 ) or not ( !0 )
277      */
278     SciErr createHypermatOfInteger8(void* _pvCtx, int _iVar, int *_dims, int _ndims, const char* _pcData8);
279
280     /**
281      * Create a uint8 hypermatrix
282      * @param[in] _iVar variable number
283      * @param[in] _dims the dimensions
284      * @param[in] _ndims the number of dimensions
285      * @param[in] _pucData8 pointer to unsigned char data
286      * @return if the operation succeeded ( 0 ) or not ( !0 )
287      */
288     SciErr createHypermatOfUnsignedInteger8(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned char* _pucData8);
289
290     /**
291      * Create a int16 hypermatrix
292      * @param[in] _iVar variable number
293      * @param[in] _dims the dimensions
294      * @param[in] _ndims the number of dimensions
295      * @param[in] _psData16 pointer to short data
296      * @return if the operation succeeded ( 0 ) or not ( !0 )
297      */
298     SciErr createHypermatOfInteger16(void* _pvCtx, int _iVar, int *_dims, int _ndims, const short* _psData16);
299
300     /**
301      * Create a uint16 hypermatrix
302      * @param[in] _iVar variable number
303      * @param[in] _dims the dimensions
304      * @param[in] _ndims the number of dimensions
305      * @param[in] _pusData16 pointer to unsigned short data
306      * @return if the operation succeeded ( 0 ) or not ( !0 )
307      */
308     SciErr createHypermatOfUnsignedInteger16(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned short* _pusData16);
309
310     /**
311      * Create a int32 hypermatrix
312      * @param[in] _iVar variable number
313      * @param[in] _dims the dimensions
314      * @param[in] _ndims the number of dimensions
315      * @param[in] _piData32 pointer to int data
316      * @return if the operation succeeded ( 0 ) or not ( !0 )
317      */
318     SciErr createHypermatOfInteger32(void* _pvCtx, int _iVar, int *_dims, int _ndims, const int* _piData32);
319
320     /**
321      * Create a uint32 hypermatrix
322      * @param[in] _iVar variable number
323      * @param[in] _dims the dimensions
324      * @param[in] _ndims the number of dimensions
325      * @param[in] _puiData32 pointer to unsigned int data
326      * @return if the operation succeeded ( 0 ) or not ( !0 )
327      */
328     SciErr createHypermatOfUnsignedInteger32(void* _pvCtx, int _iVar, int *_dims, int _ndims, const unsigned int* _puiData32);
329
330 #ifdef __cplusplus
331 }
332 #endif
333 #endif /* __HYPERMAT_API__ */