JIMS: plug extraction
[scilab.git] / scilab / modules / external_objects_java / src / cpp / wrapwithcast.hpp
1 /*
2  * JIMS ( http://forge.scilab.org/index.php/p/JIMS/ ) - This file is a part of JIMS
3  * Copyright (C) 2010 - 2011 - Calixte DENIZET <calixte@contrib.scilab.org>
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 template <typename T, typename U,class V>
14 int wrapSingleWithCast(T x)
15 {
16     JavaVM *vm = getScilabJavaVM();
17     if (vm)
18     {
19         return V::wrap(vm, static_cast<U>(x));
20     }
21
22     return -1;
23 }
24 /*--------------------------------------------------------------------------*/
25 template <typename T, typename U, class V>
26 int wrapRowWithCast(T *x, int len)
27 {
28     JavaVM *vm = getScilabJavaVM ();
29     if (vm)
30     {
31         int i;
32         U *l = new U[len];
33         for (i = 0; i < len ; i++)
34         {
35             l[i] = static_cast<U>(x[i]);
36         }
37
38         return V::wrap(vm, l, len);
39     }
40
41     return -1;
42 }
43 /*--------------------------------------------------------------------------*/
44 template <typename T, typename U, class V>
45 int wrapMatWithCast(T *x, int r, int c)
46 {
47     JavaVM *vm = getScilabJavaVM ();
48     if (vm)
49     {
50         if (getMethodOfConv())
51         {
52             U **xx = new U*[r];
53             int i, j;
54             for (i = 0; i < r; i++)
55             {
56                 xx[i] = new U[c];
57                 for (j = 0; j < c; j++)
58                 {
59                     xx[i][j] = static_cast<U>(x[j * r + i]);
60                 }
61             }
62             j = V::wrap(vm, xx, r, c);
63             for (i = 0; i < r; delete [] xx[i++]);
64             delete [] xx;
65             return j;
66         }
67         else
68         {
69             U **xx = new U*[c];
70             int i, j;
71             for (i = 0; i < c; i++)
72             {
73                 xx[i] = new U[r];
74                 for (j = 0; j < r; j++)
75                 {
76                     xx[i][j] = static_cast<U>(x[i * r + j]);
77                 }
78             }
79             j = V::wrap(vm, xx, c, r);
80             for (i = 0; i < c; delete [] xx[i++]);
81             delete [] xx;
82             return j;
83         }
84     }
85
86     return -1;
87 }
88 /*--------------------------------------------------------------------------*/