Remove some warnings in the C code (mostly unused variables)
[scilab.git] / scilab / modules / external_objects / src / cpp / cast.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
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 #include "ScilabGateway.hxx"
14
15 namespace org_modules_external_objects
16 {
17
18 int ScilabGateway::cast(char * fname, const int envId, void * pvApiCtx)
19 {
20     SciErr err;
21     int tmpvar[2] = {0, 0};
22     int * addr = 0;
23     int idObj = 0;
24     int row = 0, col = 0;
25     int * id = 0;
26     char * objName = 0;
27     int ret = 0;
28
29     CheckInputArgument(pvApiCtx, 2, 2);
30
31     ScilabAbstractEnvironment & env = ScilabEnvironments::getEnvironment(envId);
32     ScilabGatewayOptions & options = env.getGatewayOptions();
33     OptionsHelper::setCopyOccured(false);
34     ScilabObjects::initialization(env, pvApiCtx);
35     options.setIsNew(false);
36
37     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
38     if (err.iErr)
39     {
40         throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Invalid variable: cannot retrieve the data"));
41     }
42
43     idObj = ScilabObjects::getArgumentId(addr, tmpvar, false, false, envId, pvApiCtx);
44
45     err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
46     if (err.iErr)
47     {
48         throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Invalid variable: cannot retrieve the data"));
49     }
50
51     if (ScilabObjects::isExternalClass(addr, pvApiCtx))
52     {
53         if (ScilabObjects::getEnvironmentId(addr, pvApiCtx) != envId)
54         {
55             throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Incompatible External Objects"));
56         }
57
58         err = getMatrixOfInteger32InList(pvApiCtx, addr, EXTERNAL_OBJ_ID_POSITION, &row, &col, &id);
59         if (err.iErr)
60         {
61             throw ScilabAbstractEnvironmentException(__LINE__, __FILE__, gettext("Invalid variable: cannot retrieve the data"));
62         }
63
64         try
65         {
66             ret = env.castwithid(idObj, *id);
67         }
68         catch (std::exception & e)
69         {
70             ScilabObjects::removeTemporaryVars(envId, tmpvar);
71             throw;
72         }
73     }
74     else
75     {
76         try
77         {
78             objName = ScilabObjects::getSingleString(2, pvApiCtx);
79         }
80         catch (ScilabAbstractEnvironmentException & e)
81         {
82             ScilabObjects::removeTemporaryVars(envId, tmpvar);
83             throw;
84         }
85
86         try
87         {
88             ret = env.cast(idObj, objName);
89         }
90         catch (std::exception & e)
91         {
92             freeAllocatedSingleString(objName);
93             ScilabObjects::removeTemporaryVars(envId, tmpvar);
94             throw;
95         }
96         freeAllocatedSingleString(objName);
97     }
98
99     ScilabObjects::removeTemporaryVars(envId, tmpvar);
100
101     try
102     {
103         ScilabObjects::createEnvironmentObjectAtPos(EXTERNAL_OBJECT, Rhs + 1, ret, envId, pvApiCtx);
104     }
105     catch (ScilabAbstractEnvironmentException & e)
106     {
107         env.removeobject(ret);
108         throw;
109     }
110
111     LhsVar(1) = Rhs + 1;
112     PutLhsVar();
113
114     return 0;
115 }
116 }