9496f92431e351b4cbfe76bc2bb50c7fce01492a
[scilab.git] / scilab / modules / matio / src / c / CreateBooleanVariable.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - 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 "api_scilab.h"
15 #include "CreateMatlabVariable.h"
16 #include "MALLOC.h"
17 #include "localization.h"
18 #include "Scierror.h"
19 #include "sciprint.h"
20
21 #define MATIO_ERROR if(_SciErr.iErr) \
22     {                                \
23       printError(&_SciErr, 0);       \
24       return 0;                      \
25     }
26
27 int CreateBooleanVariable(int iVar, matvar_t *matVariable, int * parent, int item_position)
28 {
29   int nbRow = 0, nbCol = 0;
30   int * intPtr = NULL;
31   double * dblPtr = NULL;
32   int K = 0;
33   SciErr _SciErr;
34
35   if (matVariable->rank==2) /* 2-D array */
36     {
37       nbRow = matVariable->dims[0];
38       nbCol = matVariable->dims[1];
39       
40       if (nbRow*nbCol != 0)
41         {
42           if ((intPtr = (int*) MALLOC(sizeof(int) * nbRow * nbCol)) == NULL)
43             {
44               Scierror(999, _("%s: No more memory.\n"), "CreateBooleanVariable");
45               return FALSE;
46             }
47           
48           for (K = 0; K < nbRow*nbCol; K++)
49             {
50               intPtr[K] = ((unsigned char*)matVariable->data)[K];
51             }
52
53           if (parent==NULL)
54             {
55               _SciErr = createMatrixOfBoolean(pvApiCtx, iVar, nbRow, nbCol, intPtr); MATIO_ERROR;
56             }
57           else
58             {
59               _SciErr = createMatrixOfBooleanInList(pvApiCtx, iVar, parent, item_position, nbRow, nbCol, intPtr); MATIO_ERROR;
60             }
61           
62           FREE(intPtr);
63         }
64       else
65         {
66           if ((dblPtr = (double *)MALLOC(sizeof(double) * nbRow * nbCol)) == NULL)
67             {
68               Scierror(999, _("%s: No more memory.\n"), "CreateBooleanVariable");
69
70               return FALSE;
71             }
72           
73           for (K = 0; K < nbRow*nbCol; K++)
74             {
75               dblPtr[K] = ((unsigned char*)matVariable->data)[K];
76             }
77
78           if (parent==NULL)
79             {
80               _SciErr = createMatrixOfDouble(pvApiCtx, iVar, nbRow, nbCol, dblPtr);
81             }
82           else
83             {
84               _SciErr = createMatrixOfDoubleInList(pvApiCtx, iVar, parent, item_position, nbRow, nbCol, dblPtr);
85             }
86
87           FREE(dblPtr);
88         }
89     }
90   else /* Multi-dimension array -> Scilab HyperMatrix */
91     {
92       CreateHyperMatrixVariable(iVar, MATRIX_OF_BOOLEAN_DATATYPE,  NULL, &matVariable->rank, matVariable->dims, matVariable->data, NULL, parent, item_position);
93     }
94   
95   return TRUE;
96 }
97