aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2013-05-20 15:52:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-05-20 15:52:47 +0000
commitcf5ac0ec696fce7fac6b324ec7d4d6da217e501c (patch)
tree746d5e02fccef765f2c1a4344fc07ee5659e8305
parent89544997f88c808a03865ac7b3eac217f6cf036f (diff)
parent389e088269eb7d3c8ee0bff7e37f79088ce62361 (diff)
downloadplatform_libnativehelper-cf5ac0ec696fce7fac6b324ec7d4d6da217e501c.tar.gz
platform_libnativehelper-cf5ac0ec696fce7fac6b324ec7d4d6da217e501c.tar.bz2
platform_libnativehelper-cf5ac0ec696fce7fac6b324ec7d4d6da217e501c.zip
Merge "Scoped primitive arrays: allow them to be null"
-rw-r--r--include/nativehelper/ScopedPrimitiveArray.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/nativehelper/ScopedPrimitiveArray.h b/include/nativehelper/ScopedPrimitiveArray.h
index f6626b2..d797b9d 100644
--- a/include/nativehelper/ScopedPrimitiveArray.h
+++ b/include/nativehelper/ScopedPrimitiveArray.h
@@ -26,6 +26,8 @@
#define INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(PRIMITIVE_TYPE, NAME) \
class Scoped ## NAME ## ArrayRO { \
public: \
+ explicit Scoped ## NAME ## ArrayRO(JNIEnv* env) \
+ : mEnv(env), mJavaArray(NULL), mRawArray(NULL) {} \
Scoped ## NAME ## ArrayRO(JNIEnv* env, PRIMITIVE_TYPE ## Array javaArray) \
: mEnv(env), mJavaArray(javaArray), mRawArray(NULL) { \
if (mJavaArray == NULL) { \
@@ -39,6 +41,10 @@
mEnv->Release ## NAME ## ArrayElements(mJavaArray, mRawArray, JNI_ABORT); \
} \
} \
+ void reset(PRIMITIVE_TYPE ## Array javaArray) { \
+ mJavaArray = javaArray; \
+ mRawArray = mEnv->Get ## NAME ## ArrayElements(mJavaArray, NULL); \
+ } \
const PRIMITIVE_TYPE* get() const { return mRawArray; } \
PRIMITIVE_TYPE ## Array getJavaArray() const { return mJavaArray; } \
const PRIMITIVE_TYPE& operator[](size_t n) const { return mRawArray[n]; } \
@@ -69,6 +75,8 @@ INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jshort, Short);
#define INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(PRIMITIVE_TYPE, NAME) \
class Scoped ## NAME ## ArrayRW { \
public: \
+ explicit Scoped ## NAME ## ArrayRW(JNIEnv* env) \
+ : mEnv(env), mJavaArray(NULL), mRawArray(NULL) {} \
Scoped ## NAME ## ArrayRW(JNIEnv* env, PRIMITIVE_TYPE ## Array javaArray) \
: mEnv(env), mJavaArray(javaArray), mRawArray(NULL) { \
if (mJavaArray == NULL) { \
@@ -82,6 +90,10 @@ INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jshort, Short);
mEnv->Release ## NAME ## ArrayElements(mJavaArray, mRawArray, 0); \
} \
} \
+ void reset(PRIMITIVE_TYPE ## Array javaArray) { \
+ mJavaArray = javaArray; \
+ mRawArray = mEnv->Get ## NAME ## ArrayElements(mJavaArray, NULL); \
+ } \
const PRIMITIVE_TYPE* get() const { return mRawArray; } \
PRIMITIVE_TYPE ## Array getJavaArray() const { return mJavaArray; } \
const PRIMITIVE_TYPE& operator[](size_t n) const { return mRawArray[n]; } \