mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-25 01:41:43 +00:00
Make JxArrayRef less error-prone for jxArray (#1190)
Add a length-taking overload so that if a length happens to be provided for a jarray, the direct byte buffer overload is not used.
This commit is contained in:
@@ -223,13 +223,16 @@ class JArrayRefBase : public JArrayRefInner<JArrayRefBase<T>, T> {
|
||||
this->m_elements = elements;
|
||||
}
|
||||
|
||||
JArrayRefBase(JNIEnv* env, jarray jarr) {
|
||||
JArrayRefBase(JNIEnv* env, jarray jarr, size_t size) {
|
||||
this->m_env = env;
|
||||
this->m_jarr = jarr;
|
||||
this->m_size = jarr ? env->GetArrayLength(jarr) : 0;
|
||||
this->m_size = size;
|
||||
this->m_elements = nullptr;
|
||||
}
|
||||
|
||||
JArrayRefBase(JNIEnv* env, jarray jarr)
|
||||
: JArrayRefBase(env, jarr, jarr ? env->GetArrayLength(jarr) : 0) {}
|
||||
|
||||
JNIEnv* m_env;
|
||||
jarray m_jarr = nullptr;
|
||||
size_t m_size;
|
||||
@@ -252,6 +255,14 @@ class JArrayRefBase : public JArrayRefInner<JArrayRefBase<T>, T> {
|
||||
errs() << "JArrayRef was passed a null pointer at \n" \
|
||||
<< GetJavaStackTrace(env); \
|
||||
} \
|
||||
J##F##ArrayRef(JNIEnv* env, T##Array jarr, int len) \
|
||||
: detail::JArrayRefBase<T>(env, jarr, len) { \
|
||||
if (jarr) \
|
||||
m_elements = env->Get##F##ArrayElements(jarr, nullptr); \
|
||||
else \
|
||||
errs() << "JArrayRef was passed a null pointer at \n" \
|
||||
<< GetJavaStackTrace(env); \
|
||||
} \
|
||||
J##F##ArrayRef(JNIEnv* env, T##Array jarr) \
|
||||
: detail::JArrayRefBase<T>(env, jarr) { \
|
||||
if (jarr) \
|
||||
@@ -269,6 +280,15 @@ class JArrayRefBase : public JArrayRefInner<JArrayRefBase<T>, T> {
|
||||
\
|
||||
class CriticalJ##F##ArrayRef : public detail::JArrayRefBase<T> { \
|
||||
public: \
|
||||
CriticalJ##F##ArrayRef(JNIEnv* env, T##Array jarr, int len) \
|
||||
: detail::JArrayRefBase<T>(env, jarr, len) { \
|
||||
if (jarr) \
|
||||
m_elements = \
|
||||
static_cast<T*>(env->GetPrimitiveArrayCritical(jarr, nullptr)); \
|
||||
else \
|
||||
errs() << "JArrayRef was passed a null pointer at \n" \
|
||||
<< GetJavaStackTrace(env); \
|
||||
} \
|
||||
CriticalJ##F##ArrayRef(JNIEnv* env, T##Array jarr) \
|
||||
: detail::JArrayRefBase<T>(env, jarr) { \
|
||||
if (jarr) \
|
||||
|
||||
Reference in New Issue
Block a user