License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / api_scilab / src / cpp / template / api_cell.hpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Scilab Enterprises - 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 #include "gatewaystruct.hxx"
16 #include "cell.hxx"
17
18 extern "C"
19 {
20 #include "api_scilab.h"
21 }
22
23 scilabVar API_PROTO(createCellMatrix)(scilabEnv env, int dim, const int* dims)
24 {
25 #ifdef __API_SCILAB_SAFE__
26     if (dims == nullptr)
27     {
28         scilab_setInternalError(env, L"createCell", _W("dims array cannot be NULL"));
29         return nullptr;
30     }
31
32     for (int i = 0; i < dim; ++i)
33     {
34         if (dims[i] < 0)
35         {
36             scilab_setInternalError(env, L"createCell", _W("dimensions cannot be negative"));
37             return nullptr;
38         }
39     }
40 #endif
41     types::Cell* c = new types::Cell(dim, dims);
42 #ifdef __API_SCILAB_SAFE__
43     if (c == nullptr)
44     {
45         scilab_setInternalError(env, L"createCell", _W("memory allocation error"));
46         return nullptr;
47     }
48 #endif
49     return (scilabVar)c;
50 }
51
52 scilabVar API_PROTO(createCellMatrix2d)(scilabEnv env, int row, int col)
53 {
54     int dims[2] = {row, col};
55 #ifdef __API_SCILAB_SAFE__
56     for (int i = 0; i < 2; ++i)
57     {
58         if (dims[i] < 0)
59         {
60             scilab_setInternalError(env, L"createCell2d", _W("dimensions cannot be negative"));
61             return nullptr;
62         }
63     }
64 #endif
65     types::Cell* c = new types::Cell(2, dims);
66 #ifdef __API_SCILAB_SAFE__
67     if (c == nullptr)
68     {
69         scilab_setInternalError(env, L"createCell2d", _W("memory allocation error"));
70         return nullptr;
71     }
72 #endif
73     return (scilabVar)c;
74 }
75
76 scilabStatus API_PROTO(getCellValue)(scilabEnv env, scilabVar var, int* index, scilabVar* val)
77 {
78     types::Cell* c = (types::Cell*)var;
79 #ifdef __API_SCILAB_SAFE__
80     if (c->isCell() == false)
81     {
82         scilab_setInternalError(env, L"getCellValue", _W("var must be a cell variable"));
83         return STATUS_ERROR;
84     }
85 #endif
86
87     int i = c->getIndex(index);
88     *val = (scilabVar)c->get(i);
89     return STATUS_OK;
90 }
91
92 scilabStatus API_PROTO(getCell2dValue)(scilabEnv env, scilabVar var, int row, int col, scilabVar* val)
93 {
94     int index[2] = {row, col};
95     types::Cell* c = (types::Cell*)var;
96 #ifdef __API_SCILAB_SAFE__
97     if (c->isCell() == false)
98     {
99         scilab_setInternalError(env, L"getCell2dValue", _W("var must be a cell variable"));
100         return STATUS_ERROR;
101     }
102 #endif
103
104     int i = c->getIndex(index);
105     *val = (scilabVar)c->get(i);
106     return STATUS_OK;
107 }
108
109 scilabStatus API_PROTO(setCellValue)(scilabEnv env, scilabVar var, int* index, scilabVar val)
110 {
111     types::Cell* c = (types::Cell*)var;
112 #ifdef __API_SCILAB_SAFE__
113     if (c->isCell() == false)
114     {
115         scilab_setInternalError(env, L"setCellArray", _W("var must be a cell variable"));
116         return STATUS_ERROR;
117     }
118 #endif
119     int i = c->getIndex(index);
120     bool bset = c->set(i, (types::InternalType*)val) != nullptr;
121 #ifdef __API_SCILAB_SAFE__
122     if (bset == false)
123     {
124         scilab_setInternalError(env, L"setCellValue", _W("unable to set data"));
125         return STATUS_ERROR;
126     }
127 #endif
128     return bset ? STATUS_OK : STATUS_ERROR;
129 }
130
131 scilabStatus API_PROTO(setCell2dValue)(scilabEnv env, scilabVar var, int row, int col, scilabVar val)
132 {
133     int index[2] = {row, col};
134     types::Cell* c = (types::Cell*)var;
135 #ifdef __API_SCILAB_SAFE__
136     if (c->isCell() == false)
137     {
138         scilab_setInternalError(env, L"setCell2dValue", _W("var must be a cell variable"));
139         return STATUS_ERROR;
140     }
141 #endif
142     int i = c->getIndex(index);
143     bool bset = c->set(i, (types::InternalType*)val) != nullptr;
144 #ifdef __API_SCILAB_SAFE__
145     if (bset == false)
146     {
147         scilab_setInternalError(env, L"setCell2dValue", _W("unable to set data"));
148         return STATUS_ERROR;
149     }
150 #endif
151     return bset ? STATUS_OK : STATUS_ERROR;
152 }