License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / api_scilab / includes / api_stack_double.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  */
14
15 #ifndef __STACK_DOUBLE_API__
16 #define __STACK_DOUBLE_API__
17
18 #if !defined(__INTERNAL_API_SCILAB__)
19 #error Do not include api_stack_double.h. Include api_scilab.h instead.
20 #endif
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 /*******************************/
27 /*   double matrix functions   */
28 /*******************************/
29 /**
30  * Get double variable data
31  * @param[in] _piAddress variable address
32  * @param[out] _piRows return number of rows
33  * @param[out] _piCols return number of columns
34  * @param[out] _pdblReal return pointer to real data
35  * @return if the operation succeeded ( 0 ) or not ( !0 )
36  */
37 SciErr getMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal);
38
39 /**
40  * Get complex double variable data
41  * @param[in] _piAddress variable address
42  * @param[out] _piRows return number of rows
43  * @param[out] _piCols return number of columns
44  * @param[out] _pdblReal return pointer to real data
45  * @param[out] _pdblImg return pointer to imaginary data
46  * @return if the operation succeeded ( 0 ) or not ( !0 )
47  */
48 SciErr getComplexMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg);
49
50 #ifdef __DOUBLECOMPLEX_H__
51 /**
52  * Get double variable data
53  * @param[in] _piAddress variable address
54  * @param[out] _piRows return number of row
55  * @param[out] _piCols return number of column
56  * @param[out] _pdblZ return pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
57  * @return if the operation succeeded ( 0 ) or not ( !0 )
58  */
59 SciErr getComplexZMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, doublecomplex** _pdblZ);
60 #endif
61
62 /**
63  * Get double variable data
64  * @param[in] _piAddress variable address
65  * @param[out] _piRows return number of rows
66  * @param[out] _piCols return number of columns
67  * @param[out] _piReal return pointer to real data as integer
68  * @return if the operation succeeded ( 0 ) or not ( !0 )
69  */
70 SciErr getMatrixOfDoubleAsInteger(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int** _piReal);
71
72 /**
73  * Get double variable data
74  * @param[in] _piAddress variable address
75  * @param[out] _piRows return number of rows
76  * @param[out] _piCols return number of columns
77  * @param[out] _piReal return pointer to real data as integer
78  * @param[out] _piImg return pointer to imaginary data as integer
79  * @return if the operation succeeded ( 0 ) or not ( !0 )
80  */
81 SciErr getComplexMatrixOfDoubleAsInteger(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int** _piReal, int** _piImg);
82
83 /**
84  * Allocate a double variable
85  * @param[in] _iVar variable number
86  * @param[in] _iRows number of rows
87  * @param[in] _iCols number of columns
88  * @param[out] _pdblReal return pointer to real data
89  * @return if the operation succeeded ( 0 ) or not ( !0 )
90  */
91 SciErr allocMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, double** _pdblReal);
92
93 /**
94  * Allocate a complex double variable
95  * @param[in] _iVar variable number
96  * @param[in] _iRows number of rows
97  * @param[in] _iCols number of columns
98  * @param[out] _pdblReal return pointer to real data
99  * @param[out] _pdblImg return pointer to imaginary data
100  * @return if the operation succeeded ( 0 ) or not ( !0 )
101  */
102 SciErr allocComplexMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg);
103
104 /**
105  * Allocate a double variable
106  * @param[in] _iVar variable number
107  * @param[in] _iRows number of rows
108  * @param[in] _iCols number of columns
109  * @param[out] _piReal return pointer to integer real data
110  * @return if the operation succeeded ( 0 ) or not ( !0 )
111  */
112 SciErr allocMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int** _piReal);
113
114 /**
115  * Allocate a complex double variable
116  * @param[in] _iVar variable number
117  * @param[in] _iRows number of rows
118  * @param[in] _iCols number of columns
119  * @param[out] _piReal return pointer to integer real data
120  * @param[out] _piImg return pointer to integer imaginary data
121  * @return if the operation succeeded ( 0 ) or not ( !0 )
122  */
123 SciErr allocComplexMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int** _piReal, int** _piImg);
124
125 #ifdef __DOUBLECOMPLEX_H__
126 /**
127  * Allocate a doublecomplex variable
128  * @param[in] _iVar variable number
129  * @param[in] _iRows number of rows
130  * @param[in] _iCols number of columns
131  * @param[out] _pdblData return pointer to doublecomplex data
132  * @return if the operation succeeded ( 0 ) or not ( !0 )
133  */
134 SciErr allocComplexZMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const doublecomplex** _pdblData);
135 #endif
136
137 /**
138  * Create a double variable
139  * @param[in] _iVar variable number
140  * @param[in] _iRows number of rows
141  * @param[in] _iCols number of columns
142  * @param[in] _pdblReal pointer to real data
143  * @return if the operation succeeded ( 0 ) or not ( !0 )
144  */
145 SciErr createMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const double* _pdblReal);
146
147 /**
148  * Create a complex double variable
149  * @param[in] _iVar variable number
150  * @param[in] _iRows number of rows
151  * @param[in] _iCols number of columns
152  * @param[in] _pdblReal pointer to real data
153  * @param[in] _pdblImg pointer to imaginary data
154  * @return if the operation succeeded ( 0 ) or not ( !0 )
155  */
156 SciErr createComplexMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
157
158 /**
159  * Create a double variable
160  * @param[in] _iVar variable number
161  * @param[in] _iRows number of rows
162  * @param[in] _iCols number of columns
163  * @param[in] _piReal pointer to integer real data
164  * @return if the operation succeeded ( 0 ) or not ( !0 )
165  */
166 SciErr createMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, const int* _piReal);
167
168 /**
169  * Create a complex double variable
170  * @param[in] _iVar variable number
171  * @param[in] _iRows number of rows
172  * @param[in] _iCols number of columns
173  * @param[in] _piReal pointer to integer real data
174  * @param[in] _piImg pointer to integer imaginary data
175  * @return if the operation succeeded ( 0 ) or not ( !0 )
176  */
177 SciErr createComplexMatrixOfDoubleAsInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, const int* _piReal, const int* _piImg);
178
179 #ifdef __DOUBLECOMPLEX_H__
180 /**
181  * Create a complex double variable
182  * @param[in] _iVar variable number
183  * @param[in] _iRows number of rows
184  * @param[in] _iCols number of columns
185  * @param[in] _pdblData pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
186  * @return if the operation succeeded ( 0 ) or not ( !0 )
187  */
188 SciErr createComplexZMatrixOfDouble(void* _pvCtx, int _iVar, int _iRows, int _iCols, const doublecomplex* _pdblData);
189 #endif
190
191 /**
192  * Create a named double variable
193  * @param[in] _pstName variable name
194  * @param[in] _iRows number of rows
195  * @param[in] _iCols number of columns
196  * @param[in] _pdblReal pointer to real data
197  * @return if the operation succeeded ( 0 ) or not ( !0 )
198  */
199 SciErr createNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const double* _pdblReal);
200
201 /**
202  * Create a named complex double variable
203  * @param[in] _pstName variable name
204  * @param[in] _iRows mumber of rows
205  * @param[in] _iCols number of columns
206  * @param[in] _pdblReal pointer to real data
207  * @param[in] _pdblImg pointer to imaginary data
208  * @return if the operation succeeded ( 0 ) or not ( !0 )
209  */
210 SciErr createNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg);
211
212 #ifdef __DOUBLECOMPLEX_H__
213 /**
214  * Create a named complex double variable
215  * @param[in] _pstName variable name
216  * @param[in] _iRows number of rows
217  * @param[in] _iCols number of columns
218  * @param[in] _pdblData pointer to Z format data ( Real1, Img1, Real2, Img2, ... )
219  * @return if the operation succeeded ( 0 ) or not ( !0 )
220  */
221 SciErr createNamedComplexZMatrixOfDouble(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const doublecomplex* _pdblData);
222 #endif
223
224 /**
225  * Get double named variable data
226  * @param[in] _pstName variable name
227  * @param[out] _piRows return number of rows
228  * @param[out] _piCols return number of columns
229  * @param[out] _pdblReal return real data
230  * @return if the operation succeeded ( 0 ) or not ( !0 )
231  */
232 SciErr readNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal);
233
234 /**
235  * Get double named variable data
236  * @param[in] _pstName variable name
237  * @param[out] _piRows return number of rows
238  * @param[out] _piCols return number of columns
239  * @param[out] _pdblReal return real data
240  * @param[out] _pdblImg return imaginary data
241  * @return if the operation succeeded ( 0 ) or not ( !0 )
242  */
243 SciErr readNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg);
244
245 /*shortcut functions*/
246
247
248 /**
249  * Check if the variable type is double
250  * @param[in] _piAddress variable address
251  * @return 1 for true and 0 for false
252  */
253 int isDoubleType(void* _pvCtx, int* _piAddress);
254
255 /**
256  * Check if the named variable type is double
257  * @param[in] _pstName variable name
258  * @return 1 for true and 0 for false
259  */
260 int isNamedDoubleType(void* _pvCtx, const char* _pstName);
261
262 /**
263  * Get scalar double value
264  * @param[in] _piAddress variable address
265  * @param[out] _pdblReal return real value
266  * @return if the operation succeeded ( 0 ) or not ( !0 )
267  */
268 int getScalarDouble(void* _pvCtx, int* _piAddress, double* _pdblReal);
269
270 /**
271  * Get scalar complex double value
272  * @param[in] _piAddress variable address
273  * @param[out] _pdblReal return real part
274  * @param[out] _pdblImg return imaginary part
275  * @return if the operation succeeded ( 0 ) or not ( !0 )
276  */
277 int getScalarComplexDouble(void* _pvCtx, int* _piAddress, double* _pdblReal, double* _pdblImg);
278
279 /**
280  * Get scalar double value from a named variable
281  * @param[in] _pstName variable name
282  * @param[out] _pdblReal return real value
283  * @return if the operation succeeded ( 0 ) or not ( !0 )
284  */
285 int getNamedScalarDouble(void* _pvCtx, const char* _pstName, double* _pdblReal);
286
287 /**
288  * Get scalar complex double value from a named variable
289  * @param[in] _pstName variable name
290  * @param[out] _pdblReal return real part
291  * @param[out] _pdblImg return imaginary part
292  * @return if the operation succeeded ( 0 ) or not ( !0 )
293  */
294 int getNamedScalarComplexDouble(void* _pvCtx, const char* _pstName, double* _pdblReal, double* _pdblImg);
295
296 /**
297  * Create a scalar double variable
298  * @param[in] _iVar variable number
299  * @param[in] _dblReal real value
300  * @return if the operation succeeded ( 0 ) or not ( !0 )
301  */
302 int createScalarDouble(void* _pvCtx, int _iVar, double _dblReal);
303
304 /**
305  * Create a scalar complex double variable
306  * @param[in] _iVar variable number
307  * @param[in] _dblReal real part
308  * @param[in] _dblImg imaginary part
309  * @return if the operation succeeded ( 0 ) or not ( !0 )
310  */
311 int createScalarComplexDouble(void* _pvCtx, int _iVar, double _dblReal, double _dblImg);
312
313 /**
314  * Create a named scalar double variable
315  * @param[in] _pstName variable name
316  * @param[in] _dblReal real value
317  * @return if the operation succeeded ( 0 ) or not ( !0 )
318  */
319 int createNamedScalarDouble(void* _pvCtx, const char* _pstName, double _dblReal);
320
321 /**
322  * Create a named scalar complex double variable
323  * @param[in] _pstName variable name
324  * @param[in] _dblReal real part
325  * @param[in] _dblImg imaginary part
326  * @return if the operation succeeded ( 0 ) or not ( !0 )
327  */
328 int createNamedScalarComplexDouble(void* _pvCtx, const char* _pstName, double _dblReal, double _dblImg);
329
330 /**
331  * Create scalar double variable from integer value
332  * @param[in] _iVar variable number
333  * @param[in] _iReal real value
334  * @return if the operation successed (0) or not ( !0 )
335  */
336 int createScalarDoubleFromInteger(void* _pvCtx, int _iVar, int _iReal);
337
338 /**
339  * Create scalar complex double variable from integer value
340  * @param[in] _iVar variable number
341  * @param[in] _iReal real value
342  * @param[in] _iImg imaginary value
343  * @return if the operation successed (0) or not ( !0 )
344  */
345 int createScalarComplexDoubleFromInteger(void* _pvCtx, int _iVar, int _iReal, int _iImg);
346
347 /**
348  * Create matrix of double variable from integer value
349  * @param[in] _iVar variable number
350  * @param[in] _iRows Number of row
351  * @param[in] _iCols Number of column
352  * @param[in] _piReal real value
353  * @return if the operation successed (0) or not ( !0 )
354  */
355 int createMatrixOfDoubleFromInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int* _piReal);
356
357 /**
358  * Create matrix of complex double variable from integer value
359  * @param[in] _iVar variable number
360  * @param[in] _iRows Number of row
361  * @param[in] _iCols Number of column
362  * @param[in] _piReal real value
363  * @param[in] _piImg imaginary value
364  * @return if the operation successed (0) or not ( !0 )
365  */
366 int createMatrixOfComplexDoubleFromInteger(void* _pvCtx, int _iVar, int _iRows, int _iCols, int* _piReal, int* _piImg);
367
368 #ifdef __cplusplus
369 }
370 #endif
371 #endif /* __STACK_DOUBLE_API__ */