f96be352e202d765372a3f5b941c1167b27bd172
[scilab.git] / scilab / modules / matio / src / c / CreateMatlabVariable.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Vincent COUVERT 
4  * Copyright (C) 2010 - DIGITEO - Yann COLLETTE
5  * 
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at    
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 #include "CreateMatlabVariable.h"
15 #include "api_scilab.h"
16
17 int CreateMatlabVariable(int iVar, matvar_t *matVariable, int * parent, int item_position)
18 {
19   SciErr _SciErr;
20
21   /* To be sure isComplex is 0 or 1 */
22   matVariable->isComplex =  matVariable->isComplex != 0;
23
24   switch(matVariable->class_type)
25     {
26     case MAT_C_CELL: /* 1 */
27       CreateCellVariable(iVar, matVariable, parent, item_position);
28       break;
29     case MAT_C_STRUCT: /* 2 */
30       CreateStructVariable(iVar, matVariable, parent, item_position);
31       break;
32     case MAT_C_CHAR: /* 4 */
33       CreateCharVariable(iVar, matVariable, parent, item_position);
34       break;
35     case MAT_C_SPARSE: /* 5 */
36       CreateSparseVariable(iVar, matVariable, parent, item_position);
37       break;
38     case MAT_C_DOUBLE: /* 6 */
39     case MAT_C_SINGLE: /* 7 */
40       CreateDoubleVariable(iVar, matVariable, parent, item_position);
41       break;
42     case MAT_C_INT8: /* 8 */
43       CreateIntegerVariable(iVar, I_CHAR, matVariable, parent, item_position);
44       break;
45     case MAT_C_UINT8: /* 9 */
46       if (matVariable->isLogical != 0)
47         {
48           CreateBooleanVariable(iVar, matVariable, parent, item_position);
49         }
50       else
51         {
52           CreateIntegerVariable(iVar, I_UCHAR, matVariable, parent, item_position);
53         }
54       break;
55     case MAT_C_INT16: /* 10 */
56       CreateIntegerVariable(iVar, I_INT16, matVariable, parent, item_position);
57       break;
58     case MAT_C_UINT16: /* 11 */
59       CreateIntegerVariable(iVar, I_UINT16, matVariable, parent, item_position);
60       break;
61     case MAT_C_INT32: /* 12 */
62       CreateIntegerVariable(iVar, I_INT32, matVariable, parent, item_position);
63       break;
64     case MAT_C_UINT32: /* 13 */
65       CreateIntegerVariable(iVar, I_UINT32, matVariable, parent, item_position);
66       break;
67     case MAT_C_OBJECT: /* 3 to be written */
68     case MAT_C_INT64: /* 14: no Scilab equivalent */
69     case MAT_C_UINT64: /* 15: no Scilab equivalent */
70     case MAT_C_FUNCTION: /* 16 to be written */
71     default:
72       /* Empty matrix returned */
73       if (parent==NULL)
74         {
75           createEmptyMatrix(pvApiCtx, iVar);
76         }
77       else
78         {
79           _SciErr = createMatrixOfDoubleInList(pvApiCtx, iVar, parent, item_position, 0, 0, NULL);
80         }
81       return FALSE;
82     }
83
84   return TRUE;
85 }