Wednesday, April 24, 2013

jni jnienv GetShortArrayRegion example c c++ java


Get<PrimitiveType>ArrayRegion Routines - GetShortArrayRegion


void Get<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array,
jsize start, jsize len,
 NativeType *buf);

A family of functions that copies a region of a primitive array into a buffer.

The following table describes the specific primitive array element accessors. You should do the following substitutions:(GetShortArrayRegion)

  • Replace Get<PrimitiveType>ArrayRegion with one of the actual primitive element accessor routine names from Table 4-12.

  • Replace ArrayType with the corresponding array type.

  • Replace NativeType with the corresponding native type for that routine.

Table 4-12a Get<PrimitiveType>ArrayRegion Family of Array Accessor Routines

Get<PrimitiveType>ArrayRegion Routine

Array Type

Native Type

GetBooleanArrayRegion()

jbooleanArray

jboolean

GetByteArrayRegion()

jbyteArray

jbyte

GetCharArrayRegion()

jcharArray

jchar

GetShortArrayRegion()

jshortArray

jhort

GetIntArrayRegion()

jintArray

jint

GetLongArrayRegion()

jlongArray

jlong

GetFloatArrayRegion()

jfloatArray

jloat

GetDoubleArrayRegion()

jdoubleArray

jdouble
LINKAGE of GetShortArrayRegion
Indices in the JNIEnv interface function table.
Table 4-12b Get<PrimitiveType>ArrayRegion Family of Array Accessor Routines
Get<PrimitiveType>ArrayRegion Routine
Index
GetBooleanArrayRegion()
199
GetByteArrayRegion()
200
GetCharArrayRegion()
201
GetShortArrayRegion()
202
GetIntArrayRegion()
203
GetLongArrayRegion()
204
GetFloatArrayRegion()
205
GetDoubleArrayRegion()
206
PARAMETERS of GetShortArrayRegion

env: the JNI interface pointer.

array: a Java array.

start: the starting index.

len: the number of elements to be copied.

buf: the destination buffer.

THROWS:

ArrayIndexOutOfBoundsException: if one of the indexes in the region is not valid.
Example of GetShortArrayRegion

        case 'S': {
            m_cmdParser->reply.WriteByte(JDWP_TAG_SHORT);
            m_cmdParser->reply.WriteInt(length);
            if ( length == 0 ) {
                return;
            }
            jshort* bufferArray = reinterpret_cast<jshort*>(AgentBase::GetMemoryManager()
                    .Allocate(sizeof(jshort)*length JDWP_FILE_LINE));
            AgentAutoFree scavenger(bufferArray JDWP_FILE_LINE);
            jni->GetShortArrayRegion(static_cast<jshortArray>(arrayObject), firstIndex, length, bufferArray);
            classManager.CheckOnException(jni);
                        
            for (int i = 0; i < length; i++) {
                value.s = bufferArray[i];
                JDWP_TRACE_DATA("GetValues: send: index=" << i
                    << ", value=(short)" << value.s);
                m_cmdParser->reply.WriteUntaggedValue(jni, JDWP_TAG_SHORT, value);
            }
            return;
        }