Skip to content

Commit

Permalink
[FIX] Fixed visp_java module compilation when namespace is enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
LAGNEAU Romain committed Jan 27, 2025
1 parent a480b0b commit 4c6465c
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 140 deletions.
145 changes: 75 additions & 70 deletions modules/java/generator/src/cpp/VpImageRGBa.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <cstring>
#include <sstream>
#include <visp3/core/vpConfig.h>
#include <visp3/core/vpImage.h>
#include <visp3/core/vpRGBa.h>

Expand All @@ -11,86 +12,90 @@ extern "C" {
#endif
#include <jni.h>

#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif

// Java Method: VpImageRGBa()
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa__(JNIEnv *env, jclass, jstring type)
{
(void)env;
(void)type;
return (jlong) new vpImage<vpRGBa>();
}
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa__(JNIEnv *env, jclass, jstring type)
{
(void)env;
(void)type;
return (jlong) new vpImage<vpRGBa>();
}

// Java Method: VpImageRGBa(int r, int c)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa__II(JNIEnv *env, jclass, jint r, jint c)
{
(void)env;
return (jlong) new vpImage<vpRGBa>(r, c);
}
// Java Method: VpImageRGBa(int r, int c)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa__II(JNIEnv *env, jclass, jint r, jint c)
{
(void)env;
return (jlong) new vpImage<vpRGBa>(r, c);
}

// Java Method: VpImageRGBa(int r, int c, byte val)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa__IICCCC(JNIEnv *env, jclass, jint r, jint c,
jchar R, jchar G, jchar B, jchar A)
{
(void)env;
vpRGBa val(R, G, B, A);
return (jlong) new vpImage<vpRGBa>(r, c, val);
}
// Java Method: VpImageRGBa(int r, int c, byte val)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa__IICCCC(JNIEnv *env, jclass, jint r, jint c,
jchar R, jchar G, jchar B, jchar A)
{
(void)env;
vpRGBa val(R, G, B, A);
return (jlong) new vpImage<vpRGBa>(r, c, val);
}

// Java Method: VpImageRGBa(byte[] array, int height, int width, boolean copyData)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa___3BIIZ(JNIEnv *env, jclass, jbyteArray arr,
jint h, jint w, jboolean copyData)
{
jbyte *array = env->GetByteArrayElements(arr, nullptr);
// Java Method: VpImageRGBa(byte[] array, int height, int width, boolean copyData)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageRGBa_n_1VpImageRGBa___3BIIZ(JNIEnv *env, jclass, jbyteArray arr,
jint h, jint w, jboolean copyData)
{
jbyte *array = env->GetByteArrayElements(arr, nullptr);

return (jlong) new vpImage<vpRGBa>((vpRGBa *const)array, (const unsigned int)h, (const unsigned int)w, copyData);
return (jlong) new vpImage<vpRGBa>((vpRGBa *const)array, (const unsigned int)h, (const unsigned int)w, copyData);

// be memory friendly
env->ReleaseByteArrayElements(arr, array, 0);
}
// be memory friendly
env->ReleaseByteArrayElements(arr, array, 0);
}

// Java Method: getCols()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageRGBa_n_1cols(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
return me->getCols();
}
// Java Method: getCols()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageRGBa_n_1cols(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
return me->getCols();
}

// Java Method: getRows()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageRGBa_n_1rows(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
return me->getRows();
}
// Java Method: getRows()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageRGBa_n_1rows(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
return me->getRows();
}

// Java Method: getPixel(int i, int j)
JNIEXPORT jbyteArray JNICALL Java_org_visp_core_VpImageRGBa_n_1getPixel(JNIEnv *env, jclass, jlong address, jint i,
jint j)
{
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
vpRGBa val = (*me)(i, j);
jbyteArray ret = env->NewByteArray(4);
unsigned char temp[] = {val.R, val.G, val.B, val.A};
env->SetByteArrayRegion(ret, 0, 4, (jbyte *)temp);
return ret;
}
// Java Method: getPixel(int i, int j)
JNIEXPORT jbyteArray JNICALL Java_org_visp_core_VpImageRGBa_n_1getPixel(JNIEnv *env, jclass, jlong address, jint i,
jint j)
{
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
vpRGBa val = (*me)(i, j);
jbyteArray ret = env->NewByteArray(4);
unsigned char temp[] = { val.R, val.G, val.B, val.A };
env->SetByteArrayRegion(ret, 0, 4, (jbyte *)temp);
return ret;
}

// Java Method: getPixels()
JNIEXPORT jbyteArray JNICALL Java_org_visp_core_VpImageRGBa_n_1getPixels(JNIEnv *env, jclass, jlong address)
{
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
jbyteArray ret = env->NewByteArray(me->getNumberOfPixel() * 4);
env->SetByteArrayRegion(ret, 0, me->getNumberOfPixel() * 4, (jbyte *)me->bitmap);
return ret;
}
// Java Method: getPixels()
JNIEXPORT jbyteArray JNICALL Java_org_visp_core_VpImageRGBa_n_1getPixels(JNIEnv *env, jclass, jlong address)
{
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
jbyteArray ret = env->NewByteArray(me->getNumberOfPixel() * 4);
env->SetByteArrayRegion(ret, 0, me->getNumberOfPixel() * 4, (jbyte *)me->bitmap);
return ret;
}

// Java Method: dump()
JNIEXPORT jstring JNICALL Java_org_visp_core_VpImageRGBa_n_1dump(JNIEnv *env, jclass, jlong address)
{
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
std::stringstream ss;
ss << *me;
return env->NewStringUTF(ss.str().c_str());
}
// Java Method: dump()
JNIEXPORT jstring JNICALL Java_org_visp_core_VpImageRGBa_n_1dump(JNIEnv *env, jclass, jlong address)
{
vpImage<vpRGBa> *me = (vpImage<vpRGBa> *)address; // TODO: check for nullptr
std::stringstream ss;
ss << *me;
return env->NewStringUTF(ss.str().c_str());
}

} // extern "C"
135 changes: 70 additions & 65 deletions modules/java/generator/src/cpp/VpImageUChar.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <cstring>
#include <sstream>
#include <visp3/core/vpConfig.h>
#include <visp3/core/vpImage.h>
typedef unsigned char u_char;

Expand All @@ -11,81 +12,85 @@ extern "C" {
#endif
#include <jni.h>

#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif

// Java Method: VpImageUChar()
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar__(JNIEnv *env, jclass, jstring type)
{
(void)env;
(void)type;
return (jlong) new vpImage<u_char>();
}
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar__(JNIEnv *env, jclass, jstring type)
{
(void)env;
(void)type;
return (jlong) new vpImage<u_char>();
}

// Java Method: VpImageUChar(int r, int c)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar__II(JNIEnv *env, jclass, jint r, jint c)
{
(void)env;
return (jlong) new vpImage<u_char>(r, c);
}
// Java Method: VpImageUChar(int r, int c)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar__II(JNIEnv *env, jclass, jint r, jint c)
{
(void)env;
return (jlong) new vpImage<u_char>(r, c);
}

// Java Method: VpImageUChar(int r, int c, byte val)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar__IIB(JNIEnv *env, jclass, jint r, jint c,
jbyte value)
{
(void)env;
return (jlong) new vpImage<u_char>(r, c, (u_char)value);
}
// Java Method: VpImageUChar(int r, int c, byte val)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar__IIB(JNIEnv *env, jclass, jint r, jint c,
jbyte value)
{
(void)env;
return (jlong) new vpImage<u_char>(r, c, (u_char)value);
}

// Java Method: VpImageUChar(byte[] array, int height, int width, boolean copyData)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar___3BIIZ(JNIEnv *env, jclass, jbyteArray arr,
jint h, jint w, jboolean copyData)
{
jbyte *array = env->GetByteArrayElements(arr, nullptr);
// Java Method: VpImageUChar(byte[] array, int height, int width, boolean copyData)
JNIEXPORT jlong JNICALL Java_org_visp_core_VpImageUChar_n_1VpImageUChar___3BIIZ(JNIEnv *env, jclass, jbyteArray arr,
jint h, jint w, jboolean copyData)
{
jbyte *array = env->GetByteArrayElements(arr, nullptr);

return (jlong) new vpImage<u_char>((u_char *const)array, (const unsigned int)h, (const unsigned int)w, copyData);
return (jlong) new vpImage<u_char>((u_char *const)array, (const unsigned int)h, (const unsigned int)w, copyData);

// be memory friendly
env->ReleaseByteArrayElements(arr, array, 0);
}
// be memory friendly
env->ReleaseByteArrayElements(arr, array, 0);
}

// Java Method: getCols()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageUChar_n_1cols(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
return me->getCols();
}
// Java Method: getCols()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageUChar_n_1cols(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
return me->getCols();
}

// Java Method: getRows()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageUChar_n_1rows(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
return me->getRows();
}
// Java Method: getRows()
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageUChar_n_1rows(JNIEnv *env, jclass, jlong address)
{
(void)env;
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
return me->getRows();
}

// Java Method: getPixel(int i, int j)
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageUChar_n_1getPixel(JNIEnv *env, jclass, jlong address, jint i, jint j)
{
(void)env;
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
return (*me)(i, j);
}
// Java Method: getPixel(int i, int j)
JNIEXPORT jint JNICALL Java_org_visp_core_VpImageUChar_n_1getPixel(JNIEnv *env, jclass, jlong address, jint i, jint j)
{
(void)env;
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
return (*me)(i, j);
}

// Java Method: getPixels()
JNIEXPORT jbyteArray JNICALL Java_org_visp_core_VpImageUChar_n_1getPixels(JNIEnv *env, jclass, jlong address)
{
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
jbyteArray ret = env->NewByteArray(me->getNumberOfPixel());
env->SetByteArrayRegion(ret, 0, me->getNumberOfPixel(), (jbyte *)me->bitmap);
return ret;
}
// Java Method: getPixels()
JNIEXPORT jbyteArray JNICALL Java_org_visp_core_VpImageUChar_n_1getPixels(JNIEnv *env, jclass, jlong address)
{
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
jbyteArray ret = env->NewByteArray(me->getNumberOfPixel());
env->SetByteArrayRegion(ret, 0, me->getNumberOfPixel(), (jbyte *)me->bitmap);
return ret;
}

// Java Method: dump()
JNIEXPORT jstring JNICALL Java_org_visp_core_VpImageUChar_n_1dump(JNIEnv *env, jclass, jlong address)
{
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
std::stringstream ss;
ss << *me;
return env->NewStringUTF(ss.str().c_str());
}
// Java Method: dump()
JNIEXPORT jstring JNICALL Java_org_visp_core_VpImageUChar_n_1dump(JNIEnv *env, jclass, jlong address)
{
vpImage<u_char> *me = (vpImage<u_char> *)address; // TODO: check for nullptr
std::stringstream ss;
ss << *me;
return env->NewStringUTF(ss.str().c_str());
}

} // extern "C"
1 change: 1 addition & 0 deletions modules/java/generator/src/cpp/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ extern "C" {

#include "listconverters.hpp"
#include "visp_java.hpp"
#include <visp3/core/vpConfig.h>

#ifdef _MSC_VER
#pragma warning(disable : 4800 4244)
Expand Down
4 changes: 4 additions & 0 deletions modules/java/generator/src/cpp/listconverters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
#define LOG_TAG "org.visp.utils.Converters"
#include "common.h"

#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif

jlongArray vector_vpColVector_to_List(JNIEnv *env, const std::vector<vpColVector> &V)
{
jlongArray result = env->NewLongArray(V.size());
Expand Down
11 changes: 6 additions & 5 deletions modules/java/generator/src/cpp/listconverters.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,25 @@
#ifndef LISTCONVERTERS_HPP
#define LISTCONVERTERS_HPP

#include <visp3/core/vpConfig.h>
#include "visp3/visp_core.h"
#include "visp3/visp_modules.h"

jlongArray vector_vpColVector_to_List(JNIEnv *env, const std::vector<vpColVector> &);
jlongArray vector_vpColVector_to_List(JNIEnv *env, const std::vector<VISP_NAMESPACE_ADDRESSING vpColVector> &);

jlongArray vector_vpHomogeneousMatrix_to_List(JNIEnv *env, const std::vector<vpHomogeneousMatrix> &);
jlongArray vector_vpHomogeneousMatrix_to_List(JNIEnv *env, const std::vector<VISP_NAMESPACE_ADDRESSING vpHomogeneousMatrix> &);

std::vector<vpHomogeneousMatrix> List_to_vector_vpHomogeneousMatrix(JNIEnv *env, jlongArray arr);
std::vector<VISP_NAMESPACE_ADDRESSING vpHomogeneousMatrix> List_to_vector_vpHomogeneousMatrix(JNIEnv *env, jlongArray arr);

std::vector<vpCameraParameters> List_to_vector_vpCameraParameters(JNIEnv *env, jlongArray arr);
std::vector<VISP_NAMESPACE_ADDRESSING vpCameraParameters> List_to_vector_vpCameraParameters(JNIEnv *env, jlongArray arr);

std::vector<int> List_to_vector_int(JNIEnv *env, jintArray arr);

std::vector<float> List_to_vector_float(JNIEnv *env, jfloatArray arr);

std::vector<double> List_to_vector_double(JNIEnv *env, jdoubleArray arr);

jobjectArray vector_vector_vpImagePoint_to_List(JNIEnv *env, const std::vector<std::vector<vpImagePoint> > &);
jobjectArray vector_vector_vpImagePoint_to_List(JNIEnv *env, const std::vector<std::vector<VISP_NAMESPACE_ADDRESSING vpImagePoint> > &);

jobjectArray vector_vector_double_to_List(JNIEnv *env, const std::vector<std::vector<double> > &V);

Expand Down
8 changes: 8 additions & 0 deletions modules/java/generator/templates/cpp_module.template
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ using namespace std;
#undef throwJavaException
#define throwJavaException throwJavaException_$m
static void throwJavaException(JNIEnv *env, const std::exception *e, const char *method) {
#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif

std::string what = "unknown exception";
jclass je = 0;

Expand All @@ -36,6 +40,10 @@ static void throwJavaException(JNIEnv *env, const std::exception *e, const char

extern "C" {

#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif

$code

} // extern "C"

0 comments on commit 4c6465c

Please sign in to comment.