JIMS: plug extraction
[scilab.git] / scilab / modules / external_objects_java / src / cpp / wrap.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 /*
14  * Template to handle several wrapping operations
15  */
16 /*--------------------------------------------------------------------------*/
17 #include "ScilabJavaObject.hxx"
18 #include "GiwsException.hxx"
19
20 #include "JIMSwrapunwrap.h"
21 /*--------------------------------------------------------------------------*/
22 template <typename U, class V>
23 int wrapSingle(U x)
24 {
25     JavaVM *vm = getScilabJavaVM ();
26     if (vm)
27     {
28         return V::wrap(vm, x);
29     }
30
31     return -1;
32 }
33 /*--------------------------------------------------------------------------*/
34 template <typename U, class V>
35 int wrapRow(U *x, int len)
36 {
37     JavaVM *vm = getScilabJavaVM ();
38     if (vm)
39     {
40         return V::wrap(vm, x, len);
41     }
42
43     return -1;
44 }
45 /*--------------------------------------------------------------------------*/
46 template <typename U, class V>
47 int wrapMat(U *x, int r, int c)
48 {
49     JavaVM *vm = getScilabJavaVM ();
50     if (vm)
51     {
52         if (getMethodOfConv())
53         {
54             U **xx = new U*[r];
55             int i, j;
56             for (i = 0; i < r; i++)
57             {
58                 xx[i] = new U[c];
59                 for (j = 0; j < c; j++)
60                 {
61                     xx[i][j] = x[j * r + i];
62                 }
63             }
64             j = V::wrap(vm, xx, r, c);
65             for (i = 0; i < r; delete [] xx[i++]);
66             delete [] xx;
67             return j;
68         }
69         else
70         {
71             U **xx = new U*[c];
72             int i;
73             xx[0] = x;
74             for (i = 1; i < c; xx[i] = xx[i++ - 1] + r);
75             i = V::wrap(vm, xx, c, r);
76             delete [] xx;
77             return i;
78         }
79     }
80
81     return -1;
82 }
83 /*--------------------------------------------------------------------------*/