JIMS: plug extraction
[scilab.git] / scilab / modules / external_objects_java / src / cpp / WrapAsDirectBufferTemplate.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 #include <jni.h>
14 #include "GiwsException.hxx"
15 #include "ScilabJavaObjectHelper.hxx"
16 /*--------------------------------------------------------------------------*/
17 #define SCILABJAVAOBJECT "org/scilab/forge/jims/ScilabJavaObject"
18 /*--------------------------------------------------------------------------*/
19 template <typename U>
20 void* ScilabJavaObjectHelper::wrapAsDirectBuffer(JavaVM * jvm_, U* address, long size, int *javaID)
21 {
22     JNIEnv * curEnv = NULL;
23     jobject dbuffer = NULL;
24     jobject ref = NULL;
25
26     jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
27     jclass cls = curEnv->FindClass(SCILABJAVAOBJECT);
28
29     jmethodID id = curEnv->GetStaticMethodID(cls, ScilabJavaObjectHelper::getFunctionNameForDB(address), "(Ljava/nio/ByteBuffer;)I");
30     dbuffer = curEnv->NewDirectByteBuffer((void*)address, (jlong)size);
31
32     ref = curEnv->NewGlobalRef(dbuffer);
33     *javaID = static_cast<jint>(curEnv->CallStaticIntMethod(cls, id, ref));
34
35     return ref;
36 }
37 /*--------------------------------------------------------------------------*/