Bug 12232 fixed: fix several memleaks in various filler
[scilab.git] / scilab / modules / graphic_objects / src / cpp / getGraphicObjectProperty.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
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-en.txt
10  *
11  */
12
13 extern "C"
14 {
15 #include <stdlib.h>
16 #include <string.h>
17 #include "getGraphicObjectProperty.h"
18 #include "graphicObjectProperties.h"
19 #include "getScilabJavaVM.h"
20 #include <stdio.h>
21 }
22
23 #include "CallGraphicController.hxx"
24 #include "DataController.hxx"
25
26 using namespace org_scilab_modules_graphic_objects;
27
28 void getGraphicObjectProperty(char const* _pstID, int _iName, _ReturnType_ _returnType, void **_pvData)
29 {
30     // do not perform anything if the id is undefined
31     if (_pstID == NULL)
32     {
33         return;
34     }
35
36     /* All the Data model properties have the DATA_MODEL prefix */
37     if (_iName == __GO_DATA_MODEL__
38         || _iName == __GO_DATA_MODEL_COORDINATES__
39         || _iName == __GO_DATA_MODEL_X__
40         || _iName == __GO_DATA_MODEL_Y__
41         || _iName == __GO_DATA_MODEL_Z__
42         || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT__
43         || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT__
44         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT__
45         || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__
46         || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__
47         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__
48         || _iName == __GO_DATA_MODEL_NUM_ELEMENTS__
49         || _iName == __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__
50         || _iName == __GO_DATA_MODEL_NUM_VERTICES_PER_GON__
51         || _iName == __GO_DATA_MODEL_NUM_GONS__
52         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SET__
53         || _iName == __GO_DATA_MODEL_COLORS__
54         || _iName == __GO_DATA_MODEL_NUM_COLORS__
55         || _iName == __GO_DATA_MODEL_NUM_VERTICES__
56         || _iName == __GO_DATA_MODEL_NUM_INDICES__
57         || _iName == __GO_DATA_MODEL_INDICES__
58         || _iName == __GO_DATA_MODEL_VALUES__
59         || _iName == __GO_DATA_MODEL_FEC_TRIANGLES__
60         || _iName == __GO_DATA_MODEL_NUM_X__
61         || _iName == __GO_DATA_MODEL_NUM_Y__
62         || _iName == __GO_DATA_MODEL_NUM_Z__
63         || _iName == __GO_DATA_MODEL_GRID_SIZE__
64         || _iName == __GO_DATA_MODEL_X_DIMENSIONS__
65         || _iName == __GO_DATA_MODEL_Y_DIMENSIONS__
66         || _iName == __GO_DATA_MODEL_MATPLOT_BOUNDS__
67         || _iName == __GO_DATA_MODEL_MATPLOT_TYPE__
68         )
69     {
70         DataController::getGraphicObjectProperty(_pstID, _iName, _pvData);
71         return;
72     }
73
74     try
75     {
76         switch (_returnType)
77         {
78         case jni_string:
79         {
80             *(_pvData) = CallGraphicController::getGraphicObjectPropertyAsString(getScilabJavaVM(), _pstID, _iName);
81             return;
82         }
83         case jni_string_vector:
84         {
85             *_pvData = CallGraphicController::getGraphicObjectPropertyAsStringVector(getScilabJavaVM(), _pstID, _iName);
86             return;
87         }
88         case jni_double:
89         {
90             ((double *)*_pvData)[0] = (double)CallGraphicController::getGraphicObjectPropertyAsDouble(getScilabJavaVM(), _pstID, _iName);
91             return;
92         }
93         case jni_double_vector:
94         {
95             *_pvData = CallGraphicController::getGraphicObjectPropertyAsDoubleVector(getScilabJavaVM(), _pstID, _iName);
96             return;
97         }
98         case jni_bool:
99         {
100             ((int *)*_pvData)[0] = (int)CallGraphicController::getGraphicObjectPropertyAsBoolean(getScilabJavaVM(), _pstID, _iName);
101             return;
102         }
103         case jni_bool_vector:
104         {
105             *_pvData = CallGraphicController::getGraphicObjectPropertyAsBooleanVector(getScilabJavaVM(), _pstID, _iName);
106             return;
107         }
108         case jni_int:
109         {
110             ((int *)*_pvData)[0] = CallGraphicController::getGraphicObjectPropertyAsInteger(getScilabJavaVM(), _pstID, _iName);
111             return;
112         }
113         case jni_int_vector:
114         {
115             *_pvData = CallGraphicController::getGraphicObjectPropertyAsIntegerVector(getScilabJavaVM(), _pstID, _iName);
116             return;
117         }
118         default:
119             *_pvData = NULL;
120             return;
121         }
122     }
123     catch (std::exception &e)
124     {
125         e.what();
126         // If we have an exception, return null to scilab to manage error.
127         *_pvData = NULL;
128         return;
129     }
130
131 }
132
133
134 void releaseGraphicObjectProperty(int _iName, void * _pvData, enum _ReturnType_ _returnType, int numElements)
135 {
136
137     /* All the Data model properties have the DATA_MODEL prefix */
138     if (_iName == __GO_DATA_MODEL__
139         || _iName == __GO_DATA_MODEL_COORDINATES__
140         || _iName == __GO_DATA_MODEL_X__
141         || _iName == __GO_DATA_MODEL_Y__
142         || _iName == __GO_DATA_MODEL_Z__
143         || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT__
144         || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT__
145         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT__
146         || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__
147         || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__
148         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__
149         || _iName == __GO_DATA_MODEL_NUM_ELEMENTS__
150         || _iName == __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__
151         || _iName == __GO_DATA_MODEL_NUM_VERTICES_PER_GON__
152         || _iName == __GO_DATA_MODEL_NUM_GONS__
153         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SET__
154         || _iName == __GO_DATA_MODEL_COLORS__
155         || _iName == __GO_DATA_MODEL_NUM_COLORS__
156         || _iName == __GO_DATA_MODEL_NUM_VERTICES__
157         || _iName == __GO_DATA_MODEL_NUM_INDICES__
158         || _iName == __GO_DATA_MODEL_INDICES__
159         || _iName == __GO_DATA_MODEL_VALUES__
160         || _iName == __GO_DATA_MODEL_FEC_TRIANGLES__
161         || _iName == __GO_DATA_MODEL_NUM_X__
162         || _iName == __GO_DATA_MODEL_NUM_Y__
163         || _iName == __GO_DATA_MODEL_NUM_Z__
164         || _iName == __GO_DATA_MODEL_GRID_SIZE__
165         || _iName == __GO_DATA_MODEL_X_DIMENSIONS__
166         || _iName == __GO_DATA_MODEL_Y_DIMENSIONS__
167         || _iName == __GO_DATA_MODEL_MATPLOT_BOUNDS__
168         || _iName == __GO_DATA_MODEL_MATPLOT_TYPE__
169         )
170     {
171         // passed by reference, do not free them
172         return;
173     }
174
175     switch (_returnType)
176     {
177     case jni_string:
178     {
179         delete[] (char*) _pvData;
180         return;
181     }
182     case jni_string_vector:
183     {
184         char** data = (char**) _pvData;
185         for (int i = 0; i < numElements; ++i)
186         {
187             delete[] data[i];
188         }
189         delete[] data;
190         return;
191     }
192     case jni_double:
193     {
194         // passed by value
195         return;
196     }
197     case jni_double_vector:
198     {
199         delete[] (double*) _pvData;
200         return;
201     }
202     case jni_bool:
203     {
204         // passed by value
205         return;
206     }
207     case jni_bool_vector:
208     {
209         delete[] (int*) _pvData;
210         return;
211     }
212     case jni_int:
213     {
214         // passed by value
215         return;
216     }
217     case jni_int_vector:
218     {
219         delete[] (int*) _pvData;
220         return;
221     }
222     default:
223         return;
224     }
225
226 }
227