Files
hdf5/java/src/jni/nativeData.c
Allen Byrne f1633a5fe2 [svn-r29873] Java add missing APIs.
Adjust whitespace in H5.java for exception indentation.
Adjust whitespace in JNI for function signature formatting.
2016-05-04 10:52:40 -05:00

1217 lines
35 KiB
C

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* For details of the HDF libraries, see the HDF Documentation at:
* http://hdfdfgroup.org/HDF5/doc/
*
*/
/*
* This module contains the implementation of all the native methods
* used for number conversion. This is represented by the Java
* class HDFNativeData.
*
* These routines convert one dimensional arrays of bytes into
* one-D arrays of other types (int, float, etc) and vice versa.
*
* These routines are called from the Java parts of the Java-C
* interface.
*
* ***Important notes:
*
* 1. These routines are designed to be portable--they use the
* C compiler to do the required native data manipulation.
* 2. These routines copy the data at least once -- a serious
* but unavoidable performance hit.
*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include <jni.h>
#include "hdf5.h"
#include "h5jni.h"
#include "nativeData.h"
/* returns int [] */
JNIEXPORT jintArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B
(JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */
{
jbyte *barr;
jintArray rarray = NULL;
int blen;
jint *iarray;
jboolean bb;
char *bp;
jint *iap;
int ii;
int len;
if (bdata == NULL) {
h5nullArgument( env, "byteToInt: bdata is NULL?");
} /* end if */
else {
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError(env, "byteToInt: pin failed");
} /* end if */
else {
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
len = blen/(int)sizeof(jint);
rarray = ENVPTR->NewIntArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToInt" );
return NULL;
} /* end if */
iarray = ENVPTR->GetIntArrayElements(ENVPAR rarray,&bb);
if (iarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToInt: pin iarray failed");
return NULL;
} /* end if */
bp = (char *)barr;
iap = iarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jint *)bp;
iap++;
bp += sizeof(jint);
} /* end for */
ENVPTR->ReleaseIntArrayElements(ENVPAR rarray,iarray, 0);
} /* end else */
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
} /* end else */
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B */
/* returns float [] */
JNIEXPORT jfloatArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B
(JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */
{
jbyte *barr;
jfloatArray rarray;
int blen;
jfloat *farray;
jboolean bb;
char *bp;
jfloat *iap;
int ii;
int len;
if (bdata == NULL) {
h5nullArgument( env, "byteToFloat: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError(env, "byteToFloat: pin failed");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
len = blen/(int)sizeof(jfloat);
rarray = ENVPTR->NewFloatArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToFloat" );
return NULL;
} /* end if */
farray = ENVPTR->GetFloatArrayElements(ENVPAR rarray,&bb);
if (farray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToFloat: pin farray failed");
return NULL;
} /* end if */
bp = (char *)barr;
iap = farray;
for (ii = 0; ii < len; ii++) {
*iap = *(jfloat *)bp;
iap++;
bp += sizeof(jfloat);
} /* end for */
ENVPTR->ReleaseFloatArrayElements(ENVPAR rarray,farray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B */
/* returns short [] */
JNIEXPORT jshortArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B
(JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */
{
jbyte *barr;
jshortArray rarray;
int blen;
jshort *sarray;
jboolean bb;
char *bp;
jshort *iap;
int ii;
int len;
if (bdata == NULL) {
h5nullArgument( env, "byteToShort: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError(env, "byteToShort: pin failed");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
len = blen/(int)sizeof(jshort);
rarray = ENVPTR->NewShortArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToShort" );
return NULL;
} /* end if */
sarray = ENVPTR->GetShortArrayElements(ENVPAR rarray,&bb);
if (sarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToShort: pin sarray failed");
return NULL;
} /* end if */
bp = (char *)barr;
iap = sarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jshort *)bp;
iap++;
bp += sizeof(jshort);
} /* end for */
ENVPTR->ReleaseShortArrayElements(ENVPAR rarray,sarray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B */
/* returns long [] */
JNIEXPORT jlongArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B
(JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */
{
jbyte *barr;
jlongArray rarray;
int blen;
jlong *larray;
jboolean bb;
char *bp;
jlong *iap;
int ii;
int len;
if (bdata == NULL) {
h5nullArgument( env, "byteToLong: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError(env, "byteToLong: pin failed");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
len = blen/(int)sizeof(jlong);
rarray = ENVPTR->NewLongArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToLong" );
return NULL;
} /* end if */
larray = ENVPTR->GetLongArrayElements(ENVPAR rarray,&bb);
if (larray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToLong: pin larray failed");
return NULL;
} /* end if */
bp = (char *)barr;
iap = larray;
for (ii = 0; ii < len; ii++) {
*iap = *(jlong *)bp;
iap++;
bp += sizeof(jlong);
} /* end for */
ENVPTR->ReleaseLongArrayElements(ENVPAR rarray,larray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B */
/* returns double [] */
JNIEXPORT jdoubleArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B
(JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */
{
jbyte *barr;
jdoubleArray rarray;
int blen;
jdouble *darray;
jboolean bb;
char *bp;
jdouble *iap;
int ii;
int len;
if (bdata == NULL) {
h5nullArgument( env, "byteToDouble: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError(env, "byteToDouble: pin failed");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
len = blen/(int)sizeof(jdouble);
rarray = ENVPTR->NewDoubleArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToDouble" );
return NULL;
} /* end if */
darray = ENVPTR->GetDoubleArrayElements(ENVPAR rarray,&bb);
if (darray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToDouble: pin darray failed");
return NULL;
} /* end if */
bp = (char *)barr;
iap = darray;
for (ii = 0; ii < len; ii++) {
*iap = *(jdouble *)bp;
iap++;
bp += sizeof(jdouble);
} /* end for */
ENVPTR->ReleaseDoubleArrayElements(ENVPAR rarray,darray,0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B */
/* returns int [] */
JNIEXPORT jintArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B
(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */
{
char *bp;
jbyte *barr;
jintArray rarray;
int blen;
jint *iarray;
jint *iap;
int ii;
jboolean bb;
if (bdata == NULL) {
h5nullArgument( env, "byteToInt: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError(env, "byteToInt: pin failed");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
if ((start < 0) || ((int)(start + (len*(int)sizeof(jint))) > blen)) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToInt: getLen failed");
return NULL;
} /* end if */
bp = (char *)barr + start;
rarray = ENVPTR->NewIntArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToInt" );
return NULL;
} /* end if */
iarray = ENVPTR->GetIntArrayElements(ENVPAR rarray,&bb);
if (iarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError(env, "byteToInt: pin iarray failed");
return NULL;
} /* end if */
iap = iarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jint *)bp;
iap++;
bp += sizeof(jint);
} /* end for */
ENVPTR->ReleaseIntArrayElements(ENVPAR rarray,iarray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B */
/* returns short [] */
JNIEXPORT jshortArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B
(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */
{
char *bp;
jbyte *barr;
jshortArray rarray;
int blen;
jshort *iarray;
jshort *iap;
int ii;
jboolean bb;
if (bdata == NULL) {
h5nullArgument( env, "byteToShort: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError( env, "byteToShort: getByte failed?");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
if ((start < 0) || ((int)(start + (len*(int)sizeof(jshort))) > blen)) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5badArgument( env, "byteToShort: start or len is out of bounds");
return NULL;
} /* end if */
bp = (char *)barr + start;
rarray = ENVPTR->NewShortArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToShort" );
return NULL;
} /* end if */
iarray = ENVPTR->GetShortArrayElements(ENVPAR rarray,&bb);
if (iarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError( env, "byteToShort: getShort failed?");
return NULL;
} /* end if */
iap = iarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jshort *)bp;
iap++;
bp += sizeof(jshort);
} /* end for */
ENVPTR->ReleaseShortArrayElements(ENVPAR rarray,iarray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B */
/* returns float [] */
JNIEXPORT jfloatArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B
(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */
{
char *bp;
jbyte *barr;
jfloatArray rarray;
int blen;
jfloat *iarray;
jfloat *iap;
int ii;
jboolean bb;
if (bdata == NULL) {
h5nullArgument( env, "byteToFloat: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError( env, "byteToFloat: getByte failed?");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
if ((start < 0) || ((int)(start + (len*(int)sizeof(jfloat))) > blen)) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5badArgument( env, "byteToFloat: start or len is out of bounds");
return NULL;
} /* end if */
bp = (char *)barr + start;
rarray = ENVPTR->NewFloatArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToFloat" );
return NULL;
} /* end if */
iarray = ENVPTR->GetFloatArrayElements(ENVPAR rarray,&bb);
if (iarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError( env, "byteToFloat: getFloat failed?");
return NULL;
} /* end if */
iap = iarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jfloat *)bp;
iap++;
bp += sizeof(jfloat);
} /* end for */
ENVPTR->ReleaseFloatArrayElements(ENVPAR rarray,iarray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B */
/* returns long [] */
JNIEXPORT jlongArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B
(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */
{
char *bp;
jbyte *barr;
jlongArray rarray;
int blen;
jlong *iarray;
jlong *iap;
int ii;
jboolean bb;
if (bdata == NULL) {
h5nullArgument( env, "byteToLong: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError( env, "byteToLong: getByte failed?");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
if ((start < 0) || ((int)(start + (len*(int)sizeof(jlong))) > blen)) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5badArgument( env, "byteToLong: start or len is out of bounds");
return NULL;
} /* end if */
bp = (char *)barr + start;
rarray = ENVPTR->NewLongArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToLong" );
return NULL;
} /* end if */
iarray = ENVPTR->GetLongArrayElements(ENVPAR rarray,&bb);
if (iarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError( env, "byteToLong: getLong failed?");
return NULL;
} /* end if */
iap = iarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jlong *)bp;
iap++;
bp += sizeof(jlong);
} /* end for */
ENVPTR->ReleaseLongArrayElements(ENVPAR rarray,iarray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B */
/* returns double [] */
JNIEXPORT jdoubleArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B
(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */
{
char *bp;
jbyte *barr;
jdoubleArray rarray;
int blen;
jdouble *iarray;
jdouble *iap;
int ii;
jboolean bb;
if (bdata == NULL) {
h5nullArgument( env, "byteToDouble: bdata is NULL?");
return NULL;
} /* end if */
barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
if (barr == NULL) {
h5JNIFatalError( env, "byteToDouble: getByte failed?");
return NULL;
} /* end if */
blen = ENVPTR->GetArrayLength(ENVPAR bdata);
if ((start < 0) || ((int)(start + (len*(int)sizeof(jdouble))) > blen)) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5badArgument( env, "byteToDouble: start or len is out of bounds");
return NULL;
} /* end if */
bp = (char *)barr + start;
rarray = ENVPTR->NewDoubleArray(ENVPAR len);
if (rarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5outOfMemory( env, "byteToDouble" );
return NULL;
} /* end if */
iarray = ENVPTR->GetDoubleArrayElements(ENVPAR rarray,&bb);
if (iarray == NULL) {
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
h5JNIFatalError( env, "byteToDouble: getDouble failed?");
return NULL;
} /* end if */
iap = iarray;
for (ii = 0; ii < len; ii++) {
*iap = *(jdouble *)bp;
iap++;
bp += sizeof(jdouble);
} /* end for */
ENVPTR->ReleaseDoubleArrayElements(ENVPAR rarray,iarray, 0);
ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I
(JNIEnv *env, jclass clss, jint start, jint len, jintArray idata) /* IN: array of int */
{
jint *ip;
jint *iarr;
int ilen;
jbyteArray rarray;
int blen;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ii;
int ij;
union things {
int ival;
char bytes[4];
} u;
if (idata == NULL) {
h5nullArgument( env, "intToByte: idata is NULL?");
return NULL;
} /* end if */
iarr = ENVPTR->GetIntArrayElements(ENVPAR idata,&bb);
if (iarr == NULL) {
h5JNIFatalError( env, "intToByte: getInt failed?");
return NULL;
} /* end if */
ilen = ENVPTR->GetArrayLength(ENVPAR idata);
if ((start < 0) || (((start + len)) > ilen)) {
ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5badArgument( env, "intToByte: start or len is out of bounds");
return NULL;
} /* end if */
ip = iarr + start;
blen = ilen * (int)sizeof(jint);
rarray = ENVPTR->NewByteArray(ENVPAR blen);
if (rarray == NULL) {
ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5outOfMemory( env, "intToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5JNIFatalError( env, "intToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
for (ii = 0; ii < len; ii++) {
u.ival = *ip++;
for (ij = 0; ij < sizeof(jint); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S
(JNIEnv *env, jclass clss, jint start, jint len, jshortArray idata) /* IN: array of short */
{
jshort *ip;
jshort *iarr;
int ilen;
jbyteArray rarray;
int blen;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ii;
int ij;
union things {
short ival;
char bytes[4];
} u;
if (idata == NULL) {
h5nullArgument( env, "shortToByte: idata is NULL?");
return NULL;
} /* end if */
iarr = ENVPTR->GetShortArrayElements(ENVPAR idata,&bb);
if (iarr == NULL) {
h5JNIFatalError( env, "shortToByte: getShort failed?");
return NULL;
} /* end if */
ilen = ENVPTR->GetArrayLength(ENVPAR idata);
if ((start < 0) || (((start + len)) > ilen)) {
ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5badArgument( env, "shortToByte: start or len is out of bounds");
return NULL;
} /* end if */
ip = iarr + start;
blen = ilen * (int)sizeof(jshort);
rarray = ENVPTR->NewByteArray(ENVPAR blen);
if (rarray == NULL) {
ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5outOfMemory( env, "shortToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5JNIFatalError( env, "shortToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
for (ii = 0; ii < len; ii++) {
u.ival = *ip++;
for (ij = 0; ij < sizeof(jshort); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F
(JNIEnv *env, jclass clss, jint start, jint len, jfloatArray idata) /* IN: array of float */
{
jfloat *ip;
jfloat *iarr;
int ilen;
jbyteArray rarray;
int blen;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ii;
int ij;
union things {
float ival;
char bytes[4];
} u;
if (idata == NULL) {
h5nullArgument( env, "floatToByte: idata is NULL?");
return NULL;
} /* end if */
iarr = ENVPTR->GetFloatArrayElements(ENVPAR idata,&bb);
if (iarr == NULL) {
h5JNIFatalError( env, "floatToByte: getFloat failed?");
return NULL;
} /* end if */
ilen = ENVPTR->GetArrayLength(ENVPAR idata);
if ((start < 0) || (((start + len)) > ilen)) {
ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5badArgument( env, "floatToByte: start or len is out of bounds");
return NULL;
} /* end if */
ip = iarr + start;
blen = ilen * (int)sizeof(jfloat);
rarray = ENVPTR->NewByteArray(ENVPAR blen);
if (rarray == NULL) {
ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5outOfMemory( env, "floatToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5JNIFatalError( env, "floatToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
for (ii = 0; ii < len; ii++) {
u.ival = *ip++;
for (ij = 0; ij < sizeof(jfloat); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D
(JNIEnv *env, jclass clss, jint start, jint len, jdoubleArray idata) /* IN: array of double */
{
jdouble *ip;
jdouble *iarr;
int ilen;
jbyteArray rarray;
int blen;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ii;
int ij;
union things {
double ival;
char bytes[8];
} u;
if (idata == NULL) {
h5nullArgument( env, "doubleToByte: idata is NULL?");
return NULL;
} /* end if */
iarr = ENVPTR->GetDoubleArrayElements(ENVPAR idata,&bb);
if (iarr == NULL) {
h5JNIFatalError( env, "doubleToByte: getDouble failed?");
return NULL;
} /* end if */
ilen = ENVPTR->GetArrayLength(ENVPAR idata);
if ((start < 0) || (((start + len)) > ilen)) {
ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5badArgument( env, "doubleToByte: start or len is out of bounds");
return NULL;
} /* end if */
ip = iarr + start;
blen = ilen * (int)sizeof(jdouble);
rarray = ENVPTR->NewByteArray(ENVPAR blen);
if (rarray == NULL) {
ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5outOfMemory( env, "doubleToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5JNIFatalError( env, "doubleToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
for (ii = 0; ii < len; ii++) {
u.ival = *ip++;
for (ij = 0; ij < sizeof(jdouble); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J
(JNIEnv *env, jclass clss, jint start, jint len, jlongArray idata) /* IN: array of long */
{
jlong *ip;
jlong *iarr;
int ilen;
jbyteArray rarray;
int blen;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ii;
int ij;
union things {
jlong ival;
char bytes[8];
} u;
if (idata == NULL) {
h5nullArgument( env, "longToByte: idata is NULL?");
return NULL;
} /* end if */
iarr = ENVPTR->GetLongArrayElements(ENVPAR idata,&bb);
if (iarr == NULL) {
h5JNIFatalError( env, "longToByte: getLong failed?");
return NULL;
} /* end if */
ilen = ENVPTR->GetArrayLength(ENVPAR idata);
if ((start < 0) || (((start + len)) > ilen)) {
ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5badArgument( env, "longToByte: start or len is out of bounds?\n");
return NULL;
} /* end if */
ip = iarr + start;
blen = ilen * (int)sizeof(jlong);
rarray = ENVPTR->NewByteArray(ENVPAR blen);
if (rarray == NULL) {
ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5outOfMemory( env, "longToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
h5JNIFatalError( env, "longToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
for (ii = 0; ii < len; ii++) {
u.ival = *ip++;
for (ij = 0; ij < sizeof(jlong); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_intToByte__I
(JNIEnv *env, jclass clss, jint idata) /* IN: int */
{
jbyteArray rarray;
jbyte *barray;
jbyte *bap;
int ij;
jboolean bb;
union things {
int ival;
char bytes[sizeof(int)];
} u;
rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jint));
if (rarray == NULL) {
h5outOfMemory( env, "intToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
h5JNIFatalError( env, "intToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
u.ival = idata;
for (ij = 0; ij < sizeof(jint); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_intToByte__I */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_floatToByte__F
(JNIEnv *env, jclass clss, jfloat idata) /* IN: int */
{
jbyteArray rarray;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ij;
union things {
float ival;
char bytes[sizeof(float)];
} u;
rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jfloat));
if (rarray == NULL) {
h5outOfMemory( env, "floatToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
h5JNIFatalError( env, "floatToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
u.ival = idata;
for (ij = 0; ij < sizeof(jfloat); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_floatToByte__F */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_shortToByte__S
(JNIEnv *env, jclass clss, jshort idata) /* IN: short */
{
jbyteArray rarray;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ij;
union things {
short ival;
char bytes[sizeof(short)];
} u;
rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jshort));
if (rarray == NULL) {
h5outOfMemory( env, "shortToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
h5JNIFatalError( env, "shortToByte: getShort failed?");
return NULL;
} /* end if */
bap = barray;
u.ival = idata;
for (ij = 0; ij < sizeof(jshort); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_shortToByte__S */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D
(JNIEnv *env, jclass clss, jdouble idata) /* IN: double */
{
jbyteArray rarray;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ij;
union things {
double ival;
char bytes[sizeof(double)];
} u;
rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jdouble));
if (rarray == NULL) {
h5outOfMemory( env, "doubleToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
h5JNIFatalError( env, "doubleToByte: getDouble failed?");
return NULL;
} /* end if */
bap = barray;
u.ival = idata;
for (ij = 0; ij < sizeof(jdouble); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_longToByte__J
(JNIEnv *env, jclass clss, jlong idata) /* IN: array of long */
{
jbyteArray rarray;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ij;
union things {
jlong ival;
char bytes[sizeof(jlong)];
} u;
rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jlong));
if (rarray == NULL) {
h5outOfMemory( env, "longToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
h5JNIFatalError( env, "longToByte: getLong failed?");
return NULL;
} /* end if */
bap = barray;
u.ival = idata;
for (ij = 0; ij < sizeof(jlong); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_longToByte__J */
/* returns byte [] */
JNIEXPORT jbyteArray JNICALL
Java_hdf_hdf5lib_HDFNativeData_byteToByte__B
(JNIEnv *env, jclass clss, jbyte idata) /* IN: array of long */
{
jbyteArray rarray;
jbyte *barray;
jbyte *bap;
jboolean bb;
int ij;
union things {
jbyte ival;
char bytes[sizeof(jbyte)];
} u;
rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jbyte));
if (rarray == NULL) {
h5outOfMemory( env, "byteToByte" );
return NULL;
} /* end if */
barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
if (barray == NULL) {
h5JNIFatalError( env, "byteToByte: getByte failed?");
return NULL;
} /* end if */
bap = barray;
u.ival = idata;
for (ij = 0; ij < sizeof(jbyte); ij++) {
*bap = u.bytes[ij];
bap++;
} /* end for */
ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
return rarray;
} /* end Java_hdf_hdf5lib_HDFNativeData_byteToByte__B */
#ifdef __cplusplus
} /* end extern "C" */
#endif /* __cplusplus */