rewrite hypermat api for scilab 6
[scilab.git] / scilab / modules / api_scilab / tests / unit_tests / hypermatExample.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - Scilab Enterprises
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
13 #include "api_scilab.h"
14 #include "localization.h"
15
16 int hypermatExample(char *fname, void* pvApiCtx)
17 {
18     SciErr sciErr;
19     int* piAddr = NULL;
20     int iType   = 0;
21     int iRet    = 0;
22
23     CheckInputArgument(pvApiCtx, 1, 1);
24     CheckOutputArgument(pvApiCtx, 0, 1);
25
26     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
27     if (sciErr.iErr)
28     {
29         printError(&sciErr, 0);
30         return 0;
31     }
32
33     if (isEmptyMatrix(pvApiCtx, piAddr))
34     {
35         iRet = createEmptyMatrix(pvApiCtx, nbInputArgument(pvApiCtx) + 1);
36         if (iRet)
37         {
38             return iRet;
39         }
40
41         AssignOutputVariable(pvApiCtx, 1) = 0;
42     }
43     else if (isHypermatType(pvApiCtx, piAddr))
44     {
45         int * dims = NULL;
46         int ndims;
47         double* pdblReal = NULL;
48         double* pdblImg = NULL;
49
50         if (isHypermatComplex(pvApiCtx, piAddr))
51         {
52             sciErr = getComplexHypermatOfDouble(pvApiCtx, piAddr, &dims, &ndims, &pdblReal, &pdblImg);
53             if (sciErr.iErr)
54             {
55                 printError(&sciErr, 0);
56                 return sciErr.iErr;
57             }
58
59             sciErr = createComplexHypermatOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, dims, ndims, pdblReal, pdblImg);
60             if (sciErr.iErr)
61             {
62                 printError(&sciErr, 0);
63                 return sciErr.iErr;
64             }
65         }
66         else
67         {
68             sciErr = getHypermatOfDouble(pvApiCtx, piAddr, &dims, &ndims, &pdblReal);
69             if (sciErr.iErr)
70             {
71                 printError(&sciErr, 0);
72                 return sciErr.iErr;
73             }
74
75             sciErr = createHypermatOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, dims, ndims, pdblReal);
76             if (sciErr.iErr)
77             {
78                 printError(&sciErr, 0);
79                 return sciErr.iErr;
80             }
81         }
82
83         AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
84     }
85
86     return 0;
87 }